大家好,又见面了,我是你们的朋友全栈君。
|–linux内核中Makefile,Kconfig,.config的关系
(1)三者的作用
简单来说就是去饭店点菜:Kconfig是菜单,Makefile是做法,.config就是你点的菜
Makefile:一个文本形式的文件,编译源文件的方法。
Kconfig:一个文本形式的文件,内核的配置菜单。
.config:编译所依据的配置。
(2)三者的语法
|–Makefile
目标定义:目标定义就是用来定义哪些内容要做为模块编译,哪些要编译链接进内核。
直接编译:
obj-y = hello.o
表示要由hello.c或者hello.s文件编译得到hello.o并链接进内核
而更常见的做法是根据.config文件的CONFIG_ 变量来决定文件的编译方式 :
条件编译:
obj-$(CONFIG_HELLO) = hello.o
obj-m则表示该文件要作为模块编译。
除了y,m以外的obj-x形式的目标都不会被编译。
|– Kconfig
类型定义:
每个config菜单项都要有类型定义: bool布尔类型、 tristate三态(内建、模块、移除)、
string字符串、 hex十六进制、integer整型。
eg:
config HELLO_MODULE
bool “hello test module”
bool 类型的只能选中或不选中,显示为[ ];
tristate类型的菜单项多了编译成内核模块的选项,显示为< > ,
假如选择编译成内核模块,则会在.config中生成一个 CONFIG_HELLO_MODULE=m的配置,
假如选择内建,就是直接编译成内核影响,就会在.config中生成一个CONFIG_HELLO_MODULE=y的配置.
hex十六进制类型显示为( )。
目录层次迭代
在Kconfig中有类似语句:source”drivers/usb/Kconfig”
用来包含(或嵌套)新的Kconfig文件,这样便可以使各个目录管理各自的配置内容,
使不必把那些配置都写在同一个文件里,方便修改和管理。
配置选项之间的依赖关系:
depend on:某选项依赖于另外一个选项生成
select :反向依赖关系,该选项选中时,同时选中select后面定义的那一项
requie
默认值: default(默认y/n/m等值)
输入提示:prompt
帮助信息:help
|–.config
内核编译参考文件
修改方式:
(1) make menuconfig
(2) make xxx_defconfig
(3) 直接修改
!注意如果直接修改,不一定会生效,因为一些配置可能存在依赖关系,
make的时候会根据依赖关系进行规则的检查,不推荐直接在.config进行修改。
|–总结
输入命令make menuconfig修改相关配置
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137726.html原文链接:https://javaforall.cn