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开发之三(内核启动后不正常)(完结)的更多相关文章

  1. STM32F103 ucLinux开发之四(内核启动后的调试)

    Stm32-uclinux启动后的调试 1.  修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后 ...

  2. STM32F103 ucLinux开发BOOT

    STM32F103 ucLinux开发BOOT STM3210E-EVAL官方开发板主芯片STM32F103ZET6: 片内512K Flash,地址0x0800 0000 ~ 0x0807 FFFF ...

  3. STM32F103 ucLinux开发之一(BOOT分析及源码)

    STM32F103 ucLinux开发BOOT STM3210E-EVAL官方开发板主芯片STM32F103ZET6: 片内512K Flash,地址0x0800 0000 ~ 0x0807 FFFF ...

  4. 通过JTAG对比内核启动后text/rodata段内容

    关键词:vmlinux.strip.dump._text.__end_rodata等等. 在日常的调试中,可能会在某些情况下踩到内核重要的数据,比如代码段或者rodata之类. 这种情况下,需要确认这 ...

  5. STM32F103 ucLinux开发之二(内核启动汇编代码分析)

    start_kernel之前的汇编代码分析 Boot中执行下面两句话之后,进入uclinux内核. theKernel = (void (*)(int, int, unsigned int))((ui ...

  6. linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)

    linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86 ...

  7. 自定义内核启动后的Logo

    1.使用图像GIMP工具   2.详细步骤如下:   A.将800x480的图片导入到GIMP工具.   B.选中GIMP菜单栏进行以下操作     图像         -->模式       ...

  8. 内核启动后,lcd显示logo失败

    针对-s5pv210,但对其他平台也使用 lcd显示logo失败,若显示成功默认的logo是一只企鹅,但是串口打印“Start display and show logo”,但是LCD屏没有显示    ...

  9. Stm32-uclinux启动后的调试

    Stm32-uclinux启动后的调试 1.  修改__pfn_to_page使得能够启动 根据STM32F103 ucLinux开发之三(内核启动后不正常)的描述,内核无法启动是选择了平板内存模式后 ...

随机推荐

  1. python循环删除列表里的元素!漏删!

    li = [1,2,3,4,5,6] for i in li: if i<3: li.remove(i) print(li) #输出的结果是 [2,3,4,5,6]    2没有remove掉 ...

  2. 【转载】windows 下重置 mysql 的 root 密码

      今天发现 WordPress 连接不上数据库,登录 window server 服务器查看,所有服务均运行正常. 使用 root 账号登录 mysql 数据库,结果提示密码不匹配.我突然意识到,服 ...

  3. css 动画中 ease,seae-in,ease-in-out,ease-out,效果区别

    linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1)).(匀速) ease 规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0. ...

  4. N个必备的实用jQuery代码段

    jQuery(function() { /* <input type="password" name="pass" id="pass" ...

  5. LintCode2016年8月22日算法比赛----骰子求和

    骰子求和 题目描述 扔n个骰子,向上面的数字之和为 S .给定 Given n,请列出所有可能的 S 值及其相应的概率. 样例 给定n=1,返回 [ [1, 0.17], [2, 0.17], [3, ...

  6. Signal & Slot in Qt

    Try your best to provide an mechanism to implement what you want. 1. All is generated by QT Framewor ...

  7. Cloudera Manager5及CDH5在线(cloudera-manager-installer.bin)安装详细文档

    问题导读:1.Cloudera Manager5如何使用cloudera-manager-installer.bin安装?2.Cloudera Manager5安装被中断该如何继续安装?还是重新安装? ...

  8. windows php5.4,5.6,7.X添加redis扩展

      首先下载php5.4对应版本的php_igbinary.dll,php_redis.dll扩展. 下载地址:http://download.csdn.net/detail/gejinbao357/ ...

  9. Docker Toolbox更换镜像源并下载centos7

  10. centos 安装php扩展的两种方法

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   查看PHP版本: php -v 1 1 查看指定PHP版本: /usr/local/php/bin/php -v 1 1 ...