把Linux驱动编译到内核的预备知识-Kconfig 文件语法

学习目标:

  了解Kconfig基本语法


学习内容:

        既然要把Linux驱动编译到内核,那就得把目标驱动程序的配置项添加进编译要用到Kconfig文件。那我们大概了解一下Kconfig语法:

一、主菜单

        支持主菜单的Kconfig文件就位于kernel的顶层目录下。打开Kconfig文件,可以看到第一个 关键字 mainmenu, mainmenu 是用来设置主菜单的标题的。文件内容如下:

可以看到上述命令是设置菜单的标题是:Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration。可以看到这个标题里包含两个变量:ARCH 和 KERNELVERSION,注意一下,$(变量)是取变量的值,对于下图来说,$(ARCH)就是x86,$(KERNELVERSION)就是5.10.160。

        我们再往下看支撑主菜单的Kconfig文件,第二个关键字出现了:source。source 用于读取另一个Kconfig文件,如: source "drivers/Kconfig"就是读取drivers目录下的Kconfig 文件。这就引入了一个选项,这个选项就是Device Drivers子菜单。

二、菜单结构

        我们进入到drivers目录下。并打开对应的Kconfig文件,可以看到第三个关键字 menu,menu还有一个搭档endmenu,如下图:

可以看出menu/endmenu是用来生成菜单的,menu是菜单开始的标志,后面跟的"Device Drivers"就是子菜单的名称,endmenu是菜单结束的标志,这两个是成对出现的。那么看看产生的菜单长什么样:

这里面的<> []的作用可以看上一篇介绍。那这些括号在Kconfig文件中怎么体现?

三、配置选项

        我们继续进入"Device Drivers" 菜单的子菜单 "Character devices",其对应的支持Kconfig在kernel/drivers/char 目录下:

由图可以看到第5个关键字:config,关键字config 用来定义一个新的选项。

每个选项都必须指定类型,类型包括bool,tristate,string,hex,int。选项后面一般跟着这个选项的名称。

最常见的是bool,tristate,string这三个。

  • bool 类型有两种值:y 和 n。在图像界面里表项形式就是[]。
  • tristate 有三种值:y,m 和 n。在图像界面里表项形式就是<>。
  • string 为字符串类型。在图像界面里表项形式就是()。

四、帮助信息

        接着看第6个关键字 help:不要在意没把depends on算第6个,它另有安排;help表示帮助信息,当我们在图形化界面按下h按键,弹出来的就是help的内容。以上图中第一个配置项为例,当按h时看下图:

五、依赖关系

        现在看看第7个关键字 depends on,为什么刚才要跳过它呢?因为它会引出第8个关键字select,也是一个依赖关系关键字。这两个有啥不同呢?

  • depends on 表示直接依赖关系:如下面例子中的TTY_PRINTK依赖于EXPERT && TTY
  • select 表示反向依赖关系:表示AUDITSYSCALL被选中的情况下,FSNOTIFY会被自动选中。

六、可选选项

        使用 choice/endchoice 定义可选择项。这是又一个成对出现的关键字。

六、注释

        Kconfig中使用 comment 用于注释,这个注释是在图像化界面中显示的注释。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值