嵌入式系统开发-麦子学院(15)-根文件系统

1. 根文件系统结构

/bin 存放二进制可执行命令的目录
/dev 存放设备文件的目录
/etc 存放系统管理和配置文件的目录
/home 用户主目录
/lib 存放动态链接共享库的目录
/sbin 存放系统管理员使用的管理程序的目录
/tmp 公用的临时文件存储点
/root 系统管理员的主目录
/mnt  系统临时挂载其他文件系统的目录
/proc 虚拟文件系统,可直接访问来获取系统信息
/var 某些大文件的溢出区
/usr 最庞大的目录

2.嵌入式根文件系统框架 — busybox

最小的文件系统

嵌入式系统开发-麦子学院(15)-根文件系统_第1张图片
1)创建终端设备

mknod console c 5 1

2)添加可执行文件依赖库ld-linux.so.3

cp ld-linux.so.3 lib/

3) 查看依赖库ld-linux.so.3 是否有其他依赖

readelf -d linuxrc |grep NEEDED

busybox项目:http://www.busybox.net

3.编译busybox源码

make defconfig;make
make menuconfig
make CONFIG_PREFIX = ../mini_rootfs/ install 

4.交叉编译busybox

配置交叉编译:

make menuconfig
		 -busybox setting
		 	-build option
		 		-cross cpmpilerprefix   第一步设置交叉编译器
		 		-path to sysrootb  		第二步设置交叉编译器路径

嵌入式常用的工具命令:

设备驱动管理:

	fdisk 	fsck 	hwclock 	mkdosfs
	insmod 	rmmod	rmmod		lsmod	mknod	modprobe
	lsusb	mdev	mount		umount

文件编辑处理:

	mkdir	mkfifo 	ln 		mv 		cp		touch		rm		unlink	
	awk		cat		cut		find	vi		sed			wc		tar		
	grep	head	tail	less	more	xargs	od	stat

网络信息管理:

	udhcpc		udhcpd 		route		netstat		ping		ifconfig		

系统信息管理:

	chmod		clear 		date		dd		df		echo		free
	ipcrm		ipcs			ls		ps		pwd		top		uptime
	kill		killall		reboot		sleep		sysctl		usleep

5.busybox的启动脚本分析

init.c

① 信号处理
②初始化控制终端
③环境变量配置
④单用户模式
⑤解析inittab文件

new_init_atcion :

  • sysiniit: /etc/iniit.d/rcS
  • askfirst
  • ctrl_alt_del
  • shutdown
  • restart

⑥运行action::sysiniit、wait、once、respawn
⑦系统重启

/etc/iniittab文件:

sysinit ——为init提供初始化命令行的路径及脚本程序
respawn ——每当相应的进程终止执行便重启
askfirst ——类似respawn ,不过它的主要用途是减少系统上执行的终端应用程序的数量。
wait ——告诉init必须等到相应的进程一次,而且不会等待它完成
once —— 仅执行相应的进程一次,而且不会等待它完成
restart——当init重启时,执行相应的进程,通常此处所执行的进程就是init本身
shutdown——当系统关机时,执行相应的进程

/etc/init.d 目录下的文件:

初始化脚本:rcS -> 系统环境准备与配置

应用及服务脚本:

K(kill)开头的文件:系统初始化过程中不启动该服务
S(start)开头的文件:系统初始化过程中启动该服务
数字越大,优先级越低

6.常见的嵌入式文件系统

嵌入式系统开发-麦子学院(15)-根文件系统_第2张图片
1)procfs

procfs 是linux内核信息的抽象文件借口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中/proc。通过echo或cat命令可对系统信息 进行查取和调整。系统工具也通过procfs获取内核参数,如:ps、lspci等。

procfs的内容: 进程信息和系统信息

procfs信息查看: cat /proc/cmdline

2)tmpfs

tmpfs是一种虚拟内存文件系统,使用内存作为存储分区进行文件的临时性存取,掉电会丢失,创建时不需要使用mkfs等进行格式化。

tmpfs的挂载:

mount -t tmpfs -0 size = 10M tmpfs /tmp
df -h

tmpfs的作用:

提高存存效率,存在ram的
避免对flash存储设备的频繁读写,提高使用寿命

3)devfs

为设备文件提供一种类似于文件的方法来管理位于/dev目录下的所有设备。

4)sysfs

挂载于 /sys目录下,把实际连接到系统上的设备和总线组织成一个分级的文件。

5) nfs
挂载远程主机的目录,访问该目录就像访问本地目录一样。

nfs挂载格式:mount -o nolock [server IP]:/[share dir] [local mount dir]

6) ramdisk

占据一块固定的内存,虚拟化成ram的快设备。事先要使用特定的工具如mke2fs格式化,还需要一个文件系统驱动来固定容量空间。

7)initramfs

过渡根文件系统机制:将加载真正的根文件系统所需的设备驱动、工具以及初始化程序先加载到内存运行 . iniitramfs 就是过渡根文件系统的一种。

initramfs : initial ram file system
在内核启动完成后把它复制到rootfs中,作为内核初始化的根文件系统,完成挂载系统真正根文件系统。

使用initramfs

  • init 程序文件:hello

    交叉编译:arm-linux -gcc -static hello -o hello.c
    修改命名:mv hello init

  • 打包initramfs镜像

    find .|cpio -o -H newc |gzip > ~myinitramfs.cpio.gz

8)只读压缩文件系统

提高文件系统的可靠性安全性与降低文件系统的空间占用:只读 + 压缩

cramfs文件系统: compressed ROM filesystem

特性:
支持 最大分区: 272MB (256MB + 16MB)
支持最大文件:16M
压缩格式:zlib ,压缩比一般可以达到1:2,美页单独进行压缩处理
动态解压:访问数据时实时解压访问到的页到内存,节省内存空间
使用透明:解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护,对外部使用透明

squashfs文件系统:

特性:
支持 最大分区: 16EB
支持最大文件:2TB
支持多种压缩格式:GZIP LZMA /L2MA2(XZ) LZO

嵌入式系统开发-麦子学院(15)-根文件系统_第3张图片
嵌入式系统开发-麦子学院(15)-根文件系统_第4张图片

9)Flash 文件系统:

嵌入式系统开发-麦子学院(15)-根文件系统_第5张图片
嵌入式系统开发-麦子学院(15)-根文件系统_第6张图片

你可能感兴趣的:(嵌入式——麦子学院(学习路线))