1. 程式人生 > >編寫linux驅動程式步驟

編寫linux驅動程式步驟

一、建立Linux驅動框架(裝載、解除安裝Linux驅動)

    Linux核心在使用驅動時首先要裝載驅動,在裝載過程中進行一些初始化動作(建立裝置檔案、分配記憶體等),在驅動程式中需提供相應函式來處理驅動初始化工作,該函式須使用module_init巨集指定;Linux系統在退出是需解除安裝Linux驅動,解除安裝過程中進行一些退出工作(刪除裝置檔案、釋放記憶體等),在驅動程式中需提供相應函式來處理退出工作,該函式須使用module_exit巨集指定。Linux驅動程式一般都要這兩個巨集指定這兩個函式,所以包含這兩個巨集以及其所指定的兩個函式的C程式可看作是Linux驅動的框架。

二、註冊和登出裝置檔案

    任何Linux驅動都需要有一個裝置檔案來與應用程式進行互動。建立裝置檔案的工作一般在上一步module_init巨集指定的函式中完成的,可以使用misc_register函式建立裝置檔案;刪除裝置檔案的工作一般在上一步module_exit巨集指定的函式中完成的,可以使用misc_deregister函式刪除裝置檔案。

三、指定驅動相關資訊

    驅動程式是自描述的,驅動程式的資訊需要在驅動原始碼中指定。通過MODULE_AUTHOR(作者姓名)、MODULE_LICENSE(使用的開源協議)、MODULE_ALIAS(別名)、MODULE_DESCRIPTION(驅動描述)等巨集來指定與驅動相關的資訊,這些巨集一般寫在驅動原始碼檔案的結尾。可通過modinfo命令獲取這些資訊。

四、指定回撥函式

    Linux驅動包含了很多動作,也稱為事件,如“讀”“寫”事件,觸發相應事件時Linux系統會自動呼叫對於驅動程式的相應回撥函式。一個驅動程式不一定要指定所以的回撥函式。回撥函式通過相關機制進行註冊。如與裝置檔案相關的回撥函式使用misc_register函式註冊。

五、編寫業務邏輯

    沒什麼可說的,總不能註冊一些空的回撥函式,什麼也不做吧。

六、編寫Makefile檔案

    Linux核心原始碼的編譯規則是通過Makefile檔案定義的,每個Linux驅動程式必須要有一個Makefile檔案。

七、編譯Linux驅動程式

    Linux驅動程式可直接編譯進核心(使用obj-y編譯),也可以作為模組單獨編譯(使用obj-m編譯)。

八、安裝和解除安裝Linux驅動

    如果將驅動編譯進核心,只要Linux使用該核心,驅動程式就會自動裝載。如果Linux驅動程式以模組單獨存在,需要使用insmod或modprobe命令裝載Linux驅動模組,使用rmmod命令解除安裝該模組。