第10章制作Linux根文件系统

Download Report

Transcript 第10章制作Linux根文件系统

制作Linux根文件系统
本章介绍了Linux根文件系统的组织结构,并且分
析了init进程调用文件系统脚本初始化的过程。只
有掌握了文件系统的基本构成,才能自己动手定
制Linux文件系统。
2
www.farsight.com.cn
学习目标
根文件系统组织结构
INIT系统初始化过程
定制文件系统
Linux的根文件系统至少应包括以下几项内容。
1.基本的文件系统结构,包含一些必需的目录比如
:/dev,/proc,/bin,/etc,/lib,/usr,/tmp等。
2.基本程序运行所需的库函数,如Glibc/uC-libc。
3.基本的系统配置文件,比如rc,inittab等脚本文
件。
4.必要的设备文件支持:/dev/hd*,/dev/tty*,
/dev/fd0。
5.基本的应用程序,如sh,ls,cp,mv等。
10.1 根文件系统目录结构
10.1.1 FHS目录结构
Linux根文件系统结构
/dev
/root
/usr
/var
/home
/prco
/bin
根文件系统 /
/sbin
/etc
/boot
/lib
/mnt
/tmp
/initrd
10.1.2 文件存放规则
1.把全局配置文件放入/etc目录下。
2.将设备文件信息放入/dev目录下,设备名可以作
为符号链接定位在/dev中或/dev子目录中的其他设
备存在。
3.操作系统核心定位在/或/boot,若操作系统核心
不是作为文件系统的一个文件存在,不应用它。
4.库存放的目录是/lib。
5.存放系统编译后的可执行文件、命令的目录是
/bin,/sbin,/usr。
10.2 添加系统文件
10.2.1 添加共享链接库
在在根文件系统的/lib目录下主要包含以下4种类型
的文件。
1. 实际的共享链接库
2.主修订版本的符号链接
3.与版本无关的符号链接指向主修订版本的符号链
接
4.静态的链接库
10.2.2 添加内核模块
1.在内核编译过程中自动添加内核模块
2.动态添加内核模块
动态加载内核模块有2种方法,以下分别叙述。
(1)采用modprobe命令加载
(2)采用insmod命令加载
10.2.3 添加设备文件
Linux中任何对象(包括设备)都可以认为是文件。
Linux将设备分为最基本的2大类:一类是字符设
备(Character Device),另一类是块设备(Block
Device)。
1.使用mknod指令来添加设备
2.在/dev目录下采用MAKEDEV(符号链接
/sbin/MAKEDEV)来建立设备文件
10.3 init系统初始化过程
通常,Linux内核的启动可以分为两个阶段。
1. 在第1个阶段完成硬件检测、初始化和内核的引
导
2.在第2个阶段就是init的初始化进程。
10.3.1 inittab文件
Linux启动时,运行一个叫作init的程序,然后根据
运行级启动后面的任务,包括多用户环境,网络
等。所谓的运行级就是操作系统当前正在运行的
功能级别。
10.3.2 System V init启动过程
概括地讲,Linux \Unix系统一般有两种不同的初始
化启动方式。
 BSD system init
 System V system init
以下是一个大致的System V init过程。
(1)init过程执行的第一个脚本文件是
/etc/rc.d/rc.sysinit, /etc/rc.d/rc.sysinit主要做在各个运
行级别中进行初始化工作
(2)执行缺省的运行级模式。
(3)执行/etc/rc.d/rc.local脚本文件。
(4)执行/bin/login程序。
10.3.3 Busybox init启动过程分析
默认的情况下,Busybox安装之后会生成一个可执行
程序Busybox,在目录…/_install/bin下,查看
Busybox的属性可以知道/sbin/init是其符号链接,
如果使用Busybox做Ramdisk,BusyBox会在内核刚
完成加载后就立即启动,此后Busybox会跳转到它
的init进程开始执行
10.4 定制文件系统
10.4.1 定制应用程序
在定制嵌入式系统的系统应用程序时,如果把常用
的应用程序的源码都下载来交叉编译,这一过程
的工作量显然是很大的,而且非常繁琐。为了进
一步减小所创建的根文件系统的尺寸,可以考虑
使用下列工具包软件来替代某些标准的工具。
事实上使用Busubox来定制是一个不错的选择
10.4.2 配置应用程序自动启动
在Linux下配置应用程序自动启动大致有以下的3种
方法。
(1)在启动/etc/init.d/下添加启动脚本,创建
/etc/rc.d/.../目录下的链接。
(2)直接在/etc/rc.d/rc.local脚本中添加命令,该脚
本应该在启动过程中调用
(3)通过/linuxrc脚本直接启动,通常是在内核命令
行参数中指定init=/program。
Q&A
16
www.farsight.com.cn
17
www.farsight.com.cn