狠抓以下行的内核日志:
WARNING: at drivers/gpio/gpiolib.c:1423 0xa02147ab()
这意味着该打印从文件drivers/gpio/gpiolib.c
WARN_ON()的行号1423触发在Linux Kernel中从drivers/gpio/gpiolib.c:1423触发的。
int __gpio_get_value(unsigned gpio)
{
struct gpio_chip *chip;
chip = gpio_to_chip(gpio);
WARN_ON(extra_checks && chip->can_sleep);
return chip->get ? chip->get(chip, gpio - chip->base) : 0;
}
注:上面的代码是(上拱v2.6.33 = 86)。在继续上述分析之前,请确认您确实在x86硬件上运行Linux Kernel v2.6.33。行号随内核版本而变化。在不同的内核版本的同一行上,您可能会偶然碰到另一个函数中的WARN_ON()。
更新:
因为这个问题而与RTC-DS3232外围设备(这是工作,不然罚款)通信造成我们可以禁用警告。
执行此操作的一种方法是在Linux内核版本配置中禁用CONFIG_DEBUG。这又会禁用gpio驱动程序中的extra_checks。
或者一个可以在extra_checks定义如下
/* When debugging, extend minimal trust to callers and platform code.
* Also emit diagnostic messages that may help initial bringup, when
* board setup or driver bugs are most common.
*
* Otherwise, minimize overhead in what may be bitbanging codepaths.
*/
#ifdef DEBUG
#define extra_checks 1
#else
#define extra_checks 0
#endif
/* override extra_checks irrespective of debug-mode */
#define extra_checks 0