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/