文件系统学习(2)
常用嵌入式文件系统
-
在类Unix系统中一切都是文件,那么Linux是如何将系统的运行信息、设备信息等抽象成文件进行管理的?
Linux内核实现了一套特殊的内存虚拟文件系统用于使用与文件接口统一的操作来完成系统信息管理,它们包括:
procfs、devfs、sysfs。关于基于逻辑的虚拟文件系统分析
1、进程文件系统:procfs
2、设备文件系统:devfs、sysfs
一、procfs
procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中/proc.这样我们就可以简单直接的通过echo或cat这样的文件操作命令对系统信息进行查取和调整了。大量的系统工具也通过procfs获取内核参数,例如ps、lspci等。procfs的挂载:首先确定你的内核已经支持procfs,默认支持
mount -t proc none /proc
使用/etc/fstab条目:none /proc proc defaults 0 0procfs的内容:
进程信息
系统信息procfs信息查看
cat命令: cat /proc/cmdlineprocfs参数调整
echo命令
二、devfs
Linux2.6内核以前设备文件的抽象机制:提供了一种类似于文件的方法来管理位于/dev目录下的所有设备。
/dev ————— 根文件系统目录 设备文件创建 制作根文件系统时创建基本的,比如console,tty1等
设备驱动加载时创建相应的设备文件特殊设备文件
/dev/console
/dev/null /dev/zero-
devfs的缺点 ————> sysfs的设计
不确定的设备映射,有时一个设备映射的设备文件可能不同,例如我的U盘可能对应sda有可能对应sdb没有足够的主/辅设备号,当设备过多的时候,显然这会成为一个问题
三、sysfs
Linux2.6内核以后引入sysfs:挂载于/sys目录下,把实际连接到系统上的设备和总线组织成一个分级的文件,用户空间的程序同样可以利用这些信息以实现和内核的交互,该文件系统是当前系统上实际设备树的一个直观反应。
sysfs的原理 kobject子系统:建立目录树 当一个kobject被创建的时候,/sys/目录下对应的文件和目录也就被创建
每个设备在sysfs中都有唯一对应的目录,可以被用户空间读写sysfs的挂载:首先确定你的内核已经支持sysfs,默认支持 # mount -t none sysfs /sys
使用/etc/fstab条目:none /sys sysfs defaults 0 0sysfs的使用 cat命令: 查看/sys目录下的设备信息
- sysfs的应用 用户空间的工具udev:利用了sysfs提供的信息来实现所有devfs的功能
udev运行在用户空间中,而devfs却运行在内核空间