Linux內(nèi)核統(tǒng)一設(shè)備系統(tǒng)操作
Linux內(nèi)核是比較常用,我研究了一下Linux內(nèi)核,Linux本身是這個操作系統(tǒng)的核心部分,和大家討論討論操作系統(tǒng)的內(nèi)核。內(nèi)核是完成那些最基本操作的程序,它負(fù)責(zé)其他程序(如文本編輯器程序)的啟動與終止、內(nèi)存申請?zhí)幚碛脖P訪問、網(wǎng)絡(luò)連接管理等方面的工作。sysfs 是 Linux內(nèi)核中設(shè)計較新的一種虛擬的基于內(nèi)存的文件系統(tǒng),它的作用與 proc 有些類似,但除了與 proc 相同的具有查看和設(shè)定內(nèi)核參數(shù)功能之外,還有為 Linux內(nèi)核 統(tǒng)一設(shè)備模型作為管理之用。
相比于 proc 文件系統(tǒng),使用 sysfs 導(dǎo)出內(nèi)核數(shù)據(jù)的方式更為統(tǒng)一,并且組織的方式更好,它的設(shè)計從 proc 中吸取了很多教訓(xùn)。
本文就 sysfs 的掛載點 /sys 目錄結(jié)構(gòu)、其與 Linux內(nèi)核 統(tǒng)一設(shè)備模型的關(guān)系、常見屬性文件的用法等方面對 sysfs 作入門介紹,并且就內(nèi)核編程方面,以具體的例子來展示如何添加 sysfs 支持。
sysfs 的歷史,其與 proc 的關(guān)系?
sysfs 本身并不是一項很新的技術(shù),但筆者發(fā)現(xiàn),雖然 sysfs 從2003年誕生至今已有5年,但人們對 sysfs 依然缺乏了解;一個很重要的原因可能是缺乏文檔, Linux內(nèi)核方面最重要的理論書籍“Linux 設(shè)備驅(qū)動第3版”和“理解 Linux內(nèi)核第2版”都誕生于2003年前后,并且從那以后尚未有再版過,其它一些重要文章則多對 sysfs 與 proc 相提并論且舉例常常只有 proc,這導(dǎo)致了 sysfs 的很多重要概念至今仍鮮為人知,因此有必要對 sysfs 作更多介紹,這是寫作本文的初衷。
sysfs 與 /sys
sysfs 文件系統(tǒng)總是被掛載在 /sys 掛載點上。雖然在較早期的2.6內(nèi)核系統(tǒng)上并沒有規(guī)定 sysfs 的標(biāo)準(zhǔn)掛載位置,可以把 sysfs 掛載在任何位置,但較近的2.6內(nèi)核修正了這一規(guī)則,要求 sysfs 總是掛載在 /sys 目錄上;針對以前的 sysfs 掛載位置不固定或沒有標(biāo)準(zhǔn)被掛載,有些程序從 /proc/mounts 中解析出 sysfs 是否被掛載以及具體的掛載點,這個步驟現(xiàn)在已經(jīng)不需要了。請參考附錄給出的 sysfs-rules.txt 文件鏈接。
sysfs 與 proc
sysfs 與 proc 相比有很多優(yōu)點,最重要的莫過于設(shè)計上的清晰。一個 proc 虛擬文件可能有內(nèi)部格式,如 /proc/scsi/scsi ,它是可讀可寫的,(其文件權(quán)限被錯誤地標(biāo)記為了 0444 !,這是內(nèi)核的一個BUG),并且讀寫格式不一樣,代表不同的操作,應(yīng)用程序中讀到了這個文件的內(nèi)容一般還需要進(jìn)行字符串解析,Linux內(nèi)核而在寫入時需要先用字符串格式化按指定的格式寫入字符串進(jìn)行操作;相比而言, sysfs 的設(shè)計原則是一個屬性文件只做一件事情, sysfs 屬性文件一般只有一個值,直接讀取或?qū)懭?。整個 /proc/scsi 目錄在2.6內(nèi)核中已被標(biāo)記為過時(LEGACY),它的功能已經(jīng)被相應(yīng)的 /sys 屬性文件所完全取代。新設(shè)計的內(nèi)核機(jī)制應(yīng)該盡量使用 sysfs 機(jī)制,而將 proc 保留給純凈的“進(jìn)程Linux內(nèi)核文件系統(tǒng)”。
【編輯推薦】