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;
}

: 上記のコードは (arch=x86 上の v2.6.33) です。上記の分析に進む前に、x86 ハードウェアで実際に Linux カーネル v2.6.33 を実行していることを確認してください。行番号はカーネルのバージョンによって異なります。WARN_ON()異なるカーネル バージョンの同じ行の別の関数で、 偶然にも a を見つけた可能性があります。


更新

この問題は RTC-DS3232 ペリフェラル (それ以外は正常に動作している) との通信中に発生するため、警告を無効にすることができます。

CONFIG_DEBUGこれを行う 1 つの方法は、Linux カーネルのビルド構成で無効にすることです。これによりextra_checks、gpio ドライバー内で無効になります。

または、次のようにextra_checksdrivers/gpio/gpiolib.c:34の定義をオーバーライドできます。

/* 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 に答える