裝置註冊 驅動註冊以及雜項裝置註冊之間的關係

2021-07-29 00:21:22 字數 1355 閱讀 8921

1.裝置宣告是在平台檔案/home/leizi/android/itop4412_kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c中,如下圖,並且裝置名稱是led_two.

核心編譯之後,s3c_device_leds_ctl被註冊到核心中,並不名稱是led_two。目錄為/sys/bus/platform/devices,如下圖

2.開發板上電之後,執行led驅動程式時,以函式leds_init作為入口函式,執行platform_driver_register,其實參為struct platform_driver型別的結構體變數,該變數的成員之後.drvier的成員變數.name為驅動的名稱:leds。執行platform_driver_register時,核心會對platform_driver 中的 name 變數的值和已註冊的所有 platform_device 中的 name 變數的值進行比較,只有找到具有相同名稱的 platform_device 才能註冊成功。只有註冊成功,才能只能probe函式。

由於platform_device 中的 name 變數的值為led_two,與platform_driver 中的 name 變數的值不同,因此驅動沒能註冊成功。雖然沒有註冊成功,但是核心虛擬平台匯流排中由於名稱為leds的驅動,如下圖。

由於沒有註冊成功,因此在/dev目錄下,沒有希望註冊的裝置。如果想在/dev目錄下註冊裝置,則需要platform_device的成員變數name值與platform_driver成員變數name值相同,即修改/home/leizi/android/itop4412_kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c檔案下的platform_device或者修改/home/leizi/android/itop4412_kernel_3.0/drivers/char/itop4412_leds.c中的platform_driver即可。此處修改/home/leizi/android/itop4412_kernel_3.0/drivers/char/

itop4412_leds.c

3.由於修改之後,platform_driver 中的 name 變數的值和已註冊的所有 platform_device 中的 name 變數的值相同,則裝置的驅動註冊成功,從而執行platform_driver的成員函式probe,在probe函式實體中執行雜項裝置註冊函式misc_deregister,其實參為static struct miscdevice型別的結構體變數,變數成員之一name為led,核心載入成功後,在/dev目錄下生成新註冊的裝置,其名稱為led,如下圖

並且在/proc/misc檔案中,也有新註冊的雜項裝置的註冊號以及名稱,如下圖

4由此可見,裝置想要註冊到核心中,首先平台檔案的裝置名稱必須與驅動名稱相同。

安卓驅動裝置註冊

linux驅動註冊流程 驅動結構體填充完畢後,需要註冊到核心之中。其中有三種方法來註冊裝置驅動 1 動態註冊申請裝置號 cdev 註冊裝置驅動 在不知道裝置號的情況下,通過動態註冊驅動申請到的裝置號並存到dev t 型別中,通過cdev init將驅動結構體ops賦值給cdev ops,然後通過cd...

Linux 驅動之字元裝置註冊

目的 給空模組新增驅動殼子 核心工作量 file operations及其元素填充 註冊驅動。腦海裡先有框架,知道自己要幹嘛 細節 不需要乙個字乙個字敲,可以到核心中去尋找參考 複製過來改 寫下的所有 必須心裡清楚明白,不能似懂非懂。先定義file operations結構體變數 自定義乙個file...

linux驅動程式設計之裝置註冊

linux下編寫驅動時有註冊裝置這一步,裝置註冊有兩種方法,一種是直接以平台的形式新增,平時都是用這種方式實現,另一種則是編譯成.c檔案,通過ko檔案新增進去,其實就是將以平台的方式新增的過程通過自己的 實現出來,如下是這兩種的實現過程 1.以平台的形式新增 a.新增裝置的結構體 b.將裝置新增到裝...