在你進行任何具體的程式設計前,你應該看看你自己源**目錄樹中 documentation / kbuild
中的幾篇文章,對你程式設計大有益處的。當然如果你不願意看,就湊合看我說的吧。:d
使用模組進行程式設計最大的好處就是可以和核心有個親密接觸,對於所有的核心變數和cpu
特權指令都可以在模組中使用,這裡的例子是根據<>
中的helloworld改寫的,功能包括current符號和%cr3暫存器的讀取,這些在ring3下都是
不可能的。
程式框架
**:#include
#include /*為了引用current而加入的標頭檔案*/
#include
module_license("gpl"); /*這行用於告訴核心該模組擁有free license,在2.6中這是必須的*/
/*執行真正的初始化工作*/
static int hello_init(void)
/*執行真正的析構工作*/
static void hello_exit(void)
/*該函式註冊模組的建構函式*/
module_init(hello_init);
/*該函式註冊模組的析構函式*/
module_exit(hello_exit);
編譯模組
值得說明的是,編譯模組的make file的檔名必須是makefile,而不能是makefile
makefile的**
**:ifneq ($(kernelrelease),)
obj-m := helloworld.o
else
kerneldir ?= /lib/modules/$(shell uname -r)/build
pwd := $(shell pwd)
default:
$(make) -c $(kerneldir) m=$(pwd) modules
endif
關於gnu make工具擴充套件的說明
只要在helloword.c所在目錄執行make就好了,在編譯完成後,用root身份輸入/sbin/init 3
進入text mode
測試輸入 in**od ./helloworld.ko 應該能看到三行資訊
輸入 rmmod ./helloworld.ko 看到goodbye...
至於2.6和2.4核心模組的區別,網上的文章很多,就不在多說了。另外,關於模組,還有一些
平台相關和版本依賴的問題。小弟我目前正在學習字元裝置的驅動程式,等有所心得的時候,
一起和大家分享。
linux2 6核心模組的編譯
首先將下面的程式寫進乙個hello1.c的檔案裡 vim hello1.c include linux module.h include linux kernel.h include linux init.h static int init lkp init void static void exi...
2 6核心編譯模組內容和解釋
1.code maturity level options 成熟等級。此處只有一項 prompt for development and or incomplete code drivers,如果你要試驗現在仍處於實驗階段的功能,比如khttpd ipv6等,就必須把該項選擇為y了 否則可以把它選擇...
核心模組的編譯
編譯核心模組的方法與編譯一般應用程式的方法略有不同.我們會發現在核心原始碼樹的層層目錄中,都存在有makefile.即這些makefile是分層次組織的.以往的核心版本中,編譯模組比較麻煩,需要我們對這些makefile做出許多更改.2.6的核心採用了 kbuild 編譯系統,簡化了這些問題.編譯之...