嵌入式Linux--根文件系统(一)简介

一、简介

 根文件系统一般也叫做 rootfs,那么什么叫根文件系统?看到“文件系统”这四个字,很多人,包括我第一反应就是 FATFS、FAT、EXT4、YAFFS 和 NTFS 等这样的文件系统。在这里,根文件系统并不是 FATFS 这样的文件系统代码,EXT4 这样的文件系统代码属于 Linux 内核的一部分。Linux 中的根文件系统更像是一个文件夹或者叫做目录(在我看来就是一个文件夹,只不过是特殊的文件夹),在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文件,这些文件是 Linux 运行所必须的,比如库、常用的软件和命令、设备文件、配置文件等等。

 根文件系统首先是内核启动时所 mount 的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

 展开来细说就是,根文件系统首先是一种文件系统,该文件系统具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如 rcS,inittab)和服务加载到内存中去运行。我们要明白文件系统和内核是完全独立的两个部分。总之:一套 linux 体系,只有内核本身是不能工作的,必须要 rootfs(上的 etc 目录下的配置文件、/bin、/sbin等目录下的 shell 命令,还有/lib 目录下的库文件等)相配合才能工作。

 百度百科上说内核代码镜像文件保存在根文件系统中,但是我们嵌入式 Linux 并没有将内核代码镜像保存在根文件系统中,而是保存到了其他地方。比如 NAND Flash 的指定存储地址、EMMC 专用分区中。根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统,然后从根文件系统中读取初始化脚本,比如 rcS,inittab 等。根文件系统和 Linux 内核是分开的,单独的 Linux 内核是没法正常工作的,必须要搭配根文件系统。如果不提供根文件系统,Linux 内核在启动的时候就会提示内核崩溃(Kernel panic)的提示,这个在 37.2.4 小节已经说过了。根文件系统的这个“根”字就说明了这个文件系统的重要性,它是其他文件系统的根,没有这个“根”,其他的文件系统或者软件就别想工作。比如我们常用的 ls、mv、ifconfig 等命令其实就是一个个小软件,只是这些软件没有图形界面,而且需要输入命令来运行。这些小软件就保存在根文件系统中,这些小软件是怎么来的呢?这个就是我们本章教程的目的,教大家来构建自己的根文件系统,这个根文件系统是满足 Linux 运行的最小根文件系统,后续我们可以根据自己的实际工作需求不断的去填充这个最小根文件系统,最终使其成为一个相对完善的根文件系统。

我们使用命令“cd /”进入根目录如下所示:

liefyuan@ubuntu:/$ ls
bin    dev   initrd.img      lib32   lost+found  opt   run   srv  usr      vmlinuz.old
boot   etc   initrd.img.old  lib64   media       proc  sbin  sys  var
cdrom  home  lib             libx32  mnt         root  snap  tmp  vmlinuz

常用目录简介

1、/bin目录

该目录下存放所有用户都可以使用的、基本的命令,这些命令在挂接其它文件系统之前就可以使用,所以/bin 目录必须和根文件系统在同一个分区中。/bin 目录下常用的命令有:cat,chgrp,chmod,cp,ls,sh,kill,mount,umount,mkdir,mknod,test 等,我们在利用 Busybox 制作根文件系统时,在生成的 bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。

2、/sbin目录

 该目录下存放系统命令,即只有管理员能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/ local/sbin目录下,/sbin 目录中存放的是基本的系统命令,它们用于启动系统,修复系统等,与/bin 目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin 目录必须和根文件系统在同一个分区中。/sbin 目录下常用的命令有:shutdown,reboot,fdisk,fsck 等,本地用户自己安装的系统命令放在/usr/local/sbin 目录下。

3、/dev目录

 该目录下存放的是设备文件,设备文件是 Linux 中特有的文件类型,在 Linux 系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过“dev/ttymxc0”文件可以操作串口 0,通过“/dev/mtdblock1”可以访问 MTD 设备的第 2 个分区。

4、/etc目录

 该目录下存放着各种配置文件,对于 PC 上的 Linux 系统,/etc 目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。

5、/lib目录

 该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。

6、/home目录

 用户目录,它是可选的,对于每个普通用户,在/home 目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。

7、/root目录

 根用户的目录,与此对应,普通用户的目录是/home 下的某个子目录。

8、/usr目录

 /usr 目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr 目录下。里面存放的是共享、只读的程序和数据,这表明/usr 目录下的内容可以在多个主机间共享,这些主要也符合 FHS 标准的。/usr 中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。

9、/var目录

 与/usr 目录相反,/var 目录中存放可变的数据,比如 spool 目录(mail,news),log 文件,临时文件。

10、/proc目录

 这是一个空目录,常作为 proc 文件系统的挂接点,proc 文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。

11、/mnt目录

 用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、硬盘。

12、/tmp目录

 用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp 目录下,所以/tmp 目录必须存在并可以访问。

二、常用根文件系统构建工具简介

1、BusyBox工具

 BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。其目的是在软盘上创建一个可引导的 GNU/Linux 系统,做安装和救急盘。BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat 和 echo 命令等等,还包含了一些更大、更复杂的工具,例 grep、find、mount 以及 telnet 命令。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux的许多工具和命令,也包含了 Android 系统自带的 shell。

 busybox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小.我们平时用的那些linux命令就好比是分立式的电子元件,而busybox就好比是一个集成电路,把常用的工具和命令集成压缩在一个可执行文件里,功能基本不变,而大小却小很多倍,在嵌入式linux应用中,busybox有非常广的应用,另外,大多数linux发行版的安装程序中都有busybox的身影,安装linux的时候案ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指向busybox的链接.

2、Buildroot工具

3、Yocto工具

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页