驅動學習日記1--linux內核模塊的簡單筆記

lsmod 命令可以獲得系統中加載了的所有模塊以及模塊間的依賴關係。


Linux內核模塊主要由以下幾個部分組成:

    (1)模塊加載函數(一般需要) 

            insmod 或 modprobe(這個命令更強大,會同時加載該模塊所依賴的其他模塊)

    (2)模塊卸載函數(一般需要)

            rmmod 或 modprobe -r filename 這兩個命令與上面對應相反。

    (3)模塊許可聲明(必須)

            GPL,Linux2.6內核模塊最常見的以  MODULE_LICENSE("Dual BSD/GPL")  語句聲明模塊採用BSD/GPL雙LICENSE。

    (4)模塊作者等其他聲明(可選)

     其他暫時忽略。。。


內核加載模塊:

    加載函數一般以__init標識聲明,eg.   static int __init initialization_function(void){.......}

    module_init(initialization_function);將這個函數註冊爲加載函數。

內核卸載模塊:

    卸載函數一般以__exit標識聲明,eg.   stati void __exit cleanup_function(void){.......}

    module_exit(cleanup_function);將這個函數註冊爲加載函數。


模塊的編譯 Makefile :


KVERS = $(shell uname -r)


#Kernel modules

obj-m +=hello.o



#Specify flag for the module complication.

#EXTRA_CFLAGS=-g  -O0


build: kernel_modules


kernel_modules:

[Tab]   make -C /lib/modules/$(KVERS)/build  M=$(CURDIR)  modules


[Tab]  make -C /lib/modules/$(KVERS)/build  M=$(CURDIR)  clean




Makefile文件與源代碼hello.o位於同一目錄,開啓其中的 EXTRA_CFLAGS=-g  -O0  可以得到包括調試信息的hello.ko模塊。運行make命令得到的模塊可直接在PC機上運行。

如果包括多個.c文件,則修改:

obj-m :=modulename.o

modulename-objs : file1.o  file2.o



得到我們編譯的內核模塊.ko文件放置在目標文件系統的相關目錄中。可用insmod 加載 ,如果要修改加載的模塊,只需要rmmod並insmod即可!













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章