// 在Linux核心中增加程式需要完成以下3項工作
1.原始碼複製到Linux相應目錄下
2.在目錄的Kconfig檔案中增加新原始碼對應項目的編譯選項
3.在目錄的Makefile檔案中增加對新原始碼的編譯條目
以下以LED驅動為例說明:
1.將led.c原始碼複製到核心\drivers\char目錄
2.在目錄的Kconfig檔案中添加LED的編譯配置選項
config LED
bool "LED driver"
depends on ARCH_S3C6410
help
LED driver for the samsung s3c6410
上述Kconfig檔案意味著只有在ARCH_S3C6410項目被配置的情況下,才會出現LED設定項目,這個項目為布爾型(要麼編譯入核心,要麼不編譯,選項為Y或N)菜單上顯示的字串為“LED driver”,help後面的內容為協助資訊。
對核心進行配置是為了得到核心設定檔.config。通過對核心進行配置,可以使未來編譯成功的核心增加或減少對一些核心特性的支援。對核心進行配置有多種方法,有基於文本的配置方式也有基於圖形的使用者介面。下面採用使用比較廣泛的make menuconfig方式:
sudo apt-get install libncurses5-dev
sudo make menuconfig
除了布爾型的設定項目外,還存在三態型(tristate)配置選項,它意味著要麼編譯入核心,要麼編譯為核心模組,要麼不編譯,選項為Y、M或N。
在目錄的Makefile中關於LED的編譯指令碼為:
obj-$(CONFIG_LED) += led.o
上述指令碼意味著如果LED配置選項被選擇為Y或N,即obj-$(CONFIG_LED)等同於obj-y或obj-n。
此時確保核心目錄已經make zImage過了,一次即可,在make modules,即可編譯模組代碼。
編譯核心包含兩部分的工作,其一是編譯核心,即編譯配置選項中標記為Y的那部分,這部分核心最終形成bzIamge鏡像檔案;其二是編譯核心模組,即編譯配置選項中標記為M的那部分核心,這部分形成以.ko結尾的核心模組目標檔案。
上述兩部分編譯工作可以依次通過make bzImage和make modules完成,也可以通過一條make命令直接完成。編譯核心的整個過程比較漫長,因此可以對make加-j參數來提高編譯的效率。在make時使用該選項會為編譯過程分配n個並發任務,這樣可以縮短編譯時間。n的取值為cpu個數的二倍。
sudo make -j4
------------------------------------------------------------------------------------------------------------------
作者:龐輝
出處:http://www.cnblogs.com/pang123hui/
本文基於署名 2.5 中國大陸許可協議發布,歡迎轉載,演繹或用於商業目的,但是必須保留本文的署名龐輝(包含連結).