Kconfig、宏和未定义的宏警告
我正在向Linux内核中的Kconfig添加一个多选样式的配置。根据用户的选择,它定义了一个宏。一旦配置好,内核驱动程序源代码就会有#ifdef块,它会在其中检查并使用宏进行编译 在Kconfig中看起来是这样的:Kconfig、宏和未定义的宏警告,c,linux-kernel,kbuild,C,Linux Kernel,Kbuild,我正在向Linux内核中的Kconfig添加一个多选样式的配置。根据用户的选择,它定义了一个宏。一旦配置好,内核驱动程序源代码就会有#ifdef块,它会在其中检查并使用宏进行编译 在Kconfig中看起来是这样的: choice RTC_DRV_TWL4030_CHARGE_RATE prompt "RTC Backup Battery Charge Rate" depends on RTC_DRV_TWL4030 default RTC_DRV_TWL4030_RATE_25
choice RTC_DRV_TWL4030_CHARGE_RATE
prompt "RTC Backup Battery Charge Rate"
depends on RTC_DRV_TWL4030
default RTC_DRV_TWL4030_RATE_25UA
config RTC_DRV_TWL4030_RATE_25UA
bool "25uA"
config RTC_DRV_TWL4030_RATE_150UA
bool "150uA"
config RTC_DRV_TWL4030_RATE_500UA
bool "500uA"
config RTC_DRV_TWL4030_RATE_1MA
bool "1MA"
endchoice
在驱动程序源代码中:
#ifdef RTC_DRV_TWL4030_RATE_25UA
BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA,
#elif RTC_DRV_TWL4030_RATE_150UA
BIT_PM_RECEIVER_BB_CFG_BBISEL_150UA,
#elif RTC_DRV_TWL4030_RATE_500UA
BIT_PM_RECEIVER_BB_CFG_BBISEL_500UA,
#elif RTC_DRV_TWL4030_RATE_1MA
BIT_PM_RECEIVER_BB_CFG_BBISEL_1MA,
#else
BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA,
#endif
这感觉不错。但是,问题是在编译时我收到了警告:
drivers/rtc/rtc-twl.c:549:7: warning: "RTC_DRV_TWL4030_RATE_150UA" is not defined [-Wundef]
drivers/rtc/rtc-twl.c:551:7: warning: "RTC_DRV_TWL4030_RATE_500UA" is not defined [-Wundef]
drivers/rtc/rtc-twl.c:553:7: warning: "RTC_DRV_TWL4030_RATE_1MA" is not defined [-Wundef]
这些是我在内核编译期间看到的唯一警告。所以这一定意味着我做错了。任何提示都将不胜感激 我没有正确使用预处理器。我没有收到这样的警告:
#if defined(CONFIG_RTC_DRV_TWL4030_RATE_0A)
BIT_PM_RECEIVER_BB_CFG_BBISEL,
#elif defined(CONFIG_RTC_DRV_TWL4030_RATE_25UA)
BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA,
#elif defined(CONFIG_RTC_DRV_TWL4030_RATE_150UA)
BIT_PM_RECEIVER_BB_CFG_BBISEL_150UA,
#elif defined(CONFIG_RTC_DRV_TWL4030_RATE_500UA)
BIT_PM_RECEIVER_BB_CFG_BBISEL_500UA,
#elif defined(CONFIG_RTC_DRV_TWL4030_RATE_1MA)
BIT_PM_RECEIVER_BB_CFG_BBISEL_1MA,
#else
BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA,
#endif
如果您注意内核约定,您就会知道Kconfig变量应该在C代码中加上“CONFIG_u10;”前缀(因此,
CONFIG_RTC\uDRV\uTWL4300\uRate\u25UA
等)。这能解决我的问题吗?真的很好奇。啊,配置前缀是我解决方案的一部分。谢谢。