以下内容源于网络资源的学习与整理,如有侵权请告知删除。
一、X210开发板的SD/iNand启动步骤
我们已知,X210开发板第一层启动是从SD0(即板载的iNand)启动,当iNand启动做校验和失败时才会转为启动SD2(接近复位键的那个卡槽)。
我们做裸机实验时是通过SD2来提供裸机程序镜像的,因此需要先破坏内部iNand的uboot才可以强迫开发板从SD2启动去执行我们的裸机程序。
二、两种情形下破坏uboot的方法
1、uboot环境下擦除开发板inand中的uboot
连接串口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
SD Init Error
Uart negotiation Error
Insert an OTG cable into the connector!
2、linux或android系统下擦除inand中的uboot
待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。