ZLG嵌入式笔记 | rootfs镜像制作其实没那么难

在嵌入式Linux开发中,文件系统的打包和镜像制作是关键步骤。本文介绍了Linux核心板文件系统的打包与镜像制作方法,适合嵌入式开发人员快速上手。


前言

致远电子Linux核心板提供的系统固件里,除了镜像文件之外,通常还会提供文件系统压缩包。镜像文件可以直接用于烧写到目标板,而文件系统压缩包则可以进行部分修改,修改后重新制作镜像文件烧写。

这里只讲直接用编译好的二进制文件对文件系统打包的问题。一般来说,如果自己能从源码开始编译文件系统,打包文件系统也不会存在什么问题。


rootfs打包

解开压缩包,可以看到通常包含如下目录。

/bin /boot /dev /etc /home /lib /media /opt /proc /root /sbin /tmp /usr /var

对根文件系统进行修改后,再次打包成镜像文件,由于没有了buildroot这样的自动化文件系统制作工具,这就需要特别注意:

  • 打包文件系统时的目录位置、权限等,要用root权限打包,普通用户打包会出现错误,文件系统不完整。
  • 不能将Linux下的tar包解压在Windows格式的硬盘并打包。

对于文件系统打包位置问题,举个例子:

$ cd myrootfs

$ 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=ubi

image=ubifs.img

vol_id=0

vol_size=200MiB

vol_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格式,然后将镜像文件挂载到一个目录并复制根文件系统的内容到里面,之后卸载,最后进行一些处理。

$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 <blk-size> #调整文件系统镜像大小


也可以写成脚本将几步操作合成一步操作,例如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"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}

相关文章

如何搭建一个自己的电影网站,免费分享教程

大家好,好久不见了吧。没错我是好久好久好久没冒泡的武玥了"不是学长哦"再次见面给大家一个福利。最近看到有好多博主,好友都在推荐什么影视网站搭建方法相信大家有的应该没有搞懂吧,这里我仔细教一下大家。纯属...

真工程师:20块钱做了张「名片」,可以跑Linux和Python

机器之心报道参与:思源、杜伟、泽南对于一个工程师来说,如何在一张名片上宣告自己的实力?在上面制造一台完整的计算机说不定是个好主意。最近,美国一名嵌入式系统工程师 George Hilliard 的名片...

注意:三大系统所有Flash版本都有漏洞

2015-07-09 05:06:00 作者:徐鹏据外媒VentureBeat报道,Adobe发布的公告显示,Windows、Mac和Linux三大系统平台的全部Flash版本都存在一个安全漏洞,计划...

Firefox 36 beta发布了

2015-01-22 05:26:00 作者:马荣【中关村在线软件资讯】1月22日消息:Mozilla最近将Firefox 36 Beta放上了FTP服务器,这意味着已经可以下载试用了。Firefox...

网站后端开发源代码

成人网站在推动 Web 发展方面发挥的作用是不可否认的。从克服浏览器视频功能的限制到使用 WebSockets 推送广告(以防止广告拦截器拦截广告),您必须不断想出巧妙的方法,才能让自己处于 Web...

如何快速低成本地搭建有一个属于自己的网站

相信很多小伙伴刚接触互联网访问各种绚丽和功能强大的网站时都会好奇这些网站是如何搭建的,自己也想拥有一个这样的网站空间,其实个人网站的搭建是很简单的下面我给大家讲解下。如果搭建一个网站,首先大家可以先了...