3.使用/proc目錄中的文件監(jiān)視驅(qū)動程序的狀態(tài)
通過設(shè)備文件怎樣訪問到相應(yīng)的驅(qū)動程序呢?它們中間有一個橋梁,那就是proc文件系統(tǒng),它一般會被加載到/proc目錄。訪問設(shè)備文件時,操作系統(tǒng)通常會通過查找/proc目錄下的值,確定由哪些驅(qū)動模塊來完成任務(wù)。如果proc文件系統(tǒng)沒有加載,訪問設(shè)備文件時就會出現(xiàn)錯誤。
Linux系統(tǒng)中proc文件系統(tǒng)是內(nèi)核虛擬的文件系統(tǒng),其中所有的文件都是內(nèi)核中虛擬出來的,各種文件實際上是當前內(nèi)核在內(nèi)存中的參數(shù)。它就像是專門為訪問內(nèi)核而打開的一扇門,比如訪問/proc/cpuinfo文件,實際上就是訪問目前的CPU的參數(shù),每一次系統(tǒng)啟動時系統(tǒng)都會通過/etc/fstab中設(shè)置的信息自動將proc文件系統(tǒng)加載到/proc目錄下:
# grep proc /etc/fstab
none /proc proc defaults 0 0 |
此外,也可以通過mount命令手動加載:
# mount -t proc none /proc |
通過/proc目錄下的文件可以訪問或更改內(nèi)核參數(shù),可以通過/proc目錄查詢驅(qū)動程序的信息。下面先讓我們看一下/proc目錄中的信息:
# ls /proc
1 4725 5032 5100 5248 5292 crypto kcore partitions
14 4794 5044 5110 5250 5293 devices kmsg pci
2 4810 5075 5122 5252 5295 dma ksyms self
3 4820 5079 5132 5254 5345 driver loadavg slabinfo
4 4831 5080 5151 5256 6 execdomains locks stat
4316 4910 5081 5160 5258 7 fb lvm swaps
4317 4912 5082 5170 5262 70 filesystems mdstat sys
4318 4924 5083 5180 5271 8 fs meminfo sysrq-trigger
4319 4950 5084 5189 5287 9 ide misc sysvipc
4620 4963 5085 5232 5288 apm interrupts modules tty
4676 5 5086 5242 5289 bus iomem mounts uptime
4680 5005 5087 5244 5290 cmdline ioports mtrr version
4706 5018 5088 5246 5291 cpuinfo irq net |
需要知道的是,這些文件都是實時產(chǎn)生的虛擬文件,訪問它們就是訪問內(nèi)存中真實的數(shù)據(jù)。這些數(shù)據(jù)是實時變化產(chǎn)生的,可以通過以下命令來查看文件的具體值:
# cat /proc/interrupts
CPU0
0: 50662 XT-PIC timer
1: 3 XT-PIC keyboard
2: 0 XT-PIC cascade
5: 618 XT-PIC ehci-hcd, eth1
8: 1 XT-PIC rtc
9: 0 XT-PIC usb-uhci, usb-uhci
11: 50 XT-PIC usb-uhci, eth0
12: 16 XT-PIC PS/2 Mouse
14: 8009 XT-PIC ide0
15: 0 XT-PIC ide1
NMI: 0
ERR: 0 |
其它文件的含意見表1所示。
/proc/sys目錄下的文件一般可以直接更改,相當于直接更改內(nèi)核的運行參數(shù),例如:
# echo 1 > /proc/sys/net/ipv4/ip_forward |
上面代碼可以將內(nèi)核中的數(shù)據(jù)包轉(zhuǎn)發(fā)功能打開。
另外,Linux系統(tǒng)中提供一些命令來查詢系統(tǒng)的狀態(tài),如free可以查看目前的內(nèi)存使用情況,ide_info可以查看ide設(shè)備的信息,例如: #ide_info /dev/had。類似的命令還有scsi_info,可以查看SCSI設(shè)備的信息。這些命令一般也是查詢/proc目錄下的文件,并返回結(jié)果。