嵌入式门外汉,手头有个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。不知道有没有大侠可以帮我看看这是咋回事?
|