一、文件系统概要
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/ [c|b]
说明:
<device>: 设备名称
[c|b]: 设备类型,c:字符设备,b:块设备
: 主设备号,具体查看内核中Documentation/devices.txt的说明
: 次设备号
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、制作根文件系统镜像