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