我编写了TQ2440的启动代码,在完成各个部件的初始化后,调用自己写的C程序Copy2SDRAM把在Nand flash中以0x1f0000开始,大小为0x00200000的linux内核拷贝到内存中0x30008000处,然后ldr pc , =0x30008000.
在终端上显示:
#starting application at 0x30000000
Uncompressing Linux.......................................
.......................done , booting kernel.
然后就停住了。
请问问题会在那里呢?引导linux前,有那些必要的准备工作?
------解决方案--------------------
"booting kernel."是你的程序打印的吧?是否还没到LINUX?
如果是这样的话就要查一下从NAND复制程序到RAM的过程中是否正确完成,建议在跳转语句前加一个使用串口输入命令便执行while(1)的代码,或者干脆就在此加上while(1),然后通过ADS看下0x30008000处的代码与LINUX的代码是否一致,每个512字节看一段,查看是否数据都对。
------解决方案--------------------
楼上说的对。
想办法验证下自己拷贝的代码是否正确无误。
MARK.
------解决方案--------------------
不懂Linux呢。呵呵,帮顶了。
------解决方案--------------------
首先确定你在NAND FLASH中的内容是不是有问题,也就是说起码数据时没有问题的,才能谈到拷贝之后的跳转没有问题。
确定SOURCE数据没有问题之后,再看看你的C数据搬移代码是不是有问题,搬移的地址和搬移的方法是否正确。可以自己写一个函数把0x30008000之后的内容打印出来,也可以采用系统的方法来看。
都没有问题了,还不好用,只能怀疑你加载的内核有问题了。
------解决方案--------------------
如果是 u-boot启内核
u-boot会读取kernel img的 kernel header 分析margic number判断系统类型等
这里一般分打印系统的一些信息的
完了 跳到kernel start entry然后交给kernel控制
你这个是直接ldr的 问题不会在bootloader块 内核的问题 原先内核可否正常启动
写到nand中内核数据对不对 dump出来对比下
读出来的又对不对
------解决方案--------------------
学习了。。。
------解决方案--------------------
你在用UBOOT启动前需要关注很多事情。比如寄存器状态。不是一句代码就搞定的事情。
------解决方案--------------------
------解决方案--------------------
学习了………………………………
------解决方案--------------------