Linux驅動學習(編寫一個最簡單的模塊)


在Linux中想做驅動開發,那么一定要先熟悉module的使用和編寫

一、什么是module

從名字上看就是模塊的意思,我個人的理解就是一個一個的小程序,可以進行動態的安裝和卸載,而在這里面就實現一些功能,其中驅動就是在module中。

 

二、編寫一個最簡單的module

編寫一個最簡單的module只需要兩個文件即可:Makefile和xxx.c

(1)Makefile

 1 #ubuntu的內核源碼樹,如果要編譯在ubuntu中安裝的模塊就打開這2個
 2 #KERN_VER = $(shell uname -r)
 3 #KERN_DIR = /lib/modules/$(KERN_VER)/build    
 4 
 5         
 6 #開發板的linux內核的源碼樹目錄
 7 KERN_DIR = /root/3288_5.1/kernel 
 8 
 9 obj-m    += module_test.o
10 
11 all:
12     make -C $(KERN_DIR) M=`pwd` modules 
13 
14 .PHONY: clean    
15 clean:
16     make -C $(KERN_DIR) M=`pwd` modules clean

在上面的Makefile中,最核心的一句就是make -C $(KERN_DIR) M=`pwd` modules

這句話的意思就是進入到kernel的源碼目錄中,使用內核源碼中的編譯規格來進行編譯這個模塊。

其目的主要是為了將module和kernel保持一致,在加載module時就不會出錯。

 

(2)module_test.c

 1 #include <linux/module.h>        // module_init  module_exit
 2 #include <linux/init.h>            // __init   __exit
 3 
 4 // 模塊安裝函數
 5 static int __init chrdev_init(void)
 6 {    
 7     printk(KERN_INFO "chrdev_init helloworld init\n");
 8 
 9     return 0;
10 }
11 
12 // 模塊卸載函數
13 static void __exit chrdev_exit(void)
14 {
15     printk(KERN_INFO "chrdev_exit helloworld exit\n");
16 }
17 
18 module_init(chrdev_init);
19 module_exit(chrdev_exit);
20 
21 // MODULE_xxx這種宏作用是用來添加模塊描述信息
22 MODULE_LICENSE("GPL");                // 描述模塊的許可證
23 MODULE_AUTHOR("xuan");                // 描述模塊的作者
24 MODULE_DESCRIPTION("module test");    // 描述模塊的介紹信息
25 MODULE_ALIAS("alias xxx");            // 描述模塊的別名信息

 

(3)編譯和安裝module

進入到代碼的文件夾中,輸入:make

然后,將生成的.ko文件放到平台中,輸入:insmod  xxx.ko

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM