Kconfig自定义用户菜单(基于ESP-IDF)

本文介绍了ESP-IDF中的Kconfig配置系统,如何通过idf.pymenuconfig生成sdkconfig.h,涉及Kconfig的使用方法、数值选项示例以及Kconfig格式要求,重点讲解了在实际项目中的应用和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要参考资料:
B站Up孤独的二进制《自定义菜单 Menuconfig》
ESP-IDF官方解释Kconfig: https://docs.espressif.com/projects/esp-idf/zh_CN/v5.1/esp32/api-reference/kconfig.html#
Kconfig标准: https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html
Linux内核配置之Kconfig: https://blog.csdn.net/xuangelouzhu/article/details/119177854

1. idf.py menuconfig

根据官方说法:

在这里插入图片描述
简单说,我们调用idf.py menuconfig就是为了生成sdkconfig.h文件参与编译。

一些常见的文件:
sdkconfig.defaults:该文件可以手动或自动创建,且永远不会被构建系统更改。
sdkconfig.ci :该文件是 CI(持续集成)测试框架的一部分,在正常构建过程中会被忽略。

2. Kconfig介绍

以上功能就是基于Kconfig,而众所周知,ESP-IDF是基于Python开发环境的,所以它是调用了一个叫esp-idf-kconfig的Python包。
在这里插入图片描述

3. Kconfig使用

首先创建Kconfig.probuild文件
在这里插入图片描述

3.1 Kconfig格式要求

这是官网对于Kconfig格式的要求

在这里插入图片描述

3.2 Kconfig语法

3.2.1 config 条目

语法:

config     symbol
options

语法解释如下:
config 关键字 表示后面是菜单项
symbol 菜单名
options 菜单项下的属性和选项

例如:

config ARM64_ACPI_PARKING_PROTOCOL
	bool "Enable support for the ARM64 ACPI parking protocol"
	depends on ACPI
	help
	  Enable support for the ARM64 ACPI parking protocol. If disabled
	  the kernel will not allow booting through the ARM64 ACPI parking
	  protocol even if the corresponding data is present in the ACPI
	  MADT table.

其中options部分有:

1、类型定义:
每个config菜单项都要有类型定义,bool:布尔类型, tristate三态:内建、模块、移除, string:字符串, hex:十六进制, integer:整型。

  • bool: 布尔类型 该CONFIG宏只能选择y(编译内核)或者n(不编译),菜单项前为圆括号
  • tristate: 三态 该CONFIG宏可以设置y/m/n三种模式即内建、模块、移除,假如选择编译成内核模块,则会在.config中生成一个CONFIG_HELLO_MODULE=m的配置,假如选择内建,就是直接编译成内核影响,就会在.config中生成一个CONFIG_HELLO_MODULE=y的配置.
  • string: 字符串 该CONFIG宏可以设为一串字符,比如#define CONFIG_XXX “config test”
  • hex: 十六进制 该CONFIG宏可以设为一个十六进制,比如#define CONFIG_XXX 0x1234
  • int: 整型 该CONFIG宏可以设为一个整数,比如#define CONFIG_XXX 1234

2、依赖型定义depends on和select 指此菜单的出现是否依赖于另一个定义

  • depends on:依赖项,比如depends on XXX 表示当前宏需要CONFIG_XXX宏打开的前提下,才能设置它(注意依赖项的config参数只有bool或tristate才有效)
  • select : 反依赖项,和depends on刚好相反,比如 selecton XXX表示当前宏如果是y或者m,则会自动设置XXX=y或者m(注意参数只有bool或tristate才有效)

3、帮助性定义
只是增加帮助用关键字help或—help—

3.3.2 menu条目

menu条目用于生成菜单,其格式如下:

menu "字符串"
 ..............
 endmenu

3.3.3 choice条目

会生成一个单选框,里面通过多选一方式选择config,需要注意choice中的config参数只能bool或tristate

choice条目将多个类似的配置选项组合在一起,供用户单选或多选

choices条目格式如下:

   "choice"
   
   <choiceoptions>
   <choiceblock>
   
   "endchoice"

这个定义了一个选择集合,并且接受任何上面所说的属性作为选项。选择只能是bool类型或tristate类型,并且布尔选择只允许一个单一的配置项被选中,三态选择还允许任何配置项被设置为“M”。这可以用在下面的情况:如果一个硬件存在多个驱动程序,并且只有一个驱动程序​​可以编译/加载到内核中,但所有的驱动程序可以编译成模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值