i2S-6UB核心板NAND版本提供了多种更新的方式,结合不同使用场景,可以自由选择。当前分区结构如下:

分区名 容量 分区 分区格式 内容
bootloader 5MB mtd1 RAW U-Boot
bootloader env 1MB mtd2 RAW U-Boot Environment
safe 1MB mtd3 RAW
Linux 16MB mtd4 UBIFS Linux kernel + dtb + boot script
Recovery 32MB mtd5 UBIFS Recovery Linux kernel + dtb + boot script
rootfs 150MB mtd6 UBIFS Linux Root filesystem
data 49MB mtd7 UBIFS User data
Recovery 用于维护和更新Linux,rootfs和data分区,需要制做特定的更新包,并启动进入Recovery系统才可以更新。

对于不同的分区,i2SOM提供了多种更新方式,可以根据需要自行选择。

更新方式 更新内容 适用场景
U-Boot方式 用于手动更新uboot和recovery系统 开发板NAND上已有U-Boot,并且可以启动
Recovery方式 仅用于更新rootfs, linux和data分区 开发板NAND上已有U-Boot和Recovery,并且可以启动进入
SD方式 仅用于更新uboot和recovery 开发板NAND没有任何可启动程序

U-Boot方式

i2S-6UB核心板提供的U-Boot中已加入update命令,用于更新U-Boot和Recovery系统。更新前需要将新版本的U-Boot程序或Recovery系统放入SD卡,SD卡应格式化为FAT格式。插入SD卡,上电启动后按下Enter键停止在U-Boot的命令行下。

更新U-Boot的命令如下:

update uboot mmc 0 1 u-boot.imx

更新Recovery的命令如下:

update recovery mmc 0 1 recovery.ubifs

Recovery方式

Recovery方式更新,需要先制做更新包。i2SOM提供了可以制做更新包的工具,mkupdate_package。下面以制做Linux和Rootfs的更新包为例子。更新包的需要先准备好相应的更新镜像文件和描述文件。描述文件名是sw-description,描述用于更新的分区和文件。

下载i2S-6UB-BuildSWU.tar.gz文件。解压后,执行如下的制做命令:

./mkupdate_package i2s6uby2-nand-i2som-image-core
sw-description
core-image-base-i2c6ulxbn-20190629105449.boot.ubifs
core-image-base-i2c6ulxbn-20190629105449.rootfs.ubifs
147066 blocks

命令执行完成后,在当前目录会生成i2s6uby2-nand-i2som-image-core_1.0_20190702143017.swu文件(文件名的20190702143017为时间戳,请以实际为准)。

将制做好的更新包文件复制到已格式化为VFAT分区格式的的SD卡内。下面是开发板上的更新操作:

1.插入SD卡

2.上电后按Enter键,停留在U-Boot的命令行下,输入以下命令启动Recovery系统

setenv mtdbootpart recovery
run bootcmd

3.Recovery系统启动成功后,会自动查找SD卡并挂载后,查到是否有更新包文件,然后执行更新操作。更新成功后,调试串口会输出以下信息,此时可以断开电源后重新上电即可进入更新后的系统。

Software updated successfully
Please reboot the device to start the new software
[NOTIFY] : SWUPDATE successful !
[RECOVERY] Firmware update process succeed!
reboot: Restarting system

SD方式

更新步骤
当i2S-6UB核心板上的NAND Flash没有任何程序或系统损坏需要恢复时,可以使用SD更新方式,烧写入U-Boot和Recovery系统。

1.将更新文件sdcard.gz写入MicroSD卡

Linux系统
/dev/sdd为MicroSD的设备。

gzip -dc i2s6ub-update-ddr256-nand256-20180421120404.rootfs.sdcard.gz | sudo dd of=/dev/sdd conv=fsync status=progress

Windows系统
使用USB Image Tool工具来烧写,插入SD读卡器后,左侧列表可以看到已经检测到设备。

选择”Restore”按钮,选择”sdcard.gz”文件,确认后就自动烧写。

2.插入MicroSD至开发板MicroSD卡槽,并切换BootDev Switch为SD启动方式,上电后CPU会自动从SD卡启动并烧写U-Boot和Recovery至i2S-6UB的NAND Flash存储器上。更新成功后D17灯常亮。

制做SD更新系统镜像
如果对U-Boot或Recovery系统有定制修改后,可以重新制做SD的更新文件sdcard.gz。以更新i2S-6UB NAND为例。需要先把Yocto下编译好的boot.ubifs, rootfs.ubifs, recovery.ubifs和uboot文件准备好。

mkdir i2s6uby2-ddr256m-nand256m-core
cd i2s6uby2-ddr256m-nand256m-core
cp ../*.boot.ubifs .
cp ../*.rootfs.ubifs .
cp ../*.recovery.ubifs .
cp ../u-boot-nand-1.0-r0.imx .

然后编写Manifest文件

vi Manifest
ddr_size="256"
flash_size="256"
bootloader_img="u-boot-nand-1.0-r0.imx"
linux_img="core-image-base-i2c6ulxbn-20190629105449.boot.ubifs"
recovery_img="core-image-base-i2c6ulxbn-20190629105449.recovery.ubifs"
rootfs_img="core-image-base-i2c6ulxbn-20190629105449.rootfs.ubifs"


然后在开始制作SD更新的镜像包

sudo ./build-sdcard -flash nand -som i2s6uby2 -target-dir i2s6uby2-ddr256m-nand256m-core
Target image dir : i2s6uby2-ddr256m-nand256m-core/
Flash Type : nand
Debug : false
Output file : i2s6uby2-ddr256nand256-20180513231157.sdcard
SDCard image size : 622592 Byte
Model:  (file)
Disk /home/build/i2S6UB-BuildUpdateSDImage/i2s6uby2-ddr256nand256-20180513231157.sdcard: 638MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End    Size   Type     File system  Flags
 1      4194kB  528MB  524MB  primary               lba

boot block 512000
The build sdcard image : i2s6uby2-ddr256nand256-20180513231157.sdcard.gz

-flash表示存储的类型
-som表示模块的类型
-target-dir 表示更新的目录

运行完后,会生成i2s6uby2-ddr256nand256-20180513231157.sdcard.gz文件。

手动更新dtb文件
前面的方法都可以更新dtb文件,但需要更快速的更新,可以直接复制到对应的boot分区。操作方法如下

# ubiattach -m 3
# mount -t ubifs /dev/ubi1_0 /mnt/
# cp <dtb file> /mnt/zImage-i2c6ulxb-i2s6ull-nand.dtb
# umount /mnt
# ubidetach -m 3

是自己修改后的dtb文件。

作者:SteveChen  创建时间:2024-09-17 16:40
最后编辑:SteveChen  更新时间:2024-09-17 16:55