本文主要是对韦东山老师的《嵌入式Linux应用开发完全手册》中第17章中的小结,以及一些自己的经验看法。
概要:本文讲述了Linux根目录中各个目录的作用和内容、busybox工具的使用、内核在加载init进程后进行的操作、mdev是如何被加入Linux的、glibc库的移植。
Linux文件系统概述
Linux中没有像windows的C、D、E盘之分,只有一个根文件系统,其它文件系统通过挂载到根文件系统中的某个目录下,当挂载目录中的其它文件将会变成不可访问,所以挂载点最好是空目录。
根文件目录结构
为了在安装软件时能够预知文件、目录的存放位置,为了让用户方便地找到不同类型文件的位置,在构造根文件系统时,建议遵循FHS标准(Filesystem Hierarchy Standard)。它顶一个文件系统中目录、文件分类存放的原则,定义了系统运行时所需的最小文件、目录的集合,并举例了不遵循这些原则的例外情况及其原因。FHS并不是一个强制的标准。FHS文档可以从网站http://www.pathname.com下载。
/bin目录
该目录下存放的是所有用户(系统管理员和普通用户)都可以使用的命令,这些命令在加载其它文件系统之前就需要使用,所以该目录必须和根文件系统在同一个分区中。
/bin目录下常用命令:cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir、mknod、test。/sbin目录
该目录中存放的是系统命令,只有系统管理员可以使用,系统命令还可以存放在/usr/sbin、/usr/local/sbin目录下。/sbin目录下的系统命令主要用来启动系统、修复系统等。该目录必须要和根文件系统在同一分区下。
/sbin下常用命令:shutdown、reboot、fdisk、fsck等。不是急迫需要使用的命令存放在/usr/sbin中,本地安装的系统命令安装在/usr/local/sbin。/dev目录
创建设备文件的方法有3种:
(1)手动创建
在制作根文件系统的时候,在/dev目录下就要创建好要使用的设备文件,之后在系统运行时动态添加设备时,要通过查阅/proc/devices来获得主设备号,然后再在/dev目录下创建设备节点。
(2)使用devfs文件系统
这种方法已经过时了,《嵌入式Linux应用开发完全手册》里面有较详细介绍。
(3)使用udev
udev是个用户程序,它能够根据系统状态动态地更新设备文件,包括设备文件的创建和删除。在busybox中有一个mdev命令,它是udev的简化版本,适合嵌入式应用。
- /etc目录
该目录下存放了各种配置文件。在PC的Linux系统中该目录下的文件非常多,但是这些文件是可以删选的。在嵌入式应用中,可以根据需求大大减少该目录下的文件。
/etc目录下的子目录
目录 | 描述 |
---|---|
opt | 用来配置opt下的程序 |
X11 | 用来配置X windows |
sgml | 用来配置SGML |
xml | 用来配置XML |
/etc 目录下的文件
文件 | 描述 |
---|---|
export | 用来配置NFS文件系统,只有当作为NFS服务器时使用 |
fstab | 用来指明”mount -a”执行时,需要挂载的文件系统 |
mtab | 用来显示已经加载的文件系统,通常是/proc/mounts的链接文件 |
ftpusers | 启动FTP服务器时,用来配置用户的访问权限 |
group | 用户的组文件 |
inittab | init进程的配置文件 |
ld.so.conf | 其它共享库的路径 |
passwd | 密码文件 |
- /lib目录
该目录下存放共享库和可加载模块,共享库用于运行根文件系统中的可执行程序。其它不是根文件系统所必须的库文件可以放在其他目录,比如/usr/lib、/usr/X11R6/lib、/var/lib.
/lib目录中的内容
目录/文件 | 描述 |
---|---|
libc.so.* | 动态连接C库 |
ld* | 连接器、加载器 |
modules | 内核可加载模式存放的目录 |
- /home目录
用户目录,它是可选的,存放用户相关的配置文件。
- /root目录
root用户的目录,存放root用户相关的配置文件。
- /usr目录
/usr目录的内容可以存放在另一个分区中,系统启动后子再挂接到根文件目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享。
/usr目录中的内容
目录 | 描述 |
---|---|
bin | 很多用户命令存放在这个目录下 |
include | C程序的头文件,这在PC上进行开发时才用得到,在嵌入式系统中不需要 |
lib | 库文件 |
local | 本地目录 |
sbin | 非必须的系统命令 |
share | 架构无关的数据 |
X11R6 | XWindow系统 |
game | 游戏 |
src | 源代码 |
- /var目录
与/usr相反,里面存放的是可变的数据,比如spool目录(mail、news、打印机等用的),log文件、临时文件。
- /proc目录
这是一个空目录,作为proc文件系统的挂载点。
- /mnt目录
用于临时挂载某个文件系统,通常是空目录,也可以在里面创建空的子目录,比如/mnt/cdrom、/mnt/hdal等,用来临时挂接光盘和硬盘。
- /tmp
用于存放临时文件,通常是空文件。一些需要生成临时文件的程序要用到/tmp目录,所以/