如何构建linux根文件系统

如何构建linux根文件系统

  • linux内核的配置编译系统
  • 1.什么是根文件系统
    • Linux中的文件系统层次结构标准 (FHS)
  • 2.“/”根下的目录结构![111.png](https://img-blog.csdnimg.cn/img_convert/5fb45d0562ccf4be292b14f1d2b3f99f.png)
    • 程序文件目录
  • 3.构建根文件系统
    • 制作嵌入式根文件系统的过程:
    • 基本命令--busybox
      • 手动添加 ——mknod命令:使用一个应用程序来统一管理,busybox提供了一个mdev的程序,这个程序能够帮我们生成设备文件。
      • 标准C库
      • 其他函数库
      • init 程序
      • BusyBox inittab文件
      • init程序的启动流程:
      • 系统配置文件实例
      • /etc/init.d/rcS 文件样例如下:
      • fstab文件样例如下:
      • inittab在执行完rcS后,启动一个shell程序bash程序。shell程序会读取profile文件来设置shell的环境变量
        • profile文件的样例如下:
        • 如果你的系统支持网络,可以通过nfs测试做好的根文件系统
          • 备份原 NFS root
          • 挂载新做好的NFSroot


linux内核的配置编译系统

——Kconfig
——Makefile
——.config

1.什么是根文件系统

  • 根文件系统(“/”)是存放运行、维护系统所必须的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也可以安装各种软件包。
  • 在linux系统中,目录(文件)的名字表示了该目录(文件)的含义,指定了该目录应该存放什么内容。(因此在linux系统中,目录的命名非常重要。)

Linux中的文件系统层次结构标准 (FHS)

FHS标准是众多的Linux发布包有了可以遵循的标准,使得软件和用户可以预测已经安装了的文件和目录的位置。它定义了如下的内容,定义了文件系统中每个区域的用途。

2.“/”根下的目录结构如何构建linux根文件系统_第1张图片

程序文件目录

/bin: 普通用户和root用户都能执行的基本程序
——ping, mknod, mount, tar, grep, gzip, etc
/sbin: root用户能执行的基本程序
——int, insmod, route, mkfs, rmmod, ifconfig
/usr/bin: 更多非必须的用户程序
——autorun, bibtex, latex, biff, ftp, wc, whereis, whoami
/usr/sbin: 更多非必须的root工具程序
——automount, httpd, in.telnetd, in.talkd, sendmai
/lib: 启动系统和运行基本命令时需要的动态库文件
/usr/lib: 所有的其他库
/usr/lib/xxx: 一些工具包的私有库 ——如:/usr/lib/perl5

3.构建根文件系统

如何构建linux根文件系统_第2张图片

制作嵌入式根文件系统的过程:

如何构建linux根文件系统_第3张图片

基本命令–busybox

——BusyBox 项目是由Bruce Perens in 在1996创建的,是在 GNU GPL 许可协议下发行的开源软件。 http://www.busybox.net/
——Busybox是一个UNIX系统工具集,它将很多普通的UNIX工具集成到一个很小的可执行文件中,为普通用户提供大多数常用的命令;
——BusyBox 可以编译成一个静态可执行程序,也可以使用glibc 或者 uClibc编译成一个使用动态库的可执行程序
——编译Busybox步骤
-下载代码,解压代码
-配置Busybox
-$ cd P R J R O O T − PRJROOT - PRJROOT make menuconfig
主要配置有哪些命令等
交叉编译和安装
——和配置Linux内核选项一样,在Busybox源码根目录中输入make menuconfig命令:

如何构建linux根文件系统_第4张图片
如何构建linux根文件系统_第5张图片

手动添加 ——mknod命令:使用一个应用程序来统一管理,busybox提供了一个mdev的程序,这个程序能够帮我们生成设备文件。

标准C库

标准C函数库在交叉编译器的目录下
例如我们的交叉编译器在/opt/crosstool
那么标准C库所在的目录:
/opt/crosstool/4.9.4/arm-sice-linux-gnueabi/sysroot/lib/

其他函数库

jpeg库
png库
Qt库
需要移植(获取源码、并且交叉编译这些源码来得到对应的库)
——系统配置文件,一般需要自己编写,是linux系统在引导是需要读取的,如果没有系统配置文件,将会导致系统启动错误。下面是Linux系统的引导过程。
如何构建linux根文件系统_第6张图片

init 程序

——/sbin/init 是默认的第一个用户空间程序
——启动系统服务程序,自动运行的程序等 (sshd, X server…)
——嵌入式linux系统使用busybox 的 init 程序
——init程序是由内核启动的1号程序,在启动过程中,会读取系统配置文件inittab,根据这个文件来启动系统。
——下面介绍inittab文件的格式:
inittab 文件中,每一行是一条启动规则,文件由多条启动规则组合而成,每一条的启动规则如下:
id : runlevels : action : process
由三个”:”号,分成4个段,每一个段的含义如下:
id: 此处id指明程序的控制台如(ttySAC0),如果程序不需要交互, 则ID为空
runlevels : 不支持runlevel, 被忽略
process : 将执行的命令和命令的命令行参数
action : 动作类型,决定process启动的时机,启动类型等。action的值只有8个,如下表。

BusyBox inittab文件

如何构建linux根文件系统_第7张图片

init程序的启动流程:

读取文件inittab
执行 inittab 中所有action 为sysinit的命令
执行 inittab 中所有action 为wait 的命令
执行 inittab 中所有action 为 once的命令
循环运行
-运行 inittab中所有action 为 respawned 的命令
-运行 inittab中所有action 为 askfirst的命令

系统配置文件实例

如何构建linux根文件系统_第8张图片

/etc/init.d/rcS 文件样例如下:

如何构建linux根文件系统_第9张图片
rcS文件中,执行命令”/bin/mount -a”这个命令需要fstab文件来挂载文件系统。
然后启动mdev程序来生成设备文件。

fstab文件样例如下:

如何构建linux根文件系统_第10张图片

inittab在执行完rcS后,启动一个shell程序bash程序。shell程序会读取profile文件来设置shell的环境变量

profile文件的样例如下:

如何构建linux根文件系统_第11张图片
如何构建linux根文件系统_第12张图片

如果你的系统支持网络,可以通过nfs测试做好的根文件系统
备份原 NFS root
挂载新做好的NFSroot

你可能感兴趣的:(Linux操作系统,linux,运维,服务器)