Kconfig 是make menuconfig 的主要文件.(相關語法不作討論).在Kconfig 裏面加入選項後,在menuconfig 選擇後就可以在內核的根目錄的隱藏文件.config裏面看到.頂層的Makefile文件讀取 .config文件的內容,並總體上負責build內核和模塊。
假設想把自己寫的一個flash的驅動程序加載到工程中,而且能夠通過menuconfig配置內核時選擇該驅動該怎麼辦呢?可以分三步:
第一:將你寫的flashtest.c 文件添加到/driver/mtd/maps/ 目錄下。
第二:修改/driver/mtd/maps目錄下的kconfig文件:
config MTD_flashtest
tristate “ap71 flash"
這樣當make menuconfig時 ,將會出現 ap71 flash選項。
第三:修改該目錄下makefile文件。
添加如下內容:obj-$(CONFIG_MTD_flashtest) += flashtest.o
這樣,當你運行make menucofnig時,你將發現ap71 flash選項,如果你選擇了此項。該選擇就會保存在.config文件中。當你編譯內核時,將會讀取.config文件,當發現ap71 flash 選項爲yes 時,系統在調用/driver/mtd/maps/下的makefile時,將會把 flashtest.o 加入到內核中。即可達到你的目的
所以也有很多makefile文件這樣寫:
obj-y += flashtest.o
這樣就不用根據.config文件裏面的配置了,直接是選擇.
在將驅動放在內核外的文件夾,不用編譯進內核,直接
KERNELDIR = ~/eLDK/kernel/src
PWD := $(shell pwd)
obj-m := m1-ts.o
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
cp m1-ts.ko ~/eLDK/workspace/lRootFS/drv/
而在/home/cai/eLDK/kernel/src/arch/arm/mach-softwinner中makefile:
obj-y += ../../../../../drivers/system/