STM32F103 ucLinux开发之三(内核启动后不正常)(完结)
STM32F103 ucLinux内核没有完全启动
从BOOT跳转到内核后,执行一长段的汇编语言,然后来到startkernel函数,开启C语言之旅。
但是内核输出不正常,如下所示:
Linux version 2.6.26-uc0 (stm32@localhost.localdomain) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-163) ) #2 Wed Sep 2 10:09:23 UTC 2009
CPU: ARMv7-M Processor [411fc231] revision 1 (ARMv?(11)M)
Machine: STM3210E-EVAL
Warning: bad configuration page, trying to continue
SRAM Config: bank[0] @ 0x68000000 (size: 1024KB) - bank[1] @ 0x20000000 (size: 64KB).
Ignoring unrecognised tag 0x00000000
Built 1 zonelists in Zone order, mobility grouping off. Total pages: 254
Kernel command line:
PID hash table entries: 16 (order: 4, 64 bytes)
console [ttyS0] enabled
Dentry cache hash table entries: 1024 (order: 0, 4096 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Bad page state in process 'swapper'
page:68901180 flags:0x2f55030e mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'swapper'
page:689011c0 flags:0x08a8420a mapping:00000000 mapcount:0 count:134218033
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'swapper'
page:689011c0 flags:0x08a8420a mapping:00000000 mapcount:0 count:134218033
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'swapper'
page:689011e0 flags:0x2eb8430e mapping:00000000 mapcount:0 count:134218033
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'swapper'
page:689011e0 flags:0x2eb8430e mapping:00000000 mapcount:0 count:134218033
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'swapper'
page:68901200 flags:0x0185000c mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
CPU: 0 Tainted: G B (2.6.26-uc0 #2)
pc : [<08039bc2>] lr : [<08039cb1>] psr: 0100000b
sp : 20001f50 ip : 00000000 fp : 68901000
r10: 2000c28c r9 : 00000006 r8 : 00900000
r7 : 00000000 r6 : 00020000 r5 : 0c955a82 r4 : 68901220
r3 : 2984a715 r2 : ffffffff r1 : 9e375c8e r0 : 689
01220
跟踪调试内核,发现在mem_init→ free_all_bootmem_node→ free_all_bootmem_core→ __free_pages_bootmem→ __free_page→ __free_pages
→free_hot_page→ free_hot_cold_page→ free_pages_check→ bad_page
在bad_pages函数最终输出了下面的信息
Bad page state in process 'swapper'
page:68901180 flags:0x2f55030e mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
而导致上面的原因是在free_all_bootmem_core函数中
pfn_to_page→ __pfn_to_page(根据推断是它,但看编译又不是)
#define __pfn_to_page(pfn) (mem_map + ((pfn) - ARCH_PFN_OFFSET))
#define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
#define PHYS_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT)
#define PHYS_OFFSET (CONFIG_DRAM_BASE)
#define CONFIG_DRAM_BASE 0x20000000
struct page *mem_map,page结构体占用32个字节,mem_map的地址是0x6800 0000,ARCH_PFN_OFFSET根据上面的推算为2000 0
若pfn是6800 0,则内存0x6800 0000对应的页管理地址是
0x6800 0000 +(6800 0-2000 0)*32 = 6890 0000
而6890 0000这个地址实际是不存在的。
综上所述,很奇怪ST官网上的开发板可以正常运行。
我做了如下尝试:
1、将官网上的BOOT、内核下载到自己的设备上,串口输出乱码。原因是官网上是无源的8M晶振,而我们使用的是有源的11.0592M,
这样根据BOOT配置,系统主频变成了99M,但是串口的波特率应该不会改变啊,输出却是乱码,试了几个波特率都不对。
2、内核中,在调用控制台初始化时,我对串口1重新配置,修改它的波特率,仍然不起作用,输出乱码。
3、更换晶振,但是手边没有8M有源的,无源又需要电容搭接电路等,现在暂时没有试验出来。
STM32F103 ucLinux开发之三(内核启动后不正常)(完结)的更多相关文章
- STM32F103 ucLinux开发之四(内核启动后的调试)
Stm32-uclinux启动后的调试 1. 修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后 ...
- STM32F103 ucLinux开发BOOT
STM32F103 ucLinux开发BOOT STM3210E-EVAL官方开发板主芯片STM32F103ZET6: 片内512K Flash,地址0x0800 0000 ~ 0x0807 FFFF ...
- STM32F103 ucLinux开发之一(BOOT分析及源码)
STM32F103 ucLinux开发BOOT STM3210E-EVAL官方开发板主芯片STM32F103ZET6: 片内512K Flash,地址0x0800 0000 ~ 0x0807 FFFF ...
- 通过JTAG对比内核启动后text/rodata段内容
关键词:vmlinux.strip.dump._text.__end_rodata等等. 在日常的调试中,可能会在某些情况下踩到内核重要的数据,比如代码段或者rodata之类. 这种情况下,需要确认这 ...
- STM32F103 ucLinux开发之二(内核启动汇编代码分析)
start_kernel之前的汇编代码分析 Boot中执行下面两句话之后,进入uclinux内核. theKernel = (void (*)(int, int, unsigned int))((ui ...
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)
linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86 ...
- 自定义内核启动后的Logo
1.使用图像GIMP工具 2.详细步骤如下: A.将800x480的图片导入到GIMP工具. B.选中GIMP菜单栏进行以下操作 图像 -->模式 ...
- 内核启动后,lcd显示logo失败
针对-s5pv210,但对其他平台也使用 lcd显示logo失败,若显示成功默认的logo是一只企鹅,但是串口打印“Start display and show logo”,但是LCD屏没有显示 ...
- Stm32-uclinux启动后的调试
Stm32-uclinux启动后的调试 1. 修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后 ...
随机推荐
- 51Nod 算法马拉松23 开黑记
惨啊……虽然开了半天黑,但是还是被dalao们踩了…… 第二次开黑,还是被卡在rank20了,我好菜啊……= = 写一写比赛经过吧…… 看到题之后习惯性都打开,A~D看上去似乎并没有什么思路,F应该是 ...
- Vue.js学习(常用指令)
Vue.js的指令是以v-开头,它们用于HTML元素,指令提供了一些特殊的特性,将指令绑定在元素上时,指令会为绑定的目标元素添加一些特殊的行为,我们可以将指令看作特殊的HTML特性. 本文参考:htt ...
- js 判断 复选框全选、全不选、反选、必选一个
一个挺 使用的 js 代码片段, 判断 复选框全选.全不选.反选.必选一个 记录下, 搬来的 思路: 修改数据的 选中与否状态, 拿到所有的输入框,看是否有选中的状态 <html> & ...
- Java 中你必须了解的常用类(8)
Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的, 比如基本类型不能调用方法.功能 ...
- Windows server 2008 Tips
Tips for remote server in domain. Some Definition user [user] group workgroup domain Local account d ...
- BubblePopupWindow
Android 实现各个方向的气泡弹窗,可控制气泡尖角偏移量. https://github.com/smuyyh/BubblePopupWindow 截图 使用: BubblePopupWindow ...
- Raspberry install wine
sudo apt install wine winecfg出现问题 树莓派3B是卡片电脑,内存为1GB,一般运行Linux.Linux两种主流的内存分配方法2G/2G和3G/1G,树莓派系统后期优化性 ...
- jekyll开发静态网站
一.Ruby环境安装配置 首先下载ruby安装ruby download ,安装完ruby后,再安装rubyGems:运行gem update --system即可. 然后下载DevKit-mingw ...
- 需求分析之WBS
我们的产品就是当你把废旧的塑料瓶和电池投入回收箱中会产生能量,那么这能量可以干嘛呢那就通过我们的APP进行扫码记录所产生的能量这写能量可以在我们的APP的换吧中进行兑换用户所需要的东西比如:共享单车的 ...
- 初识WCF2
参照: http://blog.csdn.net/songyefei/article/details/7371571 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾 ...