給核心裝置驅動增加sysfs除錯檔案
我遇到的這個問題來自於Linux核心的一個培訓專案,具體可以搜尋Eudyptula關鍵字。目的是培養更多的核心開發者,不過這個專案現在已經截止報名。
首先需要了解的是sysfs,procfs和debugfs都是核心提供的偽檔案系統,實現核心/驅動和使用者空間的通訊。
對於sysfs來說,增加一個檔案的方法如下:
第一步:分別實現讀和寫的方法,命名規範是"檔名_show"和"檔名_store"。
static ssize_t <filename>_show(struct device *dev, struct device_attribute *attr, char *buf)
static ssize_t <filename>_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
第二步:用巨集構造相關結構體。(整體替換<filename>
為需要增加的檔名)
static DEVICE_ATTR_RW(<filename>);
這個巨集的作用就是字串的拼接,所以第一步裡面的函式名要符合規範才行。
#define DEVICE_ATTR_RW(_name) \
struct device_attribute dev_attr_##_name = __ATTR_RW(_name)
#define __ATTR_RW(_name) __ATTR(_name, (S_IWUSR | S_IRUGO), \
_name##_show, _name##_store)
#define __ATTR(_name, _mode, _show, _store) { \
.attr = {.name = __stringify(_name), .mode = _mode }, \
.show = _show, \
.store = _store, \
}
第三步:在驅動程式的入口和結束的地方分別建立和刪除檔案,其中attr的名字應該是dev_attr_##_name處理後的名字,即dev_attr_<filename>
。
void device_remove_file (struct device * dev, struct device_attribute * attr);
int device_create_file (struct device * dev, const struct device_attribute * attr);
重新編譯核心,然後安裝並啟動,就能看到自己建立的sysfs檔案了。也有其他的方法可以實現相同的功能,但是DEVICE_ATTR_RW應該是比較簡單的一種。Linux核心有時會定義一些新的巨集替換老的方法,這也是練習提交補丁的好機會。
相關文章
- 裝置驅動程式INF檔案——INF檔案的節
- gdb除錯嵌入式裝置的core檔案除錯
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- Linux裝置驅動之字元裝置驅動Linux字元
- 作業系統——裝置驅動和檔案系統作業系統
- 裝置驅動程式包可以刪除嗎 win10裝置驅動程式包能刪嗎Win10
- Linux裝置驅動框架、配置檔案及載入(轉)Linux框架
- Linux核心模組驅動載入與dmesg除錯Linux除錯
- 深入淺出:Linux裝置驅動之字元裝置驅動Linux字元
- 乾坤合一:Linux裝置驅動之塊裝置驅動Linux
- 蛻變成蝶:Linux裝置驅動之字元裝置驅動Linux字元
- 蛻變成蝶~Linux裝置驅動之字元裝置驅動Linux字元
- LED字元裝置驅動字元
- 驅動Driver-MISC雜項驅動裝置
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- 乾坤合一:Linux裝置驅動之USB主機和裝置驅動Linux
- 字元驅動裝置踩坑字元
- Linux塊裝置驅動Linux
- Linux核心程式設計(字元裝置檔案)(轉)Linux程式設計字元
- 【linux】驅動-7-平臺裝置驅動Linux
- Linux 核心驅動中對檔案的讀寫Linux
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- Windows裝置和驅動的安裝Windows
- 驅動除錯—還原 QQ 過濾驅動對關鍵核心設施所做的修改(Part II)除錯
- Windows驅動如何用INF檔案安裝Windows
- 給oracle新增裸裝置資料檔案(AIX單機)OracleAI
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- platform裝置驅動全透析 薦Platform
- Linux裝置驅動程式 (轉)Linux
- 05_雜項裝置驅動
- mtd裝置驅動(待學習)
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- win10如何刪除裝置和驅動器中的網盤_win10裝置和驅動器裡的百度網盤怎麼刪除Win10
- win10驅動未知裝置怎麼辦_win10裝置管理器驅動未知裝置處理方法Win10
- Linux裝置驅動探究第1天----spi驅動(1)Linux
- Linux核心程式設計(和裝置檔案對話)(轉)Linux程式設計
- linux 裝置驅動基本概念Linux
- iOS 裝置驅動 for windows 32&64iOSWindows