編譯核心模組的方法與編譯一般應用程式的方法略有不同. 我們會發現在核心原始碼樹的層層目錄中, 都存在有makefile. 即這些makefile是分層次組織的. 以往的核心版本中, 編譯模組比較麻煩, 需要我們對這些makefile做出許多更改. 2.6的核心採用了"kbuild"編譯系統, 簡化了這些問題. 編譯之前, 肯定是需要原始檔的. 這些原始檔可以放在核心原始碼樹中, 也可以放在核心原始碼樹之外的任何地方. 根據原始檔存在的目錄, 存在兩種編譯方法: 在原始碼樹之中和在原始碼樹之外.
原始碼樹中編譯
官方核心模組的源**都是按模組(驅動
)型別組織的
, 我們到核心原始碼樹的
drivers
目錄可以看到
char, usb, block
之類的子目錄
.不新建子目錄:
(1)先在核心原始碼樹中的
drivers
目錄編輯乙個
c源程式
, 名為
hello.c.(2
)修改drivers
目錄的makefile
檔案,
新增: obj-m += hello.o(3
)重新編譯核心
(回到原始碼樹根目錄
, 執行
$ sudo make
).新建子目錄:
如果原始檔比較多
, 可以在
drivers
目錄中新建子目錄
. 還是以
hello, world為例:
(1)
在核心原始碼樹的
drivers
目錄中新建乙個
hello
子目錄,
並將hello.c
放在hello
目錄中.
(2)
修改drivers
目錄的makefile
檔案,
新增: obj-m += hello/
(3)
在hello
目錄中新建乙個
makefile
檔案,
內容為: obj-m += hello.o
(4)
重新編譯核心
(回到原始碼樹根目錄
, 執行
$ sudo make
).這樣
, 新生成的模組檔案就位於
hello
目錄中.
原始碼樹外編譯
(1)首先在模組**所在的目錄新建乙個
makefile,
內容為:
obj-m := hello.o
(2)這樣呼叫
make命令:
$ sudo make -c /usr/local/src/kernel/linux-2.37.6 subdirs=$pwd modules
簡化命令列輸入
obj-m := hello.o
kerneldir ?= /lib/modules/$(shell uname -r)/build
pwd := $(shell pwd)
default:
$(make) -c $(kerneldir) m=$(pwd) modules
clean:
$(make) -c $(kerneldir) m=$(pwd) clean
這樣不用在
makefile
中一次又一次地指定核心**樹的目錄,只需在原始碼樹所在路徑中輸入sudo make進行編譯。
核心編譯 模組編譯
目前是嵌入式 linux 的初學者感覺有所體會 1.從demo 學起 tiny 6410 上的開發,我的任務不斷是新增小模組。交叉編譯器,以及其它一系列 tool chains 可直使用產商提供的工具。避免過多細節的好處在於,你可以從整體處著手你從書本學到的理論知識。2.kernel 編譯其它很簡單...
核心模組編譯
第一步,編寫模組 include include module license gpl 許可許可權證明,gpl開源的協議 module author embedsky 作者 module description hello world module 描述 static int hello init ...
Linux核心模組編譯
data mining linux核心模組是一種可被動態載入和解除安裝的可執行程式。通過核心模組可以擴充套件核心功能,核心模組通常用於裝置驅動 檔案系統等。如果沒有核心模組,需要向核心新增功能就需要自發 重新編譯核心 安裝新核心等步驟。核心空間中不止乙個程式試圖訪問驅動程式模組,導致乙個核心塊在沒有...