0

在启动我的 linux 内核时,我得到这样的日志文件是什么导致了这个以及如何解决..?

------------[ cut here ]------------
WARNING: at drivers/gpio/gpiolib.c:1423 0xa02147ab()
Modules linked in:
Backtrace: no frame pointer
 ---[ end trace ccc3de96c2b87179 ]---
------------[ cut here ]------------
WARNING: at drivers/gpio/gpiolib.c:1423 0xa02147ab()
Modules linked in:
Backtrace: no frame pointer
---[ end trace ccc3de96c2b8717a ]---
------------[ cut here ]------------
WARNING: at drivers/gpio/gpiolib.c:1423 0xa02147ab()
Modules linked in:
Backtrace: no frame pointer
---[ end trace ccc3de96c2b8717b ]---
ds3232 0-0068: rtc core: registered ds3232 as rtc0
i2c-gpio i2c-gpio.0: using pins 27 (SDA) and 28 (SCL)
4

1 回答 1

1

请密切注意内核日志中的以下行:
WARNING: at drivers/gpio/gpiolib.c:1423 0xa02147ab()

这意味着此打印是从1423文件的行号触发的drivers/gpio/gpiolib.c


WARN_ON()从Linux 内核中的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 on arch=x86)。在进行上述分析之前,请确认您确实在 x86 硬件上运行 Linux Kernel v2.6.33。行号随内核版本而变化。您可能偶然WARN_ON()在不同内核版本的同一行上的不同函数中遇到了 a 。


更新

由于此问题是在与 RTC-DS3232 外围设备通信时引起的(否则工作正常),我们可以禁用警告。

一种方法是CONFIG_DEBUG在 Linux 内核构建配置中禁用。这反过来又extra_checks在 gpio 驱动程序中禁用。

或者,可以覆盖驱动程序/gpio/gpiolib.c:34extra_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
于 2013-08-05T03:17:39.403 回答