Linux 核心 編譯模組

2022-02-18 11:37:56 字數 1532 閱讀 3346

由於除錯核心或者由於分割槽大小限制,有時候核心元件不一定完全需要編進核心中。

所以,在開發中經常將核心元件編譯成為模組,等到在恰當的時機載入。

linux核心模組的編譯方法有兩種:

1.放入linux核心原始碼中編譯。

2.獨立編譯模組。

首先需要了解kconfig和makefile的作用

kconfig:對應核心模組的配置選單。

makefile:對應核心模組的編譯選項。

linux核心編譯過程:根據配置裁剪的結果配合makefile完成核心編譯。

以arm平台為例,具體配置過程:

1.當執行make menuconfig 時,系統首先讀取arch/arm/kconfig生成整個配置介面

2.在讀取配置介面的同時,系統會讀取頂層目錄下的.config檔案,生成所有配置選項的預設值

3.當修改玩配置並儲存後,系統會更新頂層目錄下的.config

4.當執行make時,各層的makefile會根據.config檔案中的編譯選項來決定哪些檔案會被編譯到核心中,或者編譯成模組。

新增到核心的步驟這裡省去:《簡單新增自己的驅動程式到linux核心樹中》

在核心配置頁中,將元件配置成m模組以後,可以參考使用以下命令。(下劃線部分根據實際情況增減)

make arch=arm cross_compile=arm-hisiv500-linux- modules
之後,便可以在列印資訊中找到模組所在路徑,拷貝出來即可。

例如

ld [m] drivers/media/usb/gspca/gspca_main.ko

ld [m] fs/exfat/exfat.ko

1.根據核心模組編寫規則,編寫好有關的模組。

2.新建makefile,參考以下內容(根據實際情況進行修改,注意tab對齊)

# 最終的模組名

obj-m += led_drv.o

# 核心原始碼所在根目錄

kerneldir:=/home/schips/linux3.18/

# 指定的編譯工具鏈

cross_compile:=/usr/local/cross/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-

# 以下內容一般不做修改

pwd:=$(shell pwd)

default:

$(make) arch=arm cross_compile=$(cross_compile) -c $(kerneldir) m=$(pwd) modules

clean:

rm -rf *.o *.order .*.cmd *.ko *.mod.c *.symvers *.tmp_versions

3.make 即可。

這裡是linux移植exfat驅動的例項:《linux 核心新增exfat驅動》

Linux核心模組編譯

data mining linux核心模組是一種可被動態載入和解除安裝的可執行程式。通過核心模組可以擴充套件核心功能,核心模組通常用於裝置驅動 檔案系統等。如果沒有核心模組,需要向核心新增功能就需要自發 重新編譯核心 安裝新核心等步驟。核心空間中不止乙個程式試圖訪問驅動程式模組,導致乙個核心塊在沒有...

Linux編譯核心模組

核心模組即驅動的編譯方式 1 本地編譯 2 交叉編譯 makefile主要寫法 本地編譯 obj m hello.o kdir lib modules shell uname r build pwd shell pwd all make c kdir m pwd modules clean rm o...

linux核心模組編譯

1 makefile編寫 ifneq kernelrelease obj m mytest.o mytest objs file1.o file2.o file3.o else kdir lib modules shell uname r build pwd shell pwd default ma...