自己移植好了 在 AM3354 板子上(自己定制的板子),uboot 的分区为:
#define MTDPARTS_DEFAULT "mtdparts=nand.0:" \
"128k(SPL)," \
"128k(SPL.backup1)," \
"128k(SPL.backup2)," \
"128k(SPL.backup3)," \
"1920k(u-boot)," \
"128k(u-boot-env)," \
"5m(kernel)," \
"-(rootfs)"
通过两种不同的地址,烧写 u-boot.img ,得到不同的结果。
方式一 :
mmc rescan; mw.b 0x82000000 0xFF 0x20000; fatload mmc 0 0x82000000 MLO;nand erase 0x0 0x20000;nand write.i 0x82000000 0x0 0x20000; // 烧写 spl
mmc rescan;mw.b 0x82000000 0xFF 0x40000; fatload mmc 0 0x82000000 u-boot.img; nand erase 0xC0000 0x100000; nand write.i 0x82000000 0xC0000 0x100000; // 少些 u-boot.img
这种方式,是讲 u-boot.img 写入到 0xC0000 开始的地址。可以成功启动,也能引导内核,一点问题都没有。可是,查看 uboot 的分区 :
U-Boot# mtdparts
device nand0 <nand.0>, # parts = 8
#: name size offset mask_flags
0: SPL 0x00020000 0x00000000 0
1: SPL.backup1 0x00020000 0x00020000 0
2: SPL.backup2 0x00020000 0x00040000 0
3: SPL.backup3 0x00020000 0x00060000 0
4: u-boot 0x001e0000 0x00080000 0
5: u-boot-env 0x00020000 0x00260000 0
6: kernel 0x00500000 0x00280000 0
7: rootfs 0x3f880000 0x00780000 0
active partition: nand0,0 – (SPL) 0x00020000 @ 0x00000000
defaults:
mtdids : nand0=nand.0
mtdparts: mtdparts=nand.0:128k(SPL),128k(SPL.backup1),128k(SPL.backup2),128k(SPL.backup3),1920k(u-boot),128k(u-boot-env),5m(kernel),-(rootfs)
可见,UBOOT 的分区,是在 0x00080000 地址,并不是 0xC0000 。
方式 二 :
因为从上面的启动信息查看,知道 UBOOT 的分区信息,将 uboot.ing 烧写到 0x00080000 地址 :
mc rescan;mw.b 0x82000000 0xFF 0x200000; fatload mmc 0 0x82000000 u-boot.img; nand erase 0x80000 0x200000; nand write 0x82000000 0x80000 0x200000;
可是,这种情况的时候,完全不能启动 uboot,UBOOT 打印了 :
U-Boot SPL 2014.10 (Jan 23 2017 – 13:57:54)
之后,就不再进行了。
我的问题是,按照 UBOOT 的正确的分区的地址,也就是 0x80000 ,进行烧写,不能成功启动。反而,uboot 的分区地址,向后 256 K,也就是0xC0000 进行烧写 u-boot.img 就没有问题。
求知识
求分享
user4725089:
回复 Steven Liu1:
嗯,谢谢,确实是这样。我修改了 UBOOT 的分区,但是这些分区表中的定义地址,是被明确写死的,我并没有做全部修改,才导致的。谢谢