制作userdata分区的镜像(Ubuntu主机)

安装需要的工具

  • sudo apt install mtd-utils

制作镜像(JFFS2)

  • mkfs.jffs2 -r <源目录> -o <输出镜像名> -e <擦除块大小> -p -n
  • 参数解析:

    • -r, --root=DIR:指定要打包的源目录(例如你的根文件系统目录)13。
    • -o, --output=FILE:指定生成的 JFFS2 镜像文件名13。
    • -e, --eraseblock=SIZE:指定擦除块大小。必须与你的 Flash 硬件一致(例如 64KB 对应 0x10000)。如果不匹配,挂载时就会报错13。
    • -p, --pad[=SIZE]:用 0xFF 填充输出文件到指定大小。如果不加此参数,镜像末尾到擦除块边界之间的空间可能包含脏数据,导致内核扫描时报 Magic bitmask not found 错误16。
    • -l, --little-endian: 小端
    • -b, --big-endian: 大端

    举例:mkfs.jffs2 -r H2 -o xvideo.jffs2 -e 0x10000 --little-endian

将制作好的文件放到tftp路径下

烧写镜像

设置分区参数

新增userdata分区存放我们的镜像文件

  • set bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:512K(boot),3072K(kernel),5632K(rootfs),7168K(userdata) coherent_pool=4M'
  • saveenv

下载镜像

tftp 0x82000000 xvideo.jffs2

挂载

sf probe 0

擦除

sf erase 0x900000 0x700000

烧写

sf write 0x82000000 0x900000 ${filesize}
如果没有按0xFF固定填充的,最好按filesize写入
或者可以自己指定大小

启动内核,挂载

查看当前的FLASH分区

cat /proc/mtd

新建挂载点

mkdir /userdata

挂载

mount -t jffs2 /dev/mtdblock3 /userdata

查看挂载点下文件是否正常

ls -l /userdata

如果报错,排查分区数据是否正确

dd if=/dev/mtdblock3 bs=1 count=16 2>/dev/null | hexdump -C
正常开头是这样,JFFS的标准开头 0x8519
00000000 85 19 03 20 0c 00 00 00 b1 b0 1e e4 85 19 01 e0

查看当前挂载的所有路径

mount