給核心裝置驅動增加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核心有時會定義一些新的巨集替換老的方法,這也是練習提交補丁的好機會。
相關文章
- gdb除錯嵌入式裝置的core檔案除錯
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- 作業系統——裝置驅動和檔案系統作業系統
- linux核心原始碼閱讀-塊裝置驅動Linux原始碼
- 裝置驅動程式包可以刪除嗎 win10裝置驅動程式包能刪嗎Win10
- Linux核心模組驅動載入與dmesg除錯Linux除錯
- LED字元裝置驅動字元
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- 驅動Driver-MISC雜項驅動裝置
- 【linux】驅動-7-平臺裝置驅動Linux
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- Linux裝置驅動開發詳解:基於Linux4.0核心Linux
- platform 裝置驅動實驗Platform
- 字元驅動裝置踩坑字元
- 驅動除錯—還原 QQ 過濾驅動對關鍵核心設施所做的修改(Part II)除錯
- Windows驅動如何用INF檔案安裝Windows
- 【linux】驅動-6-匯流排-裝置-驅動Linux
- gdb除錯coredump檔案除錯
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- 遠端除錯 Android 裝置網頁除錯Android網頁
- win10如何刪除裝置和驅動器中的網盤_win10裝置和驅動器裡的百度網盤怎麼刪除Win10
- 05_雜項裝置驅動
- mtd裝置驅動(待學習)
- linux 裝置驅動基本概念Linux
- win10驅動未知裝置怎麼辦_win10裝置管理器驅動未知裝置處理方法Win10
- pci匯流排驅動及pci裝置驅動註冊
- Android Studio怎麼遠端除錯裝置?Android除錯
- 驅動除錯——挫敗 QQ.EXE 的核心模式保護機制(part I)除錯模式
- 沒有真實串列埠裝置時使用"虛擬串列埠驅動"除錯你的串列埠程式碼串列埠除錯
- 非同步通知和MISC裝置驅動非同步
- iOS 裝置驅動 for windows 32&64iOSWindows
- linux裝置驅動編寫入門Linux
- 無作業系統時的裝置驅動和有作業系統時的裝置驅動作業系統
- 使用 udev 高效、動態地管理 Linux 裝置檔案devLinux
- 使用udev高效、動態的管理Linux裝置檔案devLinux
- Windows版iCloud增加密碼生成功能,可共享iCloud驅動器檔案WindowsCloud加密密碼
- 真機除錯裝置不夠?華為AGConnect雲除錯幫你忙除錯GC
- linux-中塊裝置檔案和字元裝置檔案的本質區別Linux字元
- platform_driver驅動及裝置驅動匹配識別符號Platform符號