Skip to main content

可读可写文件系统的应用

可读可写文件系统,目前使用的是data分区是可读可写的。关于UserData分区文件系统配置以及烧录说明如下:

1 自动挂载分区说明

1 工程编译出来的文件系统为squashfs格式,该文件系统是只读的。若有需要,可挂载一个ubi文件系统的分区存放用户数据,其配置流程如下:

2023-11-14_15-42

2023-11-14_15-50

2 保存并重新编译文件系统:

make buildroot

3.烧录成功后,userdata分区会自动被挂载在usr/data分区,该分区是ubi格式的文件系统。可制作ubifs镜像烧录到该分区,详见3.2章。也可制作ubi镜像文件加载到该分区,详见3.3章

2 ubifs镜像文件的制作与烧录

1.可使用以下命令制作ubfis镜像

mkfs.ubifs -r ./rootfs -o rootfs.ubifs -m 2048 -e 126976 -c 560

#-r:制定文件内容的位置
#-o:输出的文件
#-m:最小输入输出大小。这里为2KiB(2048bytes),一般为页大小
#-e:逻辑可擦除块大小。这里为124KiB=(每块的页数-2)*页大小=(64-2)*2KiB=124KiB=126976bytes
#-c:最多逻辑可擦除块的数目,实际上是设置此卷的最大容量。计算公式为:容量/页大小*每块的页数

# 块大小与页大小请参考flash的数据手册

2.ubfis镜像的烧录。其工具使用步骤详见第二章。在烧录前选中要烧录的分区以及文件如图:

烧录成功后,该文件系统会自动挂载到/usr/data/目录下

3 ubi镜像文件的制作与挂载

1.可使用以下命令制作ubi镜像

ubinize -o rootfs.ubi -m 2048 -p 128KiB  ubinize.cfg
#-o:输出的文件‘
#-m:页面的大小
#-p:物理可擦出块大小为128KiB=每块的页数*页大小=64*2KiB=128KiB
#-s:用于UBI头部信息的最小输入输出单元,一般与最小输入输出单元(-m参数)大小一样

ubinize.cfg是ubiniz工具制作ubi镜像需要指定的配置文件,其文件内容如下:

[ubifs]
mode=ubi
image=rootfs.ubifs # mkfs.ubi生成的源镜像
vol_id=0 #卷序号
vol_size=70MiB #卷大小
vol_type=dynamic #动态卷
vol_alignment=1
vol_name=rootfs #卷名
vol_flags=autoresize

2.将rootfs.ubi文件系统复制到"buildroot/output/target/"的任意位置下(我这里直接放到了根目录下),重新编译buildroot并重新烧录

make buildroot
烧录

烧录成功后可在板子终端看到该ubi镜像文件:

3.运行以下命令

#清除userdata分区
flash_erase /dev/mtd3 0 0
#将镜像文件写入userdata分区
ubiformat /dev/mtd3 -y -f /rootfs.ubi
#挂载分区
mount_ubifs.sh userdata /usr/data/

#我测试板子的userdata分区对应的节点为:/dev/mtd3
#"cat /proc/mtd"可以查看分区名对应的mtd设备序号

若该分区已被挂载,可先执行以下命令

#查看已被挂载的设备节点
df -h
#取消挂载
umount /dev/ubi1_0
#将userdata(mtd3)分区从ubi分离
ubidetach /dev/ubi_ctrl -m 3