Linux系统中根文件系统构建基本方式|天天报资讯
1. 根文件系统布局 嵌入式Linux根文件系统布局,建议还是按照FHS标准来安排,事实上大多数嵌入式Linux都是这样做的。但是,嵌入式系统可能并不需要桌面/服务器那样庞大系统的全部目录,可以酌情对系统进行精简,以简化Linux的使用。如嵌入式Linux文件系统中通常不会放置内核源码,因而存的 常不会放置内核源码,因而存的 常不会放置内核源码,因而存放源码的/usr/src目录是不必要的, 甚至连头文件也不需要,即/usr/include目录也不必要;但是/bin、/dev 、/etc、/lib 、/proc 、/sbin、/usr几个目录是不可或缺的。
所以,允许嵌入式 Linux 对系统目录结构进行精简,以适应具体用场合的需求,一个典型的嵌入式Linux根文件系统目录如下所示:
(资料图)
要构建一个可用的Linux根文件系统,需要的二进制和库都不少,完全从零开始也是不现实的,推荐参考其它现有可用的文件系统,在原基础上按需修改;或者使用文件系统制作工具如 BusyBox 来实现文件系统的生成。
2. 使用BusyBox生成二进制工具
2.1. 获取BusyBox源码
Busybox的官方源码下载路径为:https://busybox.net/downloads/。这里以下载busybox-1.29.3.tar.bz2为例。
2.2. 配置BusyBox
解压源码,进入根目录
$tarjxvfbusybox-1.29.3.tar.bz2$cdbusybox-1.29.3/
首先,执行:
$makemenuconfig
进入图形化配置界面:
2.2.1.选择编译静态库
进入Settings --->使用空格键选择编译静态库
---BuildOptions[*]Buildstaticbinary(nosharedlibs)
如图:
2.2.2.选择交叉编译工具链
在Settings ---> 设置项下,填写交叉编译工具链前缀
2-2-3. 选择安装目录
在Settings --->设置项下,找到
---InstallationOptions("makeinstall"behavior)Whatkindofappletlinkstoinstall(assoft-links)--->(./_install)Destinationpathfor"makeinstall"(NEW)
默认为当前目录下目录,这里我使用默认_install目录:
2-2-4. 编译安装
退出保存后,执行编译make,大概几分钟后编译完成,执行make install,很快就会安装完成:
入_install目录,查看生成的文件
新建一个目录用来存放制作的根文件系统,可以命名为rootfs。将利用BusyBox生成的二进制文件及目录,即_install目录下的所有文件及目录复制到rootfs目录下。
3. 构建根文件系统
使用BusyBox编译后,仅有 bin、sbin、usr这 3个目录和软链接linuxrc,目录里都是二进制命令工具,这还不足以构成 一个可用的根文件系统,必须进行其它完善工作,才能构建一个可用的根文件系统。
3-1. 完善目录结构
根据典型嵌入式Linux根文件系统目录,在rootfs目录中创建其他目录
$mkdirdevetclibprocsystmpvar
3-2. 添加C运行库文件
库文件可直接从交叉工具链获取,一般在工具链的libc/lib/目录下。我这里是在ubuntu下安装的Linaro的交叉工具链:
库文件是在/usr/arm-linux-gnueabihf/lib/目录下,拷贝动态链接库文件(.so文件)到新制作的根文件系统根目录下/lib目录里:
$cp-a/usr/arm-linux-gnueabihf/lib/*so*./lib/
这里只是拷贝动态链接库。一般开发程序使用动态编译需要板子上动态库的支持才能运行,所以拷贝动态库。而静态库一般在静态编译的时候用到,由于交叉编译的工作放在了PC上所以板子上不需要静态库,所以没有必要拷贝,这样还可以减小根文件系统的体积。
一般使用gcc编译后的可执行文件、目标文件和动态库都带有调试信息和符号信息,这些在调试的时候用到,但是却增大了文件的大小。通常在PC上调试,或者调试时使用这些带有调试信息和符号信息的库文件,程序发布后使用去掉这些信息的库文件,可以大大缩小根文件系统的体积。这里我们去掉这些信息,方法是使用strip工具:
$arm-linux-gnueabihf-strip./*
3-3. 添加初始化配置脚本
初始化配置脚本放在在/etc目录下,用于系统启动所需的初始化配置脚本。BusyBox提供了一些初始化范例脚本,在examples/bootfloppy/etc/目录下。将这些配置文件复制到 ”目录下。将这些配置文件复制到 ”目录下。将这些配置文件复制到新制作的根文件系统etc目录下
cp-a../busybox/busybox-1.29.3/examples/bootfloppy/etc/*etc/
添加后如图所示:
3-3-1. 修改/etc/inittab文件
/etc/inittab文件是init进程解析的配置文件,通过这个配置文件决定执行哪个进程,何时执行。将文件修改为:
#系统启动时:/etc/init.d/rcS#系统启动按下Enter键时:-/bin/sh#按下Ctrl+Alt+Del键时:/sbin/reboot#系统关机时:/sbin/swapoff-a:/bin/umount-a-r#系统重启时:/sbin/init
以上内容定义了系统启动时,关机时,重启时,按下Ctrl+Alt+Del键时执行的进程。
3-3-2. 修改/etc/init.d/rcS文件
#!/bin/sh#挂载/etc/fstab中定义的所有文件系统/bin/mount-a#挂载虚拟的devpts文件系统用于用于伪终端设备/bin/mkdir-p/dev/pts/bin/mount-tdevptsdevpts/dev/pts#使用mdev动态管理u盘和鼠标等热插拔设备/bin/echo/sbin/mdev>/proc/sys/kernel/hotplug#扫描并创建节点/sbin/mdev-s
3-3-3. 修改/etc/fstab文件
/etc/fstab文件存放的是文件系统信息。在系统启动后执行/etc/init.d/rcS文件里/bin/mount -a命令时,自动挂载这些文件系统。内容如下:
#proc/procprocdefaults00sysfs/syssysfsdefaults00tmpfs/tmptmpfsdefaults00tmpfs/devtmpfsdefaults00
注:这里我们挂载的文件系统有三个proc、sysfs和tmpfs,在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持。
3-3-4. 修改/etc/profile文件
/etc/profile文件作用是设置环境变量,每个用户登录时都会运行它。将文件内容修改为:
#主机名exportHOSTNAME=zyz#用户名exportUSER=root#用户目录exportHOME=/root#终端默认提示符exportPS1="[$USER@$HOSTNAME:$PWD]#"#环境变量exportPATH=/bin:/sbin:/usr/bin:/usr/sbin#动态库路径exportLD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
因为指定了root用户的家目录为/root,所以需要创建该目录,否则执行cd ~时会失败
$mkdirroot
登录系统后效果为:
...PleasepressEntertoactivatethisconsole.[root@zyz:/]#[root@zyz:/]#cd~[root@zyz:/root]#[root@zyz:/root]#echo$PATH/bin:/sbin:/usr/bin:/usr/sbin
至此,根文件系统就基本构建好了。
4. 制作根文件系统镜像
4-1. 根文件系统类型
如果文件系统已经布局完成, 则可以发到目标中了。通常会制作一个镜像然后通过某种方式固化到目标系统中,具体采用什么样的形发布需要根据资源状况、内核情况和系统需求等方面进行裁决:
(1)硬件方面,至少需要考虑主存储介质的类型和大小如Flash是NOR Flash还是NAND Flash,RAM的大小等。
(2)内核方面, 则需考虑所裁剪后的支持哪些文件系统采用中最合适, 能满足性、速度等要求。
(3)系统需求方面,要考虑运行速度、是否可写压缩等因素。常见的可用于根文件系统类型有ramdisk 、cramfs、jffs2 、yaffs/yaffs2和ubifs等,各类型的特性如表所列。
尽管文件系统固件以某一种文件系统的镜像发布,但是整个文件系统实际上还是并存多种逻辑文件系统的。例如,一个系统根文件系统以ubifs挂载,但是/dev目录却是以tmpfs挂载的、/sys目录挂载的是sysfs文件系统。现在,似乎ubifs是一种趋势。
4-2. 制作UBIFS根文件系统镜像
Linux下制作UBIFS的命令有两个,mkfs.ubifs和ubinize。mkfs.ubifs,将一个目录制作为UBIFS文件系统。使用范例:
$mkfs.ubifs-m2048-e128KiB-c4096-r./rootfs-orootfs.ubifs
其中:
-r,-d,--root=DIRbuildfilesystemfromdirectoryDIR(目录)-m,--min-io-size=SIZEminimumI/Ounitsize(最小输入输出单元大小)-e,--leb-size=SIZElogicaleraseblocksize(逻辑擦除块大小)-c,--max-leb-cnt=COUNTmaximumlogicaleraseblockcount(最大逻辑擦除块数目)-o,--output=FILEoutputtoFILE(输出文件)
所以制作ubifs镜像文件,需要知道3个关键参数,即最小输入输出单元大小,逻辑擦除块大小,最大逻辑擦除块数目,其中最大逻辑擦除块数目可由Flash分区大小和逻辑擦除块大小计算出来,这些信息可以通过u-boot命令查看:
=>mtdpartsdefault=>ubipartrootfs
ubinize,将mkfs.ubifs制作的UBIFS文件系统制作成含有卷标的可以直接烧写在Flash上的镜像。使用范例:
$ubinize-m2048-p128KiBubinize.cfg-orootfs_ubifs.img
其中:
-o,--output=outputfilename(输出文件)-p,--peb-size= sizeofthephysicaleraseblockoftheflash(物理擦除块大小)thisUBIimageiscreatedforinbytes,kilobytes(KiB),ormegabytes(MiB)(mandatoryparameter)-m,--min-io-size= minimuminput/outputunitsizeoftheflashinbytes
这里需要两个参数物理擦除块大小和最小输入输出单元大小。ubinize.cfg是配置文件,内容如下:
[ubifs]mode=ubiimage=rootfs.ubifsvol_id=0vol_size=1024MiBvol_type=dynamicvol_name=rootfsvol_flags=autoresize
说明:
[ubifs]mode=ubiimage=rootfs.ubifs#mkfs.ubi生成的源镜像vol_id=0#卷号vol_size=1024MiB#卷大小,一般要设置的比分区大,防止有坏块vol_type=dynamic#卷类型,动态卷vol_name=rootfs#卷名,rootfsvol_flags=autoresize#自动大小
审核编辑:汤梓红
标签:
相关文章
Linux系统中根文件系统构建基本方式|天天报资讯
Linux系统中根文件系统构建基本方式-嵌入式Linux根文件系统布局,建议还是按照FHS标准来安排,事实上大多数
世界即时看!省法院调研组到淇县法院调研指导人民法庭基础设施建设等工作
为实现基础基层工作跃升,切实提升人民法庭基础设施建设,5月6日下午,省法院副院长尚志东、市中院党组书记
海南发布自由贸易港促进种业发展规定 围绕4方面进行创新实践-天天观速讯
记者日前从海南省农业农村厅获悉:《海南自由贸易港促进种业发展若干规定》(以下简称《规定》)已于2023年5
士不可以不弘毅任重而道远什么意思_士不可以不弘毅翻译
一、题文求“士不可不弘毅,任重而道远 ”的英语翻译?二、解答以下是整句话完整的翻译:〖士不可以不弘毅,任
当前焦点!艾迪精密(603638):5月8日北向资金减持13.71万股
5月8日北向资金减持13 71万股艾迪精密。近5个交易日中,获北向资金增持的有2天,累计净增持2700 0股。近20
win7系统查看wifi密码_win7怎么查看wifi密码|独家
1、方法 步骤如图点击右下角已经连接上wifi的图标。2、2、可以看到当前已经连接上的wifi信号。3、3、用鼠标
环球热点评!世界500强企业的销售精英来了!说说销售成交率那些事
很难想象,一个企业假如没有了销售人员会面临什么问题。因为缺乏了销售人员,企业的产品就走不出去、卖不出
全球百事通!泰和兴拟开发建设5000吨高性能纤维差别化产品深加工项目 项目总投资1.07亿
泰和兴拟开发建设5000吨高性能纤维差别化产品深加工项目项目总投资1 07亿2023 5 821:55:30挖贝网苏言挖贝网
玫瑰玫瑰我爱你黄龄舞蹈_玫瑰玫瑰我爱你 黄龄
1、黄龄,1987年2月13日出生于上海,中国内地流行乐女歌手、演员。2、2004年黄龄因参加一个歌唱比赛时被星
观速讯丨半决赛G3湖人大胜勇士原因揭晓!球迷第二次发声,这回说了真话
上面的数据只是常规赛82场比赛,30只球队对抗稀释后的数据,在季后赛这种针锋相对的系列赛,双方的优势和弱
OPPO Reno10 Pro 在发布前渲染确认设计升级和三重后置摄像头-天天新消息
至少根据OnLeaks和MySmartPrice的说法,OPPOReno10系列现在计划由9Pro和9Pro
世界热议:信用卡协商还款失败的原因是什么?信用卡协商过后没按时还怎么办
信用卡协商还款失败的原因是什么虽然信用卡协商还款可以帮助持卡人避免不良记录和罚款,但有时候银行可
广州浪奇一季度盈利380万,营收同比减少1.96%
雷达财经文|冯秀语编|深海近日,广州浪奇发布2023年一季度业绩公告称,第一季度公司营收约6 32亿元,同比减
全球新消息丨华为耳机插上还是外放怎么办_华为插上耳机外放还响
1、打开手机上的设置,点击进入声音和振动。2、单击页面上的更多声音和振动设置。3、进入页面后,点击打开
世界滚动:西安17.17亿元出让四宗商住地 万科约7.59亿元补仓
5月6日,西安四宗地成交,总价款17 169亿元。其中,港务区挂牌成交2宗共62 043亩商住用地,成交总价款7 894
耕地成粉煤灰填埋场!多次被叫停,为何却屡禁不止?
第三次全国国土调查结果显示,我国耕地面积为19 18亿亩,人均耕地面积1 36亩,不足世界平均水平的40%。同时
当前讯息:男子火车上摸睡熟女子大腿后下车逃跑,民警追抓拘留其10日
广州铁路警方5月6日通报,近日,在九江开往广州的K87次列车上,发生一起猥亵女性乘客案件。嫌疑人王某因猥