0

我正在向 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]

这些是我在内核编译期间看到的唯一警告。所以这一定意味着我做错了。任何指针将不胜感激!

4

1 回答 1

0

我没有正确使用预处理器。我没有收到这样的警告:

#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
于 2014-06-04T17:11:12.890 回答