视频推荐
致远电子Linux核心板提供的系统固件里,除了镜像文件之外,通常还会提供文件系统压缩包。镜像文件可以直接用于烧写到目标板,而文件系统压缩包则可以进行部分修改,修改后重新制作镜像文件烧写。
这里只讲直接用编译好的二进制文件对文件系统打包的问题。一般来说,如果自己能从源码开始编译文件系统,打包文件系统也不会存在什么问题。
rootfs打包
/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var
cd myrootfs
ls
/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var
#将当前文件系统全部文件打包到上一级目录 sudo tar cvf ../myrootfs.tar *
使用UBI文件系统时,有ubifs.img和ubi.img两种不同镜像。其中ubifs.img用于U-Boot下烧写,而ubi.img镜像则用于进入Linux系统后的更新。
1. 制作ubi烧写镜像
制作ubi镜像的工具为mkfs.ubifs,有下列参数:
-r:制定文件内容的位置;
-m:页面大小;
-e:逻辑擦除块大小;
-p:物理擦除块大小;
-c:最大的逻辑擦除块数量;
-s:最小的硬件输入输出页面大小,如:k9f1208为256。
特别提示,页面大小等参数要根据内核加载Flash分区时ubifs输出的信息一致,否则不能启动系统。
示例:
sudo mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 1948 -o ubifs.img
2. 制作ubifs镜像
制作ubifs镜像用到的工具为ubinize。例:
sudo ubinize -o ubi.img -m 2048 -s 512 -p 131072 ubifs.conf
ubifs.conf的内容如下:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=200MiB
vol_type=dynamic
vol_name=rootfs #建议与uboot创建的卷标一致
vol_alignment=1
vol_flags=autoresize
进入Linux后可通过ubiformat命令烧写ubi.img,例如:
ubiformat /dev/mtd4 -s 512 -f ubi.img
$sudo mkdir fs
$sudo dd if=/dev/zero of=fs.img bs=1M count=4096 #创建初始大小的镜像文件
$sudo mkfs.ext4 fs.img #格式化镜像文件为Ext4文件系统
$sudo mount fs.img fs/ #挂载镜像文件到fs目录
$sudo cp -rfp myrootfs/* fs/ #复制根文件系统文件
$sudo umount fs/ #卸载
$sudo e2fsck -p -f fs.img #检查文件系统分区是否正常
$sudo resize2fs -M fs.img
#调整文件系统镜像大小
OUTPUT_FILE=data.ext4
TARGET_DIR=./usrdata/
ROOTFS_EXT4_REV=1
ROOTFS_EXT4_LABEL="data"
ROOTFS_EXT4_SIZE=3069
ROOTFS_EXT4_SIZE_MB=${ROOTFS_EXT4_SIZE}M
ROOTFS_EXT4_INODES=0
ROOTFS_EXT4_RESBLKS=5
ROOTFS_EXT4_MKFS_OPTIONS="-O ^64bit -O ^has_journal"
dd if=/dev/zero of=${OUTPUT_FILE} bs=1M count=${ROOTFS_EXT4_SIZE}
mke2fs -d ${TARGET_DIR} \
-r ${ROOTFS_EXT4_REV} \
-N ${ROOTFS_EXT4_INODES} \
-m ${ROOTFS_EXT4_RESBLKS} \
-L "${EXT4_LABEL}" \
${EXT4_MKFS_OPTS} \
${OUTPUT_FILE}