关于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.
相关文章推荐
- 神器SystemTap
- Aut2Exe编译au3脚本为可执行文件
- CentOS 6.3下编译安装Ruby 2.0笔记
- 把Lua编译进nginx步骤方法
- Lua中编译执行代码相关的函数详解
- Chrome Visual Studio 2005下的编译过程
- Windows下使用Cygwin编译MySQL客户端
- android的编译和运行过程深入分析
- c#中xml文档注释编译dll引用到其它项目示例
- Lua cjson模块编译笔记及错误解决方法
- SQLSERVER编译与重编译发生场景及重用的利弊介绍
- 浅析使用Turck-mmcache编译来加速、优化PHP代码
- 如何编译libfreetype方法详解
- 深入理解C语言中编译相关的常见错误
- 在VS2008中编译MYSQL5.1.48的方法
- Nginx编译参数大全 configure参数中文详解
- centos下编译安装mysql报错解决方案
- Lua的编译、执行和调试技术介绍
- C/C++编译器GCC下的常用编译命令总结
- Mac下使用Eclipse编译C/C++文件出现 launch failed, binary not found 解决方案