通常在系统开发完成或测试时,需要将编译好的新版本U-Boot, Linux kernel和文件系统写入到Flash存储芯片内,我们称之为系统更新。i2X-6UB开发板提供了两种系统更新的方法,USB方法和SD卡方法。

i2C-6ULX-B V2.x版本
i2C-6ULX-B底板上支持多种启动模式和设备启动选择,启动模式由两个跳冒,JP1和JP2控制,支持芯片的三种模式。设备启动选择是一个四位拨码开关,可支持选择从QSPI、SPI、SD、eMMC和NAND其中一种设备启动。

启动模式对于不同存储方案eMMC/NAND的i2S-6UB核心板都是一样的,用于配置i.MX6ULL芯片的工作模式。

Boot Mode JP1 JP2
Boot From Fuses 连接 连接
Serial Download 断开 连接
Internal Boot 连接 断开

启动方式用于选择第一启动设备,对于i2S-6UB核心板不同存储芯片的配置有区别。使用时请确定i2S-6ULL核心板所使用的存储方案。

i2S-6UB核心板的启动位状态如下表,i2C-6ULX-B V2.x底板通过BootDev Switch(SW1)拨码开关来选择。

Boot Device Bit1 Bit2 Bit3 Bit4
QSPI ON ON ON ON
eMMC OFF OFF ON OFF
SD Card ON OFF ON ON
NAND OFF ON OFF OFF

eMMC版本更新方法

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

分区名 容量 分区 分区格式 内容
bootloader + env 2MB mmc1boot0 RAW U-Boot
Linux 64MB mmcblk1p1 VFAT Linux kernel + dtb + boot script
Recovery 64MB mmcblk1p2 VFAT Recovery Linux kernel + dtb + boot script
rootfs 1.4GB mmcblk1p3 Ext4 Linux Root filesystem
data 2GB mmcblk1p4 Ext4 User data

Recovery 用于维护和更新Linux,rootfs和data分区,需要制做特定的更新包,并启动进入Recovery系统才可以更新。

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

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

U-Boot方式

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

更新U-Boot的命令如下:

update uboot mmc 0 1 u-boot.imx

更新Recovery的命令如下:

update recovery mmc 0 1 recovery.vfat

Recovery方式

Recovery方式需要有更新包文件,文件扩展名为swu。将制做好的更新包文件复制到已格式化为VFAT分区格式的的SD卡内。下面是开发板上的更新操作:

1.切换BootDev Switch(SW1)拨码开关至eMMC启动位,然后插入SD卡,接入电源。

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

setenv mmcpart 2
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方式

SD更新方式使用由i2SOM提供的更新镜像,制做成SD更新卡,开发板从SD启动后会自动更新U-Boot和Recovery系统至eMMC Flash。更新镜像文件是i2s6uby2-update-ddr512-emmc4-20180513120554.sdcard.gz。

更新步骤如下:

1.使用USB Image Tool或Win32ImageWrite工具将更新镜像写入SD

2.切换BootDev Switch(SW1)拨码开关至SD卡启动位,插入已制做好的更新SD卡(J7)

3.上电后开发板自动更新,更新成功后D17 LED灯常亮

制作Recovery方式的更新包

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

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

./mkupdate_package i2s6uby2-emmc-core
sw-description
core-image-base-i2c6ulxbe-20180429170438.boot.vfat
core-image-base-i2c6ulxbe-20180429170438.rootfs.ext4
imx-emmc-postinstall.sh
438726 blocks

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

制做SD卡更新镜像

下载i2S6UB-BuildUpdateSDImage.tar.gz软件包,在Linux系统下解压后,执行如下命令制做适合i2S-6UB eMMC版本的更新镜像。

sudo ./build-sdcard -som i2s6uby2 -flash emmc -target-dir i2s6uby2-ddr512m-emmc4g-recovery -var 1
[sudo] password for build:
SoM anme : i2s6uby2
Target image dir : i2s6uby2-ddr512m-emmc4g-recovery
Flash Type : emmc
Debug : false
Output file : i2s6uby2-ddr512emmc4-20180513230907.sdcard
SDCard image size : 622592 Byte
Model:  (file)
Disk /home/build/i2S6UB-BuildUpdateSDImage/i2s6uby2-ddr512emmc4-20180513230907.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-ddr512emmc4-20180513230907.sdcard.gz

最后生成的i2s6uby2-ddr512emmc4-20180513230907.sdcard.gz文件,可以按照“SD卡方式”写入SD后更新。

NAND版本更新方法

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:39
最后编辑:SteveChen  更新时间:2024-10-10 15:16