第一范文网 - 专业文章范例文档资料分享平台

Linux 根文件系统制作流程 20160308

来源:用户分享 时间:2025/6/18 5:04:58 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

如何制作根文件系统

1概述

如何制作一个最小的根文件系统,能让内核在该文件系统中运行?该文章是读《嵌入式Linux应用开发完全手册》韦东山 书籍简要总结。 制作最小的根文件系统的主要分为五个部分:

① 编译Busybox得到常用命令与工具集(生成bin,sbin,usr,linuxrc); ② 构建dev目录(/dev/console,/dev/null等设备节点); ③ 构建etc目录(/etc/inittab,/etc/fstab,/etc/init.d/rcS等); ④ 构建lib目录(C库函数uclibc,glibc); ⑤ 创建其他空目录,配置需求相关文件程序;

书籍《深入浅出嵌入式底层软件开发》扬铸中总结的过程: ① 编译安装busybox,生成/bin、/sbin、/usr目录及其内容;

② 利用交叉编译工具链,构建/lib目录; ③ 手工构建/etc目录;

④ 手工构建最简化/dev目录; ⑤ 创建其他空目录;

⑥ 配置系统自动生成/proc和/sys目录; ⑦ 利用udev构建完整的/dev目录; ⑧ 制作根文件系统的Jffs2镜像文件;

2编译Busybox

注】编译的时候如果遇到有错误的地方,可以根据提示进行修改,一般的情况下,是某个命令的配置上有错误,这个时候可以选择重新执行make menuconfig进行重新配置,去掉出错的命令,重新编译即可。

安装Busybox

把这些编译好的命令可执行文件直接放到某一个指定的目录中去。 具体操作:

然后执行如下命令:make CONFIG_PREFIX=/opt/rootfs install。 此时在rootfs根目录中产生bin,sbin,usr,linuxrc目录。

3构建dev目录

/dev目录下存放的跟设备有关的文件,一些驱动程序的设备节点文件就在此目录下。

sudo mknod console c 5 1 (如果忘记,可通过查看已经安装好的linux机器/dev/console文件得知) sduo mknod null c 1 3

3.1静态创建设备文件 创建/dev/mtdblock*(块设备),/dev/ttySAC*(串口设备),/dev/console,/dev/null,即可启动系统。

其他设备文件可以等到系统启动后,使用“cat /proc/devices”命令查看内核中注册了哪些设备,再一一创建。

3.2使用mdev创建设备文件,动态更新 mdev是通过init进程来启动的,在使用mdev构造/dev目录前,init进程至少要建立设备文件/dev/console、/dev/null。

mdev是通过读取内核信息来创建设备文件,支持热插拔动态更新/dev目录。 mdev需要设置内核支持sysfs文件系统,还有支持tmpfs文件系统。

4构建etc目录

etc目录取决于要运行的程序,一般最小创建文件/etc/inittab,/etc/init.d/rcS,/etc/fstab。

vi /etc/inittab #/etc/inittab

::sysinit:/etc/init.d/rcS ::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r ::restart:/sbin/init

ttySAC0::askfirst:-/bin/sh /*根据情况需要修改,‘-’表示与用户可交互的*/

inittab文件中条目格式为:::。特别注意action字段表示init进程如何控制这个子进程,action字段可使用关键字:sysinit、wait、once、respawn、askfirst、shutdown、restart、ctrlaltdel。

vi /etc/init.d/rcS

#!/bin/sh

mount -a /*挂接/etc/fstab文件指定的所有文件系统 */

echo /sbin/mdev > /proc/sys/kernel/hotplug /*设置内核,当有设备拔插时调用/sbin/mdev程序 */

mdev -s /*在/dev目录下生成内核支持的所有设备的结点 */

修改文件属性,使之能执行 chmod +x /etc/init.d/rcS

vi etc/fstab

fstab的格式如下:

#device mount-point type options dump fsck oder proc /proc proc defaults 0 0

tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0

5构建lib目录

拷贝编译工具下的动态库文件。具体操作:执行arm-linux-gcc -v命令,参看交叉编译工具安装在什么目录下,然后拷贝该编译工具的arm-linux目录的lib库下的所有动态文件。或者自己编译glibc源码、uclibc源码制作c库。

例如:我的交叉编译工具安装在opt/tools目录下。在自己做的根文件系统下,建立lib目录。

mkdir lib

cd /opt/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib ls -l

cp *so* /opt/first_fs/lib –d

-d的作用,原来是一个链接文件的还拷贝成一个链接文件。到目前为止一个最小的根文件系统已经制作好了。

6构建其他目录

其他目录可以为空目录,创建:proc、mnt、tmp、sys、root等。

此时即可作为网络根文件系统直接启动,烧写到开发板还需要制作为镜像文件(例如yaffs文件系统镜像文件、jffs2、ubi等)。

问题集:

1.内核启动之后,执行的第一个脚本文件是哪一个?

答:在嵌入式系统(ubuntu9.04之前),内核启动的第一个(也是唯一的一个)用户进程init进程,init进程的执行程序通常是/sbin/init。/sbin/init解析inittab文件,inittab文件中sysinit指定的脚本为第一个执行脚本文件。嵌入式系统中通常命名它为rcS。

2.内核启动的第一个用户进程init进程,该进程执行的程序一定是/sbin/init吗?如果不一定,有哪些可能是被执行的程序?

3.Busybox中init程序执行流程简单描述一下?

4.Nand Flash的擦写寿命是有限的,如何延长Nand使用寿命? 答:将/dev、/tmp、/var三个目录挂载为tmpfs文件系统。

5.如何让linux中dev目录支持热插拔U盘,插拔U盘时自动创建或删除设备节点文件/dev/sda文件?

6.在产品研发阶段,所有根文件系统采用NFS挂载以方便开发,由于在u-boot中我们指定了开发板的IP地址为192.168.1.17,所以我们必须在rcS中指定相同的IP地址,否则在启动过程中,会因为IP地址的缘故,在执行rcS后,导致开发板无法和NFS服务器通信,也就无法进入shell。但在最终产品的根文件系统中,也许要求开发板的IP地址是别的IP,而不是192.168.1.17。应该如何做,才能做出一个即可以用于开发阶段,又可以用于最终产品的统一的根文件系统呢?

答案:提示查看/proc/mounts(深入浅出嵌入式底层软件开发有具体答案)。

7.在linux终端输入ps看不到任何进程的存在原因分析?

答案:ps机制是通过查看/proc中的内容来获得进程信息的,如果/proc目录为空则ps显示看不到任何进程。/proc是用来提供内核和进程信息的虚拟文件系统,由内核自动生成的。我们需要挂载执行mount -t proc none /proc命令。

查考文案:

1.《嵌入式Linux应用开发完全手册》韦东山 编著 2. 构建嵌入式Linux根文件系统

http://blog.chinaunix.net/uid-8363656-id-2031653.html 3. ubuntu 10.04 启动过程

http://blog.sina.com.cn/s/blog_66fb0c830100xms2.html 4.《深入浅出嵌入式底层软件开发》扬铸 编著

搜索更多关于: Linux 根文件系统制作流程 20160308 的文档
Linux 根文件系统制作流程 20160308.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9ghh66usqv92i2o9mdd6_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top