在嵌入式Linux开发中,文件系统的打包和镜像制作是关键步骤。本文介绍了Linux核心板文件系统的打包与镜像制作方法,适合嵌入式开发人员快速上手。
前言
致远电子Linux核心板提供的系统固件里,除了镜像文件之外,通常还会提供文件系统压缩包。镜像文件可以直接用于烧写到目标板,而文件系统压缩包则可以进行部分修改,修改后重新制作镜像文件烧写。
这里只讲直接用编译好的二进制文件对文件系统打包的问题。一般来说,如果自己能从源码开始编译文件系统,打包文件系统也不会存在什么问题。
rootfs打包
解开压缩包,可以看到通常包含如下目录。
/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var
对根文件系统进行修改后,再次打包成镜像文件,由于没有了buildroot这样的自动化文件系统制作工具,这就需要特别注意:
- 打包文件系统时的目录位置、权限等,要用root权限打包,普通用户打包会出现错误,文件系统不完整。
- 不能将Linux下的tar包解压在Windows格式的硬盘并打包。
对于文件系统打包位置问题,举个例子:
$cdmyrootfs$ls$/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var$sudo tar cvf ../myrootfs.tar * #将当前文件系统全部文件打包到上一级目录
制作UBI文件系统镜像
使用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=ubiimage=ubifs.imgvol_id=0vol_size=200MiBvol_type=dynamicvol_name=rootfs #建议与uboot创建的卷标一致vol_alignment=1vol_flags=autoresize
进入Linux后可通过ubiformat命令烧写ubi.img,例如:
#ubiformat /dev/mtd4 -s 512 -f ubi.img
制作 Ext4文件系统制作Ext4文件系统,一般方法是先准备好根文件系统内容,然后创建一个镜像文件,格式化成Ext4格式,然后将镜像文件挂载到一个目录并复制根文件系统的内容到里面,之后卸载,最后进行一些处理。
$sudomkdirfs$sudoddif=/dev/zero of=fs.img bs=1M count=4096#创建初始大小的镜像文件$sudomkfs.ext4 fs.img #格式化镜像文件为Ext4文件系统$sudomount fs.img fs/ #挂载镜像文件到fs目录$sudocp-rfp myrootfs/* fs/ #复制根文件系统文件$sudoumount fs/ #卸载$sudoe2fsck -p -f fs.img #检查文件系统分区是否正常$sudoresize2fs -M fs.img #调整文件系统镜像大小
也可以写成脚本将几步操作合成一步操作,例如MX2000文件系统制作脚本内容如下:
#!/bin/bashOUTPUT_FILE=data.ext4TARGET_DIR=./usrdata/ROOTFS_EXT4_REV=1ROOTFS_EXT4_LABEL="data"ROOTFS_EXT4_SIZE=3069ROOTFS_EXT4_SIZE_MB=${ROOTFS_EXT4_SIZE}MROOTFS_EXT4_INODES=0ROOTFS_EXT4_RESBLKS=5ROOTFS_EXT4_MKFS_OPTIONS="-O ^64bit -O ^has_journal"ddif=/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}
-
zlg
+关注
关注
1文章
71浏览量
39030 -
核心板
+关注
关注
6文章
1344浏览量
31760 -
rootfs
+关注
关注
0文章
20浏览量
4905
发布评论请先 登录
Linux内核镜像bzImage和rootfs的制作、安装及调试过程
自己想做个显示器,其实没那么难
树莓派系统镜像制作
请问IMX8MP使用UUU烧录rootfs.sdcard镜像后,根目录的空间还能再调整吗?
如何缩小制作完成的系统镜像大小?
如何在PC主机上制作Ubuntu Rootfs镜像
人脸识别没那么难,1行命令就能实现
linux系统镜像制作
小卫星制造没有那么难,其实和IT攒机差不多
linux镜像制作工具
Docker-镜像的分层-busybox镜像制作

rootfs镜像制作其实没那么难
评论