Linux 內核 編譯模塊


背景:

由於調試內核或者由於分區大小限制,有時候內核組件不一定完全需要編進內核中。
所以,在開發中經常將內核組件編譯成為模塊,等到在恰當的時機加載。

概覽:

Linux內核模塊的編譯方法有兩種:

1.放入linux內核源碼中編譯。
2.獨立編譯模塊。

放入Linux內核源碼中編譯:

首先需要了解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驅動


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM