安装mtd-utils
mkfs.ubifs 的作用是将普通的文件夹转换成一个 UBIFS 格式的镜像文件。
apt-get update
apt-get install mtd-utils
生成可烧写的oem.img
-
创建oem文件夹
-
执行命令生成ubifs文件
mkfs.ubifs -r oem -m 2048 -e 126976 -c 247 -o oem_ubifs.imgr <目录>:指定要打包的根目录(如oem),该目录下的所有文件和权限都会被保留并打包。-m <大小>:最小 I/O 单元大小(Minimum I/O unit size),单位字节。Page Size(页大小)-e <大小>:逻辑擦除块大小(Logical Erase Block, LEB),单位字节。- 计算关系:
-e的值通常等于物理擦除块大小(PEB)减去 UBI 头部开销。例如,如果物理擦除块是 128KB (131072字节),UBI 开销通常占去 2个页大小,即131072 - 2048*2 = 126976。
- 计算关系:
-c <数量>:文件系统可使用的最大逻辑擦除块数量(Max LEB count)。按 30 MiB = 30 × 1024 × 1024 字节。- c=(30×1024×1024)/126976≈247.8,向下取整得到 247 个 LEB。
-o <文件名>:指定输出的 UBIFS 镜像文件名。
-
封装 UBI 镜像(ubinize)
ubinize的作用是将上一步生成的 UBIFS 镜像,加上 UBI 层的卷(Volume)管理信息,封装成最终可以烧录到 NAND Flash 上的.ubi文件。-
创建配置文件
oem-ubinize.cfg[oem_volume] mode=ubi image=oem_ubifs.img vol_id=0 vol_size=30MiB vol_type=dynamic vol_name=oem #vol_flags=autoresize-
mode=ubi:指定工作模式为 UBI。 -
image=:指向第一步生成的 UBIFS 镜像文件。 -
vol_id=:卷的 ID 编号,必须唯一。例如 oem 设为 0,userdata 可以设为 1。 -
vol_size=:卷的大小。强烈建议直接写具体的数值(如 64MiB)。
- 避坑指南:这个值不能大于你在
parameter.txt中为该分区预留的物理空间大小,且建议预留 8~10MB 的余量给 UBI 自身的元数据开销,否则 ubinize 会报错提示空间不足。
- 避坑指南:这个值不能大于你在
-
vol_type=dynamic:卷类型。日常使用的读写分区(如 oem, userdata)都设为dynamic;如果是只读分区可设为static。 -
vol_name=:卷的名称。这个名字非常重要,后续在/etc/fstab中挂载时,就是通过ubi0:oem这样的名字来识别的。 -
vol_flags=autoresize:自动调整大小标志。如果设置该标志,文件系统会在第一次挂载时自动扩展到该卷允许的最大尺寸,非常适合 userdata 这种需要利用剩余空间的分区。
-
-
执行封装命令
ubinize -o oem.ubi -m 2048 -p 128KiB -s 512 oem-ubinize.cfg-o <文件名>:指定最终生成的 UBI 镜像文件名(如oem.ubi)。-m <大小>:最小 I/O 单元大小,必须与mkfs.ubifs中的-m参数保持一致(即 NAND 的页大小)。-p <大小>:物理擦除块大小(Physical Erase Block, PEB),单位支持 KiB/MiB。这个值必须严格匹配你的 NAND Flash 硬件手册中的 Block Size(擦除块大小),常见值为 128KiB 或 256KiB。-s <大小>:子页大小(Sub-page size)。如果不确定,通常设为 512 或与-m相同即可。
-
-
生成oem.img
直接修改oem.ubi名称就好了
cp oem.ubi oem.img
生成可烧写的userdata.img
-
创建userdata文件夹
-
执行命令生成ubifs文件
mkfs.ubifs -r userdata -m 2048 -e 126976 -c 247 -o userdata.img -
封装 UBI 镜像(ubinize)
-
创建配置文件
userdata-ubinize.cfg[userdata_volume] mode=ubi image=userdata_ubifs.img vol_id=0 vol_size=30MiB vol_type=dynamic vol_name=userdata vol_flags=autoresize -
执行封装命令
ubinize -o userdata.ubi -m 2048 -p 128KiB -s 512 userdata-ubinize.cfg
-
生成oem.img
cp userdata.ubi userdata.img
-