由於除錯核心或者由於分割槽大小限制,有時候核心元件不一定完全需要編進核心中。
所以,在開發中經常將核心元件編譯成為模組,等到在恰當的時機載入。
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
之後,便可以在列印資訊中找到模組所在路徑,拷貝出來即可。
例如1.根據核心模組編寫規則,編寫好有關的模組。ld [m] drivers/media/usb/gspca/gspca_main.ko
ld [m] fs/exfat/exfat.ko
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...