如何撰寫Driver支援sysfs檔案系統
前言 在現在Linux的系統中,有一個新的虛擬檔案系統,叫做sysfs,它只要是來管理Linux系統中的週邊元件,及配合使用公用程式來自動產生device node。其實它是一個虛擬的記憶體檔案系統,它是由proc所變化而來的,它是由各個driver所產生,換另一句話就是要Driver有撰寫才會有這樣的功能,它是繼承kobject的資料結構,另外其檔名及內容都是driver自行解決,目前主要都是來設定driver自己本身的一些功能,這樣可以讓驅動程式更多元化,或者可以讀取驅動程式現在的情形為何,這可以來維護系統的運作,現在有很多驅動程式已經支援這個功能,所以有許多的系統管理程式,也是透過這個介面來管理系統核心。現在我們來介紹如何在driver中撰這些程式碼。 如何啓動這個目錄 因為它是一個虛擬的記憶體檔案系統,所以將使用Linux系統中管理檔案系統一樣的方法,就是使用mount的指令將其掛載在作業系統的檔案系統中,以下為單獨載入的指令: > mount –t sysfs sysfs /sys 另外在kernel的選項中必須要啓動以下選項: CONFIG_SYSFS=y 系統驅動程式結構 我們先來了解一下linux kernel其中驅動程式的結構,在linux kernel的驅動程式中會將各種元件給予分門別類,並且在各種類別中會給予建構一個管理層的驅動程式,其主要目的是要建立和應用程式之間的標準介面,並且管理相同類別中的各家不同的硬體廠商,如此一來即可規範硬體廠商如何撰寫廠商,避免因不同的廠商而產生不同的驅動程式的撰寫格式不同,或者造成應用程式的介面,進而造成使用者因不同的廠商而要修改軟體。其架構圖如下: 圖一:驅動程式系統架構 以圖一中來看將會有一個RTC class產生,它將會統籌管理系統中所有的RTC元件,而系統中所有的RTC將會和它來做一個註冊,如此會產生一個RTC的class及其底下的RTC0, RTC1 ….. RTCn,其會在/sys/class之下會建立一個RTC的目錄,而每一個註冊的RTC元件將會在RTC class目錄之下產生RTC0至RTCn的子目錄,而每一個子目錄將會各...