背景
向内核添加定制功能时,我们需要修改Kconfig和Makefile。现在最新方式是bazel,语法有点像json,看起来更方便。
Kconfig :添加 新驱动 内核配置菜单。这样就有途径选择我们的驱动。
Makefile:编译 新驱动。此Makefile位置是 驱动所在目录。
总体描述:在内核配置make menuconfig时,从Kconfig中读取配置菜单,用户配置完成后保存到.config(在顶层目录下生成)中。在内核编译时,主Makefile调用这个.config,就知道了用户对内核的配置情况。
步骤
- Kconfig文件,添加配置菜单
- Makefile文件,编译 新驱动代码
- 通过make menuconfig或直接修改.config文件来使能这个配置项
步骤详解
1. Kconfig文件,添加配置菜单
格式:
config symbol
options
解释:
symbol就是新的菜单项,options是这个新菜单项下的属性和选项。每个config菜单项都要有类型定义。bool:布尔类型,tristate三态:内建、模块、移除,string:字符串,hex:十六进制,integer:整型
bool:可取y、n tristate:可取y、n、m
举例:
config HELLO_MODULE
tristate “hello test module”
depends on ARCH_PXA
help
this is help description
tristate类型的菜单,假如选择编译成内核模块,则会在.config中生成一个CONFIG_HELLO_MODULE=m的配置
hello test module运行make menuconfig时,会出现hello test module选项。假如选择了此选项,该选项就会保存在.config文档中。当编译内核时,就会读取.config文档,当发现hello test module选项为y或者m时,系统在调用Makefile时,会将Makefile描述的驱动编到内核或者编成ko文件。
depends on表明,HELLO_MODULE这个菜单项,只对XScale处理器有效,即只有选择了ARCH_PXA后,该菜单才能可见(可配置)
help一些帮助性描述
2. Makefile文件,编译新驱动
格式:
obj-$(CONFIG_symbol) += xxxxmodule/
解释:
这里的symbol就是Kconfig的配置中,config关键字后面的symbol。比如上面的例子symbol是HELLO_MODULE。就会在.config中生成的变量,CONFIG_HELLO_MODULE=m
举例:
obj-$(CONFIG_HELLO_MODULE) += hellomodule/
CONFIG_HELLO_MODULE变量的值,就是.config中生成的。hellomodule目录就是驱动源码目录,源码位置和此Makefile同一层