查看: 3754|回复: 2

[提问] 为啥刚刚enable MMU后系统立刻就挂了?

[复制链接]
发表于 2013-10-7 01:33:36 | 显示全部楼层 |阅读模式
嵌入式门外汉,手头有个2410的老开发板,自带bootloader没动,可通过usb下载zImage并启动成功。
我有个想法是做双bootloader,也就是除了本身的bootloader外,另外安装一个uboot在以前属于linux kernel的nand分区上。但是出现了问题:
1、从bootloader启动写在nand分区上的uboot,再通过uboot下载linux内核zImage,显示解压完成后就挂住了。
2、从bootloader通过USB下载和上面相同的uboot.bin,并在下载完成后运行该uboot,再通过uboot下载和上面相同的linux内核,内核可以成功启动。
这两个方法唯一的区别就是,第一次是加载nand分区上的uboot运行,而第二次是下载uboot直接运行。


我写了一段闪灯的汇编,插入到内核启动代码,发现,在head.S的__turn_mmu_on中,执行完mcr p15, 0, r0, c1, c0, 0(也就是开启mmu),系统就挂住了。通过实验,我观察到的r0值是0xc0007177。对了,kernel版本是2.6.14。不知道有没有大侠可以帮我看看这是咋回事?





 楼主| 发表于 2013-10-10 20:41:27 | 显示全部楼层
搞定了,妈的,基础知识不牢。。。原来是bootloader设置的启动参数区(0x30000100)作祟。
zImage解压程序貌似会读取这个区域,其内容是页的大小和数量,bootloader设置分别为0x1000和0x4000,我在uboot启动zImage前将0x30000100和0x30000104两个32位清零,kernel就能正常启动了。

大概就是这个意思,我还没时间深究zImage的解压过程,希望有懂的大侠澄清一下。
发表于 2013-10-14 20:22:38 | 显示全部楼层
多谢分享,楼主辛苦
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表