Обратите пристальное внимание на следующую строку в журнале ядра:
WARNING: at drivers/gpio/gpiolib.c:1423 0xa02147ab()
Это означает, что эта печать запускается из строки числа 1423
файла drivers/gpio/gpiolib.c
WARN_ON()
запускается с drivers/gpio/gpiolib.c:1423 в ядре Linux.
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 на арке = x86). Прежде чем приступать к рассмотренному выше анализу, убедитесь, что на самом деле вы действительно используете Linux Kernel v2.6.33 на оборудовании x86. Номера строк меняются с версиями ядра. Возможно, вы случайно сослались на WARN_ON()
в другой функции в той же строке в другой версии ядра.
Обновление:
Поскольку эта проблема вызвана при обмене данными с РТК-DS3232 периферической (который в противном случае работает нормально), можно отключить предупреждения.
Один из способов сделать это - отключить CONFIG_DEBUG
в конфигурации сборки ядра Linux. Это, в свою очередь, отключает extra_checks
в драйвере gpio.
В качестве альтернативы можно переопределять extra_checks
в drivers/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
Этот вопрос не программирование - оно принадлежит на Serverfault. –
Версия ядра Linux и арка, пожалуйста ... – TheCodeArtist
версия ядра 2.6.33 – amar