编译环境:ubuntu 20.04
硬件环境:IMX6ULL NAND
注意有些路径为我自己的本地路径,后期我会完善一些过程。
FLASH分区 分区方案 [ A/B双系统 ]1. Uboot (6M)
2. OS-1 (111M)
3. OS-2 (111M)
4. User App (28M)
如何操作1. 在使用MFGTOOL工具烧录系统时,在Bootstrap阶段实现逻辑分区。因此firmware文件夹中的uboot-dtb.imx要有实际的分区信息,信息会通过Comeline传给临时内核。
2. 环境变量中也要有分区信息,并将分区信息通过comeline传给内核
Uboot启动后首先从Flash的环境变量分区中读取内容,如果没有则使用以上默认参数。
3. 内核收到分区信息后,会生成mtd设备
OTA程序 OTA逻辑流程 向平台上报当前版本信息1. 上报版本信息
2. 解析反馈指令
获取最新的镜像1. 下载镜像
2. 校验
更新FLASHI. 更新Kernel
a. 查看所属分区
cat /proc/mtd
b. 查看分区详细信息
mtdinfo /dev/mtd5
c. 擦除分区
flash_erase /dev/mtd5 0 0
d. 写入分区
Linux flash 操作 | 命令
nandwrite -p /dev/mtd5 -p zImage
II. 更新DTB
a. 擦除分区
flash_erase /dev/mtd6 0 0
b. 写入分区
nandwrite -p /dev/mtd6 -p 2022zzu.dtb
III. 更新ROOTFS
a. 擦除分区
flash_erase /dev/mtd7 0 0
b. 格式化分区
ubiformat /dev/mtd7
c. 添加UBI
ubiattach /dev/ubi_ctrl -m 7
d. 挂载分区
# 创建一个文件夹 mkdir -p /mnt/mtd7 # 挂载 mount -t ubifs ubi0:rootfs /mnt/mtd7 # 解压 tar -xv rootfs.tar.bz2 -C /mnt/mtd7 # 卸载 umount /mnt/mtd7更新环境变量
fw_setenv bootargs console=ttymxc0,115200 ubi.mtd=7 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:5m(boot),1m(env),10m(kernel1),1m(dtb1),100m(rootfs1),10m(kernel2),1m(dtb2),100m(rootfs2),-(app) fw_setenv ker_offset 0x7500000 fw_setenv dtb_offset 0x7F00000
3. 重启


![[NXP i.MX6ULL] 镜像系统更新OTA [NXP i.MX6ULL] 镜像系统更新OTA](http://www.mshxw.com/aiimages/31/845550.png)
