2 6核心模組的編寫框架和編譯方法

2021-04-06 19:35:42 字數 1318 閱讀 1376

在你進行任何具體的程式設計前,你應該看看你自己源**目錄樹中 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 編譯系統,簡化了這些問題.編譯之...