核心模組 Makefile

2021-06-27 20:00:19 字數 865 閱讀 5153

寫乙個核心模組的makefile模板記錄:

ifneq ($(kernelrelease),)

obj-m:=abc.o

else

kdir:=/lib/modules/$(shell uname -r)/build

pwd=$(shell pwd)

all:

make -c $(kdir)  m=$(pwd) modules

clean:

-rm *.o* *.s*  *.m*

endif

那麼你編譯的模組怎麼就能在核心中執行呢?

原理是這樣的:

1.執行make,因為kernelrelease沒有定義,會跳轉到 $(kdir)也就是核心原始碼目錄。(make -c $(kdir) 就是跳轉到 $(kdir) )

2.執行主目錄makefile設定相關變數,其中就有kernelrelease,當然還有其他和核心相關的設定,然後編譯乙個指定的模組。而這個模組的路徑是通過m=$(pwd)指定,也就是當前目錄。

3.然後跳到這這個模組的目錄執行他的makefile,(又一次執行此makefile)此時kernelrelease已經定義,那就是執行:obj-m:=abc.o。這和核心**裡的模組makefile是一樣的。指定了以模組形式編譯。

4.最後編譯這個模組adc.ko

另外,如果模組有好幾個c檔案,那麼

需要將obj-m = abc.o換成如下**:

obj-m = mn.o

mn-objs = m.o, n.o

核心模組Makefile

前些天寫乙個驅動模組。竟然寫核心模組makefile時出了問題,於是將其總結下來,下次再用時拿過來改下就行了。general purpose makefile for linux kernel module by guoqingbo kern dir home gqb development lin...

核心模組Makefile

ifneq kernelrelease obj m hello.o else kdir lib modules shell uname r build pwd shell pwd all make c kdir m pwd modules clean make c kdir m pwd clean ...

核心模組載入錯誤 Makefile

載入核心模組錯誤 insmod error inserting globalvar.ko 1 device or resource busy 問題描述 裝置號跟已有的裝置衝突了 解決方法 檢視已有裝置號 cat proc devices 修正在程式中設定的裝置號,或者改為自動分配 錯誤2 insmo...