"sysfs is a ram-based filesystem initially based on ramfs. It provides a means
to export kernel data structures, their attributes, and the linkages between them to
userspace.” --- documentation/filesystems/sysfs.txt
可以先把documentation/filesystems/sysfs.txt讀一遍。文檔這種東西,真正讀起來就嫌少了。Sysfs檔案系統是一個類似於proc檔案系統的特殊檔案系統,用於將系統中的裝置群組織成階層,並向使用者模式程式提供詳細的核心資料結構資訊。
去/sys看一看,
localhost:/sys#ls /sys/
block/ bus/ class/ devices/ firmware/ kernel/ module/ power/
Block目錄:包含所有的塊裝置
Devices目錄:包含系統所有的裝置,並根據裝置掛接的匯流排類型組織成階層
Bus目錄:包含系統中所有的匯流排類型
Drivers目錄:包括核心中所有登入的裝置驅動程式
Class目錄:系統中的裝置類型(如網卡裝置,音效卡裝置等)
sys下面的目錄和檔案反映了整台機器的系統狀況。比如bus,
localhost:/sys/bus#ls
i2c/ ide/ pci/ pci express/ platform/ pnp/ scsi/ serio/ usb/
裡面就包含了系統用到的一系列匯流排,比如pci, ide, scsi, usb等等。比如你可以在usb檔案夾中發現你使用的隨身碟,USB滑鼠的資訊。
我們要討論一個檔案系統,首先要知道這個檔案系統的資訊來源在哪裡。所謂資訊來源是指檔案組織存放的地點。比如,我們掛載一個分區,
mount -t vfat /dev/hda2 /mnt/C
我們就知道掛載在/mnt/C下的是一個vfat類型的檔案系統,它的資訊來源是在第一塊硬碟的第2個分區。
但是,你可能根本沒有去關心過sysfs的掛載過程,她是這樣被掛載的。
mount -t sysfs sysfs /sys
ms看不出她的資訊來源在哪。sysfs是一個特殊檔案系統,並沒有一個實際存放檔案的介質。斷電後就玩完了。簡而言之,sysfs的資訊來源是kobject階層,讀一個sysfs檔案,就是動態從kobject結構提取資訊,組建檔案。
所以,首先,我要先講一講sysfs檔案系統的資訊來源 -- kobject階層。kobject階層就是linux的裝置模型。
莫愁前路無知己,天下誰人不識君。 唐·高適· 別董大