linux下編寫驅動時有註冊裝置這一步,裝置註冊有兩種方法,一種是直接以平台的形式新增,平時都是用這種方式實現,另一種則是編譯成.c檔案,通過ko檔案新增進去,其實就是將以平台的方式新增的過程通過自己的**實現出來,如下是這兩種的實現過程:
1.以平台的形式新增:
a.新增裝置的結構體:
b.將裝置新增到裝置鍊錶中:
(2). 在kconfig中增加此裝置:
這裡要說一下,那個tristate也可以換成bool,這兩者的區別在於,用tristate,則在接下來的make menuconfig中進行選擇時1會多出乙個選擇項,具體我們稍後再說。
(3). 在make menuconfig中選擇此裝置:
可以看到,此時有hello選項,它前面的括號裡面是空的,表示未選中,
它有如下兩種選中方式:
"m"表示編譯成模組,"*"表示編譯進核心。
在(2)中,如果用tristate,則表示用兩種選擇,如果用bool,則只有*一種選擇,這就是這兩者的區別。
(4). 編譯核心:
編譯燒些後,可以通過ls /sys/devices/platform命令看到hello已經存在了,即已經hello裝置註冊成功了:
2.以平台的形式新增:
在新增裝置之前,我們先用 ls /sys/devices/platform看下,這裡面沒有hello:
接下來,開始寫程式,通過ko的方式載入進去,這裡的裝置名字是my_hello,如下是源**:
#include
#include
#include
static void hello_release(struct device *dev)
struct platform_device device_my_hello_ctl =
};static int hello_init(void)
static void hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
module_license("dual bsd/gpl");
module_author("kingyal");
接下來,編譯成ko檔案,載入到核心,並執行ko,再通過 ls /sys/devices/platform檢視:
如上所示,可看到my_hello的裝置,說明裝置註冊成功了。
以上就是兩種註冊方法,第二種其實是將第一種在核心的**給提取出來了,然後通過ko載入到核心。
Linux 驅動之字元裝置註冊
目的 給空模組新增驅動殼子 核心工作量 file operations及其元素填充 註冊驅動。腦海裡先有框架,知道自己要幹嘛 細節 不需要乙個字乙個字敲,可以到核心中去尋找參考 複製過來改 寫下的所有 必須心裡清楚明白,不能似懂非懂。先定義file operations結構體變數 自定義乙個file...
裝置註冊 驅動註冊以及雜項裝置註冊之間的關係
1.裝置宣告是在平台檔案 home leizi android itop4412 kernel 3.0 arch arm mach exynos mach itop4412.c中,如下圖,並且裝置名稱是led two.核心編譯之後,s3c device leds ctl被註冊到核心中,並不名稱是le...
安卓驅動裝置註冊
linux驅動註冊流程 驅動結構體填充完畢後,需要註冊到核心之中。其中有三種方法來註冊裝置驅動 1 動態註冊申請裝置號 cdev 註冊裝置驅動 在不知道裝置號的情況下,通過動態註冊驅動申請到的裝置號並存到dev t 型別中,通過cdev init將驅動結構體ops賦值給cdev ops,然後通過cd...