Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kconfig、宏和未定义的宏警告_C_Linux Kernel_Kbuild - Fatal编程技术网

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

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

如果您注意内核约定,您就会知道Kconfig变量应该在C代码中加上“CONFIG_u10;”前缀(因此,
CONFIG_RTC\uDRV\uTWL4300\uRate\u25UA
等)。这能解决我的问题吗?真的很好奇。啊,配置前缀是我解决方案的一部分。谢谢。