您的位置:首页 > 其它

关于Kernel编译配置文件 - makefile .config Kconfig

2015-11-06 20:00 393 查看

关于Kernel编译配置文件 - makefile .config Kconfig

make config(传统界面), make menuconfig(图形菜单界面)会得到.config在顶层Makefile。确定哪些被编译到内核。

makefile中obj-y 选项会编译进内核。obj-m表示编译成模块。obj-n表示不编译进内核。

除了obj-形式的目标以外,还有lib-y library库,hostprogs-y 主机程序等目标,但是基本都应用在特定的目录和场合下。

形如 obj-$(CONFIG_AUDIT) += tty_audit.o,用变量控制编译方式。而此处的变量是通过.config文件采集的。

.config 虽然可以用autocof来生成,makefile可以用automake制作。但是缺乏灵活度。

Kconfig.出现。
$ make menuconfig
会通过菜单的选项来修改各级.config文件,而菜单的读取通过Kconfig文件表现。所以想要添加自己的一个模块可以在相应的位置更改Kconfig,添加一个选项。而config 之后的名称就是在makefile中的变量名。

所以要增加自己的源码编译进内核:

拷贝源码到相应目录

在Kconfig中增加选项

在makefile中增加相应变量控制编译的条目

config S3C2410_RTC
bool "S3C2410 RTC DRIVER" //在选项中的条目,只能有选或者不选
depends on ARCH_S3C2410   //只有在ARCH_S3C2410配置后才有此选项
help
RTC(...)  .....


除了bool还有 tristate有三种编译状态。

kbuild Makefile 语法

目标定义

obj-$(CONFIG_AUDIT) += tty_audit.o

多文件模块定义

采用两种方式

moduleName -y

#method-1

obj-$(MY_MODULE) += mymou.o
mymou-y := balloc.o bitmap.o
mymou-$(CONFIG_FA_CATTR) += xattr.o #如果是y,mymou.o将会被链接到built-in.o最终进入内核。


moduleName -objs

#method-2

obj-$(MY_MODULE) += mymou.o
mymou-objs := a.o b.o c.o


目录层次嵌套

Kconfig脚本语法

config SETMYMODULE
bool "Set my module"
depends on MODULES
help
Usually, ...


config 添加新选项

类型包括bool tristate string hex int

还可以用prompt加入脚本。还可定义菜单等menu + endmenu。

增加一个驱动的实例

1.在内核中增加目录/drivers/test

/test(/cpu(cpu.c), test.c, test_queue.c)

2 为新增目录配置Kconfig和Makefile

2.1 新文件夹对应的菜单Kconfig编写

menu "TEST Driver"
comment "my TEST DRIVER"

config CONFIG_TEST
bool "TEST support"

config CONFIG_TEST_USER
tristate "TEST user-space interface"
depends on CONFIG_TEST  //如果之前被配置为y才进一步显示

endmenu


2.2 引入Kconfig

为了这个Kconfig能够起作用,在相应的架构下面的Kconfig中增加source

如:arch/arm/Kconfig中增加source “drivers/test/Kconfig”

2.3 test目录的Makefile编写

obj-$(CONFIG_TEST) += test.o test_queue.o
obj-$(CONFIG_TEST_USER)

obj-$(CONFI_TEST_CPU) += cpu/


2.4 在包含的子目录加入Makefile

obj-$(CONFIG_TEST_CPU) += cpu.o


2.5 修改父目录makefile

为了让test目录的编译命令能作用到,要包含文件夹。给test父目录,增加Makefile代码。

#drivers/Makefile 中
obj-$(CONFIG_TEST) += test/


source: 《Linux设备驱动开发详解》(第二版),内容为读书笔记和网络资料,有些资料原始来源不详,分享为了方便自己和他人查阅。如有侵权请及时告知,对于带来的不便非常抱歉。转载请注明来源。Terrence Zhou.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kernel 编译