我在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_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