歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 寫linux驅動程序的步驟

寫linux驅動程序的步驟

日期:2017/3/3 11:32:39   编辑:Linux技術

第一步:建立Linux驅動的骨架

linux內核使用驅動時候,需要先初始化,包括建立設備文件,分配內存地址空間等,退出的時候要釋放資源,刪除設備文件,釋放內存地址空間等。所以在linux驅動中需要提供兩個函數來分別處理驅動初始化和退出的工作,這兩個函數分別用module_init和module_exit宏來指定,linux驅動一般都需要指定這兩個函數,所以linux驅動有一個C文件,文件中包含處理驅動初始化和退出的函數,以及指定這兩個函數的module_init和module_exit宏.

第二步:注冊和注銷設備文件

任何一個驅動都有設備文件,misc_register,misc_deregister

第三步:指定與驅動相關的信息

驅動程序帶自描述內容,比如用modinfo可以獲取包括作者名稱,版本號等等,有MODULE_AUTHOR,MODULE_LICENSE,MODULE_ALIAS,MODULE_DESCRIPTION等宏

第四步:指定回調函數

linux驅動的各個動作也可稱為事件,這些時間就有相應的回調函數,

第五步:編寫功能邏輯

編寫程序,來實現該驅動所要求達到的功能,可以由多個函數/多個文件/甚至多個模塊組成

第六步:編寫Makefile

一個新的驅動程序必須要有一個Makefile,obj-m表示將驅動作為模塊編譯,obj-y則表示將驅動編譯進內核,

echo 'obj-m := led.o' > Makefile

上句表示新建一個Makefile文件,文件中只有一個話:obj-m := led.o

該句表示用make指令編譯時,會將源代碼目錄中的led.c或led.s文件編譯成led.o文件,並且led.o會被編譯進led.ko文件,然後使用insmod或modprobe命令來裝載led.ko.如果使用的不是obj-m,而是obj-y,則led.o將會被編譯進build-in.o,最終被連接進內核。build-in.o是連接同一類程序的.o文件生產的中間目標文件。make menuconfig可以配置是否最終編譯進內核。

如果驅動依賴其他程序,如process.c,data.c,則Makefile需要按如下寫:

obj-m := led.o

led-y := process.o data.o

依賴文件由module-y或module-objs決定,module就是指led。

第七步:編譯驅動程序

可以直接將驅動編譯進內核,也可以作為模塊單獨編譯

第八步:安裝/卸載驅動

將驅動編譯進內核,則只要linux使用該內核,則驅動將自動加載。如果不編譯進內核,而是以模塊存在,在需要使用insmod或modprobe命令來裝載驅動模塊,用rmmod命令來卸載驅動模塊。

Copyright © Linux教程網 All Rights Reserved