一、文件系统概要
1、根文件系统(Root filesystem)是存放运行、维护系统所必须的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也可以安装各种软件包
2、文件系统层次结构标准【Filesystem Hierarchy Standard(FHS)】
1)Linux和UNIX的文件系统是一个以“/”为根的阶层式的树状文件结构,/因此被称为根目录。
2)在UNIX早期各厂家有分别有自己的根文件系统,比较混乱,LINUX为了避免这个问题,在LINUX初期1994年推出了名为FSSTND(Filesystem Standard)的文件系统层次结构标准。
3)FHS标准使得众多的LINUX发布包有了可以遵循的标准,定义了文件系统每个区域的用途,定义了所需要的最小构成的文件和目录。
4)提高软件的可移植性。
3、根文件系统主要目录
目录 | 内容 |
/bin | 可执行程序 |
/dev | 块、字符设备节点 |
/etc | 主要配置文件和初始化执行文件 |
/lib | 基本的库文件,如:C库和内核模块 |
/mnt | 挂载点,临时挂载文件系统用 |
/opt | 附加的软件包 |
/proc | 虚拟文件按系统,用于内核和进程通讯 |
/sbin | 基本的系统管理程序 |
/tmp | 临时文件目录 |
/usr | 更多的用户程序,包括X server |
/sys | 虚拟文件系统sysfs挂载点 |
/var | 可变信息储存,如log等 |
程序文件目录
/bin: 普通用户和root用户都能执行的基本程序,ping,mknod,mount,tar,grep,gzipdeng
/sbin: root用户能执行的基本程序,int,insmod,route,mkfs,rmmod,ifconfig等
/usr/bin: 更多非必须的用户程序,autorun,bibtex,latex,biff,ftp等
/usr/sbin: 更多非必须的root工具程序,automount,httpd,sendmail等
二、根文件系统的制作
1、定制应用程序
1)配置基本的linux命令(嵌入式linux通过busybox制作),主要命令有:
cat、chmod、chown、cp、chroot、copi、date、dd、df、dmesg、dos2unix、du、echo、
env、expr、find、grep、gunzip、gzip、halt、id、ifconfig、init、insmod等等
2)配置用户自己的应用
2、创建基本的目录,根据FHS规范创建。
3、定制库文件
1)配置基本的glibc库(以so结尾的动态库),复制到自己的根文件系统.
2)对于嵌入式,仅仅需要保留使用到的库就可以了。
用ldd、readelf 来查看用到的动态库,去除那些不需要的动态库
用Strip将库中的调试信息等去除。
4、创建基本的设备节点
放置目录/dev,嵌入式中只需要创建必须的设备节点,consoles是必须要创建的。
创建命令:mknod /dev/<device> [c|b] <major> <minor>
说明:
<device>: 设备名称
[c|b]: 设备类型,c:字符设备,b:块设备
<major>: 主设备号,具体查看内核中Documentation/devices.txt的说明
<minor>: 次设备号
5、创建启动脚本
/linuxrc
1)用来初始化系统的一个简单的启动脚本程序,通过内核命令行产生init指定 init=/linuxrc
2)通常用在initrds上或一个简单的系统中
3)通常是nash or busybox sh 脚本
4)这个脚本可以执行多种任务:
加载驱动
设置网络
挂载文件系统
切换到一个新的根文件系统
.......
6、添加启动配置和脚本程序
/etc/inittab
文件格式:id:runlevels:action:process
说明:
id:此处ID指定程序的控制tty,如果程序不需要交互。则ID为空
runlevels:运行等级,busybox不支持
process:将执行的命令和命令的参数
acthion:
Action类型 | 描述 |
sysinit | provide init with the path to the initialization script |
respawn | 程序终止后重新执行 |
askfirst | 同respawn,程序执行前会询问,要求按ENTER建 |
wait | init等待执行的程序后再继续执行 |
once | 只运行程序一次,并且不等待程序运行完就继续执行 |
ctrlaltdel | 当按下Ctrl-Alt-Delete组合键时执行的程序 |
shutdown | 系统关机时执行的程序 |
restart | 系统重新启动时执行的程序,通常是init程序 |
/etc/fstab
设置需要挂载的节点
文件格式
device mount-point type options dump fsck order
/etc/init.d/rcS
/bin/mount -a #自动挂载/etc/fstab里的设备
7、测试根文件系统
8、制作根文件系统镜像