1、Linux驅動的兩種運行方式
1.將驅動編譯進Linux內核中,當內核啟動就會自動運行驅動程序;2.將驅動編譯成模塊(.ko文件),在內核啟動以后使用“insmod”命令加載驅動模塊。
2、注冊模塊加載和卸載函數
module_init(xxx_init); //注冊模塊加載函數. xxx_init:需要注冊的具體函數 module_exit(xxx_exit); //注冊模塊卸載函數. xxx_exit:需要注冊的具體函數
當使用“insmod”命令加載驅動的時候,xxx_init會被調用;當使用“rmmod”命令加載驅動的時候,xxx_exit會被調用
3、添加LICENSE和作者信息
MODULE_LICENSE("GPL"); //LICENSE采用GPL協議 MODULE_AUTHOR("mk"); //添加作者信息
4、示例
/************************************************************* * @brief //TODO:驅動入口函數 *************************************************************/ static int __init led_init(void) { //驅動入口函數具體內容 return 0; } /************************************************************* * @brief //TODO:驅動出口函數 *************************************************************/ static void __exit led_exit(void) { //驅動出口函數具體內容 } module_init(led_init); module_init(led_exit); MODULE_LICENSE("GPL"); //LICENSE采用GPL協議 MODULE_AUTHOR("mk"); //添加作者信息
5、驅動模塊加載和卸載命令
加載驅動模塊的通常流程:
1.將.ko文件拷貝進/lib/module/4.1.15/kernel/driver/...目錄下
根據具體用途區別分為net、ide、scsi、usb、video、parport、md、block、ata等
2. 運行depmod -a,更新模塊依賴,主要是更新module.dep文件
3. 運行modprobe加載內核模塊
4.驅動記載成功以后會在/dev目錄下創建相應的節點文件xxx,輸入命令ls/dev/xxx -l可以查看節點信息。
4.1 insmod
insmod drv.ko //加載drv.ko模塊
insmod不能解決模塊的依賴關系
4.2 modprobe
modprobe會分析模塊的依賴關系,默認去/lib/modules/4.1.15目錄中查找模塊,然后會將所有的依賴模塊都加載到內核中。一般自己制作的根文件系統中不會有這個目錄,需要自己創建。
4.3 rmmod
卸載驅動模塊
4.4 modprobe -r
卸載驅動模塊所依賴的其他模塊
4.5 lsmod
列出內核已載入模塊的狀態