以下内容源于网络资源的学习与整理,如有侵权请告知删除。
我们已知,X210开发板第一层启动是从SD0(即板载的iNand)启动,当iNand启动做校验和失败时才会转为启动SD2(接近复位键的那个卡槽)。
我们做裸机实验时是通过SD2来提供裸机程序镜像的,因此需要先破坏内部iNand的uboot才可以强迫开发板从SD2启动去执行我们的裸机程序。
连接串口2(远离网口的那个串口),打开SecureCRT,进入uboot控制台,输入help movi命令确认一下movi的用法,如下。
- x210 # movi
- Usage:
- movi - sd/mmc r/w sub system for SMDK board
-
- x210 # help movi
- movi init - Initialize moviNAND and show card info
- movi read {u-boot | kernel} {addr} - Read data from sd/mmc
- movi write {fwbl1 | u-boot | kernel} {addr} - Write data to sd/mmc
- movi read rootfs {addr} [bytes(hex)] - Read rootfs data from sd/mmc by size
- movi write rootfs {addr} [bytes(hex)] - Write rootfs data to sd/mmc by size
- movi read {sector#} {bytes(hex)} {addr} - instead of this, you can use "mmc read"
- movi write {sector#} {bytes(hex)} {addr} - instead of this, you can use "mmc write"
-
- x210 #
然后输入“movi write u-boot 0x30000000”,表示将内存地址0x30000000的内容(应该全是0)写入到inand中的u-boot分区。
- x210 # movi write u-boot 0x30000000
- Writing BL1 to sector 1 (16 sectors).. checksum : 0x13610b
- writing bootloader.. 49, 1024
- MMC write: dev # 0, block # 49, count 1024 ... 1024 blocks written: OK
- completed
- x210 #
重启X210开发板,如果串口中输出如下则说明头部校验和失败,接下来会转入SD卡通道启动。
SD checksum Error
待X210完全启动进入系统后,先后在SecureCRT中输入以下命令:
busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync
sync
此命令把板载inand的第1个扇区用全0来填充,即擦除它,则板载inand的uboot的第1个扇区就被破坏了。将来启动时iROM还是先从inand中读取前16KB,然后计算校验和,但因为有1个扇区被擦掉了,校验和不能通过,因此启动失败,从而转到SD2去启动。
破坏板载inand的uboot后,如果不插入外部SD卡,启动时串口得到:SD checksum Error。