1、創建Linux驅動框架(裝載、卸載Linux驅動)框架
Linux內核在使用驅動時首先要裝載驅動,在裝載過程當中進行一些初始化動做(創建設備文件、分配內存等),在驅動程序中需提供相應函數來處理驅動初始化工做,該函數須使用module_init宏指定;Linux系統在退出是需卸載Linux驅動,卸載過程當中進行一些退出工做(刪除設備文件、釋放內存等),在驅動程序中需提供相應函數來處理退出工做,該函數須使用module_exit宏指定。Linux驅動程序通常都要這兩個宏指定這兩個函數,因此包含這兩個宏以及其所指定的兩個函數的C程序可看做是Linux驅動的框架。函數
2、註冊和註銷設備文件事件
任何Linux驅動都須要有一個設備文件來與應用程序進行交互。創建設備文件的工做通常在上一步module_init宏指定的函數中完成的,可使用misc_register函數建立設備文件;刪除設備文件的工做通常在上一步module_exit宏指定的函數中完成的,可使用misc_deregister函數刪除設備文件。內存
3、指定驅動相關信息回調函數
驅動程序是自描述的,驅動程序的信息須要在驅動源代碼中指定。經過MODULE_AUTHOR(做者姓名)、MODULE_LICENSE(使用的開源協議)、MODULE_ALIAS(別名)、MODULE_DESCRIPTION(驅動描述)等宏來指定與驅動相關的信息,這些宏通常寫在驅動源碼文件的結尾。可經過modinfo命令獲取這些信息。源碼
4、指定回調函數it
Linux驅動包含了不少動做,也稱爲事件,如「讀」「寫」事件,觸發相應事件時Linux系統會自動調用對於驅動程序的相應回調函數。一個驅動程序不必定要指定因此的回調函數。回調函數經過相關機制進行註冊。如與設備文件相關的回調函數使用misc_register函數註冊。編譯
5、編寫業務邏輯module
沒什麼可說的,總不能註冊一些空的回調函數,什麼也不作吧。file
6、編寫Makefile文件
Linux內核源碼的編譯規則是經過Makefile文件定義的,每一個Linux驅動程序必需要有一個Makefile文件。
7、編譯Linux驅動程序
Linux驅動程序可直接編譯進內核(使用obj-y編譯),也能夠做爲模塊單獨編譯(使用obj-m編譯)。
8、安裝和卸載Linux驅動
若是將驅動編譯進內核,只要Linux使用該內核,驅動程序就會自動裝載。若是Linux驅動程序以模塊單獨存在,須要使用insmod或modprobe命令裝載Linux驅動模塊,使用rmmod命令卸載該模塊。