核心模組的編譯

2021-06-12 02:24:12 字數 1731 閱讀 9104

編譯核心模組的方法與編譯一般應用程式的方法略有不同. 我們會發現在核心原始碼樹的層層目錄中, 都存在有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核心模組是一種可被動態載入和解除安裝的可執行程式。通過核心模組可以擴充套件核心功能,核心模組通常用於裝置驅動 檔案系統等。如果沒有核心模組,需要向核心新增功能就需要自發 重新編譯核心 安裝新核心等步驟。核心空間中不止乙個程式試圖訪問驅動程式模組,導致乙個核心塊在沒有...