20170314_jeffrey - silenceuncrio/diary GitHub Wiki
昨天腰 不舒服 請假一天
先補 engineering notebook
這禮拜預計的 project schedule 為 Firmware Upgrade: Erase rootfs
參考 mfgtool 的 ucl2.xml
<UCL>
...
<!--burn the kernel to NAND: -->
<CMD state="Updater" type="push"
body="$ flash_erase /dev/mtd2 0 0">Erasing Kernel partition</CMD>
<CMD state="Updater" type="push"
body="send" file="files/zImage">Sending kernel zImage</CMD>
<CMD state="Updater" type="push"
body="$ nandwrite -p /dev/mtd2 -p $FILE">Flashing Kernel</CMD>
<CMD state="Updater" type="push"
body="$ flash_erase /dev/mtd3 0 0">Erasing dtb partition</CMD>
<CMD state="Updater" type="push"
body="send" file="files/zImage-imx6ul-14x14-evk.dtb">Sending Device Tree file</CMD>
<CMD state="Updater" type="push"
body="$ nandwrite -p /dev/mtd3 -p $FILE">Flashing dtb</CMD>
<!--prepare all ubi device: -->
<CMD state="Updater" type="push"
body="$ flash_erase /dev/mtd4 0 0">Erasing rootfs_a partition</CMD>
<CMD state="Updater" type="push"
body="$ flash_erase /dev/mtd5 0 0">Erasing config_a partition</CMD>
<CMD state="Updater" type="push"
body="$ flash_erase /dev/mtd9 0 0">Erasing rootfs_b partition</CMD>
<CMD state="Updater" type="push"
body="$ flash_erase /dev/mtd10 0 0">Erasing config_b partition</CMD>
<CMD state="Updater" type="push"
body="$ ubiformat /dev/mtd4"/>
<CMD state="Updater" type="push"
body="$ ubiformat /dev/mtd5"/>
<CMD state="Updater" type="push"
body="$ ubiformat /dev/mtd9"/>
<CMD state="Updater" type="push"
body="$ ubiformat /dev/mtd10"/>
<CMD state="Updater" type="push"
body="$ ubiattach /dev/ubi_ctrl -m 4">Attaching UBI partition - /dev/ubi0</CMD>
<CMD state="Updater" type="push"
body="$ ubiattach /dev/ubi_ctrl -m 5">Attaching UBI partition - /dev/ubi1</CMD>
<CMD state="Updater" type="push"
body="$ ubiattach /dev/ubi_ctrl -m 9">Attaching UBI partition - /dev/ubi2</CMD>
<CMD state="Updater" type="push"
body="$ ubiattach /dev/ubi_ctrl -m 10">Attaching UBI partition - /dev/ubi3</CMD>
<CMD state="Updater" type="push"
body="$ ubimkvol /dev/ubi0 -N rootfs_a -m"/>
<CMD state="Updater" type="push"
body="$ ubimkvol /dev/ubi1 -N config_a -m"/>
<CMD state="Updater" type="push"
body="$ ubimkvol /dev/ubi2 -N rootfs_b -m"/>
<CMD state="Updater" type="push"
body="$ ubimkvol /dev/ubi3 -N config_b -m"/>
<!--burn the rootfs_a to NAND: -->
<CMD state="Updater" type="push"
body="$ mkdir -p /mnt/rootfs_a"/>
<CMD state="Updater" type="push"
body="$ mount -t ubifs ubi0:rootfs_a /mnt/rootfs_a"/>
<CMD state="Updater" type="push"
body="pipe tar -jxv -C /mnt/rootfs_a" file="files/rootfs.tar.bz2">Sending and writting rootfs_a</CMD>
<CMD state="Updater" type="push"
body="frf">Finishing rootfs write</CMD>
<CMD state="Updater" type="push"
body="$ umount /mnt/rootfs_a">Unmounting rootfs_a partition</CMD>
<CMD state="Updater" type="push"
body="$ echo Update Complete!">Done</CMD>
</LIST>
</UCL>預計要修改的 file 為 FirmwareUpgrade.sh 的 burn_rootfs()
...
# Burn the rootfs to NAND
function burn_rootfs {
log "\nBurn the rootfs to NAND..."
if df | grep rootfs_a
then
log "Attach rootfs_b patition to UBI - MTD device 9"
ubiattach /dev/ubi_ctrl -m 9
if [ $? == 0 ]
then
log "ubiattach /dev/ubi_ctrl -m 9 succeeded"
else
log "Error: ubiattach /dev/ubi_ctrl -m 9 failed"
progress_fail "Error: ubiattach failed"
exit 1
fi
log "Create derectory /tmp/rootfs_b"
mkdir -p /tmp/rootfs_b
log "Mount /tmp/rootfs_b with node ubi2:rootfs_b"
mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b
if [ $? == 0 ]
then
log "mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b succeeded"
else
log "Error: mount -t ubifs ubi2:rootfs_b /tmp/rootfs_b failed"
progress_fail "Error: mount -t ubifs failed"
exit 1
fi
log "writting rootfs... please wait"
progress_status "writting rootfs... please wait"
tar -jxv -C /tmp/rootfs_b -f /tmp/firmware/rootfs.tar.bz2
log "umount /tmp/rootfs_b"
progress_status "umount rootfs"
umount /tmp/rootfs_b
log "Detach rootfs_b patition from UBI - MTD device 9"
ubidetach /dev/ubi_ctrl -m 9
log "Burn the rootfs to NAND succeeded"
progress_status "Burn the rootfs to NAND succeeded"
else
log "Attach rootfs_a patition to UBI - MTD device 4"
ubiattach /dev/ubi_ctrl -m 4
if [ $? == 0 ]
then
log "ubiattach /dev/ubi_ctrl -m 4 succeeded"
else
log "Error: ubiattach /dev/ubi_ctrl -m 4 failed"
progress_fail "Error: ubiattach failed"
exit 1
fi
log "Create derectory /tmp/rootfs_a"
mkdir -p /tmp/rootfs_a
log "Mount /tmp/rootfs_a with node ubi2:rootfs_a"
mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a
if [ $? == 0 ]
then
log "mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a succeeded"
else
log "Error: mount -t ubifs ubi2:rootfs_a /tmp/rootfs_a failed"
progress_fail "Error: mount -t ubifs failed"
exit 1
fi
log "writting rootfs... please wait"
progress_status "writting rootfs... please wait"
tar -jxvm -C /tmp/rootfs_a -f /tmp/firmware/rootfs.tar.bz2
log "umount /tmp/rootfs_a"
progress_status "umount rootfs"
umount /tmp/rootfs_a
log "Detach rootfs_b patition from UBI - MTD device 4"
ubidetach /dev/ubi_ctrl -m 4
log "Burn the rootfs to NAND succeeded"
progress_status "Burn the rootfs to NAND succeeded"
fi
}
# main function - entry point
function main {
log_init
progress_init
extract $1
md5_sums_check
mcsv_check
burn_kernel
burn_dtb
burn_rootfs
sync_config_mtd
replace_primary_app
finish
}
main $1
其實就是要新增三個動作
- flash_erase
- ubiformat
- ubimkvol
不過要特別注意 ubimkvol 這個動作
Firmware Upgrade: Erase rootfs 已完工
上 code