博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux内核配置Kconfig语法
阅读量:5154 次
发布时间:2019-06-13

本文共 3114 字,大约阅读时间需要 10 分钟。

何为Kconfig 它的作用是什么

内核源码编译过程

顶层目录

  1. 遍历每个源码目录(或配置指定的源码目录)Makefile
  2. 每个目录的Makefile 会根据Kconfig来定制要编译对象
  3. 回到顶层目录的Makeifle执行编译

那么我们就得出各个文件的作用:

Kconfig ---> (每个源码目录下)提供选项 .config ---> (源码顶层目录下)保存选择结果 Makefile---> (每个源码目录下)根据.config中的内容来告知编译系统如何编译
  • 1
  • 2
  • 3

说到底,Kconfig就是配置哪些文件编译,那些文件不用编译。后期linux内核都做出了如下的图形界面,但由于要进行Linux内核驱动开发,需要向将驱动的代码添加到Makefile中一起编译,所以Kconfig的一些语法也该了解,于是有了这篇文章。 

这里写图片描述

基本使用方法

我们以简单的单选项为案例来演示 

假比,我们做好了一个驱动,需要将选项加入到内核的编译选项中,可以按以下步骤操作:

第一步 配置Kconfig

在driver目录下新建一个目录

mkdir driver/test
  • 1

进入test目录,创建Kconfig文件 

这里写图片描述 
这里定义了一个TEST的句柄,Kconfig可以通过这个句柄来控制Makefile中是否编译,”Test driver”是显示在终端的名称。 
具体的语法在Kconfig语法简介中介绍。

第二步 配置Makefile

在同样的目录中,新建一个Makefile 

Makfile

Obj-$(CONFIG_选项名) += xxx.o /*当CONFIG_选项名=y时,表示对应目录下的xxx.c将被编译进内核当CONFIG_选项名=m时对应目录下的xxx.c将被编译成模块*/
  • 1
  • 2
  • 3

第三步 配置上层目录的Makefile与Kconfig

在上一层目录的Kconfig中

这里写图片描述 

表示将test文件夹中的Kconfig加入搜寻目录

在上一层目录的Makefile中

这里写图片描述

结果,运行根目录的.config查看结果 

这里写图片描述

Kconfig语法简介

单一选项

总体原则:每一个config就是一个选项,最上面跟着控制句柄,下面则是对这个选项的配置,如选项名是什么,依赖什么,选中这个后同时会选择什么。

config CPU_S5PC100    bool "选项名"    select S5P_EXT_INT    select SAMSUNG_DMADEV    help      Enable S5PC100 CPU support
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

config —> 选项 

CPU_S5PC100 —>句柄,可用于控制Makefile 选择编译方式 
bool —>选择可能:TRUE选中、FALSE不选 选中则编译,不选中则不编译。 
如果后面没有字符串名称,则表示其不会出现在选择软件列表中 
select —> 当前选项选中后则select后指定的选项自动被选择

depends on ARM || BLACKFIN || MIPS || COLDFIRE
  • 1

depend on 依赖,后面的四个选择其中至少一个被选择,这个选项才能被选

config DM9000    tristate "DM9000 support"
  • 1
  • 2

tristate —> 选中并编译进内核、不选编译成模块

运行结果:< M > test

选项为数字

config ARM_DMA_IOMMU_ALIGNMENT    int "Maximum PAGE_SIZE order of alignment for DMA IOMMU buffers" ---->该选项是一个整型值    range 4 9 ---->该选项的范围值    default 8 ---->该选项的默认值    help      DMA mapping framework by default aligns all buffers to the smallest      ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4-8为这个数字的范围,运行结果 

这里写图片描述

这里的defult其实也可以用在bool中

config STACKTRACE_SUPPORT    bool    --->该选项可以选中或不选,且不会出现在选择列表中    default y ---->表示缺省情况是选中
  • 1
  • 2
  • 3

if..endif

if ARCH_S5PC100 --->如果ARCH_S5PC100选项选中了,则在endif范围内的选项才会被选config CPU_S5PC100    bool "选项名"    select S5P_EXT_INT    select SAMSUNG_DMADEV help Enable S5PC100 CPU support endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

举个例子,如果CPU没有选择使用多核CPU,则不会出现CPU个数的选项。

choice多个选项

choice      --->表示选择列表    prompt "Default I/O scheduler"         //主目录名字    default DEFAULT_CFQ                    //默认CFQ    help      Select the I/O scheduler which will be used by default for all block devices. config DEFAULT_DEADLINE bool "Deadline" if IOSCHED_DEADLINE=y config DEFAULT_CFQ bool "CFQ" if IOSCHED_CFQ=y config DEFAULT_NOOP bool "No-op" endchoice
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
menu "Boot options"  ----> menu表示该选项是不可选的菜单,其后是在选择列表的菜单名config USE_OF    bool "Flattened Device Tree support"    select IRQ_DOMAIN select OF select OF_EARLY_FLATTREE help Include support for flattened device tree machine descriptions. .... endmenu ----> menu菜单结束
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

menu指的是不可编辑的menu,而menuconfig则是带选项的menu 

menu和choice的区别 
menu 可以多选 choice 是单项选择题

menuconfig MODULES ---> menuconfig表示MODULE是一个可选菜单,其选中后是CONFIG_MODULES    bool "菜单名"if MODULES...endif # MODULES
  • 1
  • 2
  • 3
  • 4
  • 5

说到底,menconfig 就是一个带选项的菜单,在下面需要用bool判断一下,选择成立后,进入if …endif 中间得空间。

转载于:https://www.cnblogs.com/lamblabs/p/8493747.html

你可能感兴趣的文章
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
海上孤独的帆
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>
淌淌淌
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>
Swift 入门之简单语法(六)
查看>>
〖Python〗-- IO多路复用
查看>>
栈(括号匹配)
查看>>
Java学习 · 初识 面向对象深入一
查看>>
源代码如何管理
查看>>
vue怎么将一个组件引入另一个组件?
查看>>
bzoj1040: [ZJOI2008]骑士
查看>>
LeetCode 74. Search a 2D Matrix(搜索二维矩阵)
查看>>