6u系列,SD卡烧写换镜像的时候,为了避免影响后续制卡,一般都是制卡完成后换卡里面对应文件夹的镜像,如想换烧写启动就换sdrun里的,烧到板子里面就换target里的。但烧写启动里的uboot直接换卡里面的sdrun文件夹下的uboot镜像并不生效。这是因为卡起的需要,uboot在SD卡里有专属分区位置,这是通过制卡脚本直接写过去的,sdrun里的只是写进去的过程中留下来的。具体可以参考制卡脚本。 脚本的前半部分是选择卡,格式化,做分区。 做分区的部分新一点的做卡脚本增加了判断的内容,下面脚本代码中第一行获取sdfisk的版本信息,下面跟两个if判断对应版本使用对应的方法进行分区操作。 VERSFDISK=`sfdisk --version | awk {'print $4'}` REFVER=2.26.0 function version_ge() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"; } function version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; } if version_ge $VERSFDISK $REFVER; then #>= echo "Warning: sfdisk version $VERSFDISK." echo "Warning: Flashcard." sfdisk --force $DRIVE << EOF 10M,1000M,0x0C EOF #echo "Warning: Start card." #sfdisk --force $DRIVE << EOF #10M,500M,0x0C #520M,,0x83 #EOF fi if version_lt $VERSFDISK $REFVER; then #< echo "Warning: sfdisk version $VERSFDISK." echo "Warning: Flashcard." sfdisk --force -uM $DRIVE << EOF 10,1000,0x0C EOF #echo "Warning: Start card." #sfdisk --force -uM $DRIVE << EOF #10,500,0x0C #520,,0x83 #EOF fi sleep 5 cat << EOM |
脚本后半部分就是在将对应内容考进对应分区。其中uboot部分比较特殊,它是先开头写零,然后再将前面已经写到boot分区的uboot通过dd命令写入。 dd if=/dev/zero of=${DRIVE} bs=1k seek=384 conv=fsync count=129 dd if=boot/sdrun/u-boot.imx of=${DRIVE} bs=1k seek=1 conv=fsync |
所以如果想更换卡起uboot,需要现在工具里换好再制卡。 |