打印

Magic Linux开发入门指南(五)

Magic Linux开发入门指南(五)

2.6 虚拟文件系统
    前面几节所介绍的目录和文件,都是真真正正、实实在在的存储在具体的外部
存储设备上的,它们可能是在本机的硬盘、闪存、光盘中,可能保存在不只一个磁
盘分区中,也可能保存在网络中其它主机的存储设备中的。本节所介绍的几个文件
系统,虽然它们出现在根文件系统中,但它里面的内容却无法在任何外部存储设备
中找到,因为它们都在内存中。


2.6.1 proc文件系统
    proc是一个重要虚拟文件系统,通过它里面的一些文件,可以获取系统状态信
息并修改某些系统的配置信息。
proc文件系统本身不占用磁盘空间,它仅存在于内
存之中,为操作系统本身和应用程序之间的通信提供了一个安全的接口。当我们在
内核中添加了新功能或设备驱动时,经常需要得到一些系统状态的信息,一般这样
的功能可能需要经过一些象
ioctl()这样的系统调用来完成。系统调用接口对于一些功
能性的信息可能是适合的,因为应用程序必须将这些信息读出后再做一定的处理。
但对于一些实时性的系统信息,例如内存的使用状况,或者是驱动设备的统计资料
等,我们更需要一个比较简单易用的接口来取得它们。
proc文件系统就是这样的一
个接口,我们可以简单的用
catstrings程序来查看这些信息。例如,执行下面的命
令:


    #cat /proc/meminfo

你可能会得到如下结果:

MemTotal:        254272 kB
MemFree:        104416 kB
Buffers:           23940 kB
Cached:         103972 kB
SwapCached:          0 kB
Active:            64660 kB
Inactive:           69276 kB
HighTotal:             0 kB
HighFree:             0 kB
LowTotal:        254272 kB
LowFree:        104416 kB
SwapTotal:       522072 kB
SwapFree:       522072 kB
Dirty:               48 kB
Writeback:            0 kB
Mapped:         11708 kB
Slab:            11364 kB
CommitLimit:     649208 kB
Committed_AS:   16064 kB
PageTables:        320 kB
VmallocTotal:    770040 kB
VmallocUsed:      7916 kB
VmallocChunk:   760564 kB
HugePages_Total:      0
HugePages_Free:       0
Hugepagesize:      4096 kB

同样的,freedftopps等程序的功能实现,强烈依赖于proc文件系统,为了使用
那些程序,一定要使内核支持
proc文件系统,并将其挂接到根文件系统的/proc目录
下。

    下表所列的文件或符号连接会出现在/proc目录下,但并不详尽,具体都包含那
些,取决于你的内核配置和具体的硬件设备。



名称
功能
apm
高级电源管理信息。
buddyinfo
Buddy算法内存分配信息。
cmdline
内核的命令行参数。
config.gz
当前内核的.config文件。
cpuinfo
cpu信息
devices
可以用到的设备(块设备/字符设备)
diskstats
磁盘I/O统计信息。
dma
使用的DMA通道
execdomains
执行区域列表。
fb
Frame buffer信息
filesystems
支持的文件系统
interrupts
中断的使用情况,记录中断产生次数。
iomem
I/O内存映射信息
ioports
I/O端口分配情况
kcore
内核核心映像,GDB可以利用它查看当前内核的所有数据结构状态。
key-users
密钥保留服务文件
kmsg
内核消息
ksyms
内核符号表
loadavg
负载均衡信息
locks
内核锁
mdstat
磁盘阵列状态
meminfo
内存信息
misc
杂项信息
modules
系统已经加载的模块文本列表
mounts
已挂接的文件系统列表
partitions
磁盘分区信息
pci
内核识别的PCI设备列表
self
访问proc文件系统的进程信息
slabinfo
内核缓存信息
splash
splash信息
stat
全面统计状态表
swaps
交换空间使用情况
uptime
系统正常运行时间
version
内核版本
vmstat
虚拟内存统计表
zoneinfo
内存管理区信息

      
      
      
      
      

      
      
      
      
      

      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
            
     

      
      
                        表
2-6-1


下表所列的目录会出现在/proc目录下,但并不详尽,具体包含那些,取决于你
的内核配置和具体的硬件设备。



名称
功能
[number]
进程信息
acpi
高级配置与电源接口
asound
ALSA声卡驱动接口
bus
系统中已安装的总线信息
dirver
空目录
fs
空目录
ide
IDE设备信息
irq
中断请求设置接口
net
网络各种状态信息
scsi
SCSI设备信息
sys
内核配置接口
sysvipc
中断的使用情况,记录中断产生次数。
tty
tty驱动信息
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      


                         表2-6-2




        
    proc
文件系统的详细内容可以通过执行 man proc命令获得,这里就不再进行更为详
细的介绍了。



2.6.2 sysfs文件系统
    与proc文件系统类似,sysfs文件系统也是一个不占有任何磁盘空间的虚拟文件系
统。它通常被挂接在
/sys目录下。sysfs文件系统是Linux2.6内核引入的,它把连接在系
统上的设备和总线组织成为一个分级的文件,使得它们可以在用户空间存取。其实

sysfs
是从procdevfs中划分出来的。
/sys目录下会包含下表所列的目录,但并不详尽,不过具体内容还取决于内的配
置和具体的硬件设备。


名称
功能
block
块设备
bus
系统总线
class
设备组
devices
系统设备
firmware
固件
kernel
内核
module
内核模块
power
供电系统
      
      
      
      
      
      
      
      
      
      

      
      
      

                            表2-6-3



讲述sysfs文件系统各目录的详细内容已经超出本文的范围,感兴趣的读者可以查看
有关
Linux驱动程序开发的书籍。

2.6.3 devfs文件系统
    devfs,也叫设备文件系统(Device Filesystem),设计它的唯一目的就是提供一
个新的(更理性的)方式管理通常位于
/dev的所有块设备和字符设备。典型的 /dev
树包含数百个块特殊文件和字符特殊文件,它们全都在根文件系统上。每个特殊文
件都可以让用户空间进程轻松地与内核设备实现交互。举例来说,通过对这些特殊
文件执行操作,你的
X服务器就能够访问视频硬件,fsck可以执行文件系统检验,lpd
可以通过并行端口向打印机发送数据。

实际上,通常LinuxUnix更“酷”的方面是,设备不是简单地隐藏在晦涩的
API
之后,而是真正地与普通文件、目录和符号链接一样存在于文件系统上。因为
字符和块设备是映射到普通文件系统名称空间的,我们通常可以用有意义的方式来
与硬件交互,可以仅使用标准
Unix 命令,如 cat dd。除了有趣之外,这还使我
们有更强的能力,并提高生产力。

下表所列的文件或符号连接可能会出现在/dev目录下,但并不详尽,具体内容取
决于你的具体硬件设备。


名称
功能
audio
音品设备
cdrom[0-9]
cdrom设备,这往往是一个符号连接
console
系统控制台
core
内核镜像,为/proc/kcore的符号连接
dmmidi
固件
dsp
内核
dvd
dvd设备,这往往是一个符号连接
fb
Frame buffer,一般为/dev/fb0的符号连接
fb0
Frame buffer设备
fd
文件描述符,/proc/self/fd的符号连接
fd[0-9]+
软盘设备
floppy
软盘设备,一般为fd[0-9]的符号连接
full
满设备,任何写入操作都会失败,并把errno设为ENOSPC,以表示没有剩余空间。
fuse
用户空间的虚拟文件系统
hd[a-z][1-9]+
IDE硬盘
sd[a-z][1-9]+
SCSISATA硬盘
hpet
HPET设备
initctl
用户与init进程交互的通道。
kmem
存取经过内核虚拟之后的内存
kmsg
任何对该文件的写入都将作为printk的输出
log
syslog的本地套接字
loop[0-9]
回环设备,一个磁盘文件模拟一个块设备。
lp[0-9]
打印机
md[0-9]
RAID设备
mem
直接存取物理内存
midi
MIDI设备
mixer
混音器
null
控设备。任何写入都将直接被丢弃,任何读取都将得到EOF
parport[0-9]
并口
port
存取I/O端口
ppp
ppp拨号设备
psaux
PS/2鼠标
ptmx
所有PTY master的复用器
pty[a-z]+[1-9]+
伪终端,用于创建ssh等登陆会话
ram[0-9]+
RAM diskinitrd只能使用ram0
ramdisk
ram0的符号连接
random
随机数发生器。完全有用户的输入来产生随机数。如果用户停止所有动作,则停止产生随机数。
root
根分区,这是一个到根分区设备的符号连接。
rtc
实时时钟
stderr
标准错误输出,/proc/self/fd/2的符号连接
stdin
标准输入,/proc/self/fd/0的符号连接
stdout
标准输出,/proc/self/fd/1的符号连接
tty[1-9,a-z]+
tty虚拟控制台,tty为当前控制台
ttyS[0-9]
串口
urandom
更快,但是不够安全的随机数发生器。
vcs[1-9,a-z]+
虚拟控制台的文本内容,一一对应。
X0R
/dev/null的符号连接
XOR
/dev/null的符号连接
zero
0字节源,可以读取到无限多的0字节。
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
     
      




      

                          表2-6-4



下表所列的目录可能会出现在/dev目录下,但不是全部,具体情况与你的内核配
置和硬件设备有关。



名称
功能
cpu
cpu信息
disk
磁盘/光盘信息,里面的内容为具体设备的符号连接
input
设备组
mapper
RAIDLVM控制接口
net
VMwareQemu等使用的虚拟网卡
pts
devpts文件系统挂载点,用于实现伪终端
raw
裸设备操作
shm
Linux独有的tmpfs文件系统挂接点。
snd
声卡控制接口
      

      
      
      
      
      
      
      
      
      
      
      

      
      

                          表2-6-5



    devfs文件文件系统是内核自动挂接的,当挂接好devfs文件系统后,才能正确执
init程序。Linuxdevfs文件系统与后面讲述的tmpfs文件系统使用相同结构。

2.6.4 tmpfs文件系统
    tmpfs文件系统是Linux特有的文件系统,唯一的标准挂接点是/dev/shm。当然,用
户可以将其挂接在其他地方。

    tmpfs有些像虚拟磁盘(ramdisk),但不是一回事。说其像虚拟磁盘,是因为它
可以使用你的
RAM,但它也可以使用你的交换分区。传统的虚拟磁盘是一个块设
备,而且需要一个
mkfs之类的命令格式化它才能使用。tmpfs是一个独立的文件系
统,不是块设备,只要挂接,立即就可以使用。

    tmpfs的大下是不确定的,它最初只有很小的空间,但随着文件的复制和创建,
它的大小就会不断变化,换句话说,它会根据你的实际需要而改变大小;
tmpfs的速
度非常惊人,毕竟它是驻留在
RAM中的,即使用了交换分区,性能仍然非常卓越;
由于
tmpfs是驻留在RAM的,因此它的内容是不持久的,断电后,tmpfs的内容就消失
了,这也是被称作
tmpfs的根本原因。
    有效的使用tmpfs可以极大的提高应用程序或整个系统的性能。有关tmpfs的详细
内容,还请读者参阅其他相关著作,毕竟本文讲述的是一个
Linux发行版的开发。

2.6.5 usbdevfs文件系统
    顾名思义,usbdevfs就是USB设备文件系统,它是一个动态生成的文件系统,有
些类似于
proc文件系统。它的标准挂接点是/proc/bus/usb,当然,也可以挂接到其他
地方。它主要用于:用户级驱动、即插即用、提供
USB设备信息、应用程序轮询
USB
设备的变化等。

2.6.6 devpts文件系统
    devpts文件系统为伪终端提供了一个标准接口,它的标准挂接点是/dev/pts。只要
pty
的主复合设备/dev/ptmx被打开,就会在/dev/pts下动态的创建一个新的pty设备文
件。挂接时,
UIDGID及其工作模式会指定给devpts文件系统的所有pty文件。这可
以保证伪终端的安全性。

    讨论devpts文件系统的详细内容,已经超过本文范围,还请读者参考其他专
著。


2.7 结束语
    贯穿Linux的整个文件组织结构,无不洋溢着那继承自Unix的深厚的文化底蕴,
美不胜收。使我不得不感叹,
Linux是多么伟大的一个操作系统。正是由于这些,
Linux
才长久不衰,越发显得青春洋溢,让我们这些热爱Linux的人为其流连忘返。
    到了这里,对于Linux的文件组织结构,我相信各位读者应该有了感官上的认识
了,我也再次感谢你,为了
Magic Linux,能够坚持将这些丑陋的文字读到这里。在
下一章里,我将讲述如何利用本章与上一章的知识,来构建一个能够工作的基本系
统。

(未完...待续...)

TOP

教育网可以直接上Linuxfans了,发个贴,呵呵!

TOP

千呼万唤,终于出来了。。。。

谢谢

TOP

谢谢!!

看了楼主的文章有很大收获。
烟灰跌落键盘

TOP

Magic Linux开发入门指南(六)呢?比lfs看着舒服多了,咱中国人滴,呵呵

TOP

感谢楼主

一路看过来,长了不少见识,等以后水平提高了,希望也能ML出点力!

TOP

不错,没想到这么好的贴。
好好学习,天天向上!

TOP

那个那个 太jian了么?   原谅我用词这么不礼貌  不过看作者2010年就不再登陆了,加上看一本小说也。。
谁可以联系下,帮忙打听是不是有剩下的文章可以发表出来?   当然,推荐别的教程也可以。
谢谢啦

TOP