panda1985 发表于 2012-12-12 19:38:35

求助:用uboot烧写内核第一次启动成功,再次上电则不能启

用自己移植的Uboot烧写linux2.6.22内核,用 loadx 0x30000000 115200烧写内核,完成后重启开发板然后用 bootm 0x30000000可以启动内核,打印出启动信息。 但是当我再重启开发板以后再用bootm 0x30000000 却不能启动内核了, 串口输出 ## Booting image at 30000000 ...         Bad Magic Number 。 我刚学习ARM 不知道这是什么原因,请各位老师指教一下。



517456 发表于 2012-12-12 20:08:32

bootm之前需要先把FLASH上的数据加载到SDRAM中,然后再执行bootm。uboot的作用主要是设置一些参数,把linux内核从FLASH上拷到SDRAM中,然后再执行SDRAM中的程序;如果你一开始就从SDRAM中执行,程序会由于找不到正确的执行体会出错。

error_dan 发表于 2012-12-12 20:16:15

http://blog.chinaunix.net/uid-20717979-id-3261606.html

看看幻数是不是和你的系统不匹配。

maimaige 发表于 2012-12-12 20:55:47

我试着回答一下
那个 loadx 0x30000000 115200命令的作用是将内核映像通过串口下载到ARM的内存地址 0x30000000 处,这个内存映像是存放在SDRAM中的,没有烧写到Flash中去,
当执行完 loadx 0x30000000 115200之后,如果板子不掉电,只是按下复位键,可能SDRAM中的内容还存在,所以运行bootm 0x30000000会有用,但是这个命令之后linux内核就起来了,
linux内核会重新分配使用sdram,原来存放在sdram中的内核映像被覆盖掉了,再次运行bootm 0x30000000,就没有用了

panda1985 发表于 2012-12-12 21:09:51

maimaige 发表于 2012-12-12 20:55 static/image/common/back.gif
我试着回答一下
那个 loadx 0x30000000 115200命令的作用是将内核映像通过串口下载到ARM的内存地址 0x300 ...

原来是在SDRAM中,我以为烧写到了NANDFLASH中呢,谢谢你的回答给我了启发

mysky 发表于 2012-12-17 13:09:29

loadx命令将内核写到了内存中,并没有写到flash中,所以掉电就丢失了

error_dan 发表于 2012-12-17 13:12:51

涨姿势了。。。
页: [1]
查看完整版本: 求助:用uboot烧写内核第一次启动成功,再次上电则不能启