2013-08-03 1 views
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) 
+1

Этот вопрос не программирование - оно принадлежит на Serverfault. –

+0

Версия ядра Linux и арка, пожалуйста ... – TheCodeArtist

+0

версия ядра 2.6.33 – amar

ответ

1

Обратите пристальное внимание на следующую строку в журнале ядра:
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 
+0

Я нашел это в драйверах/gpio/gpiolib.c и строке: 1423 Я не получаю точный сценарий, что вызывает это при загрузке ..? любые другие возможные подсказки для решения этой проблемы – amar

+0

Какое устройство вы тестируете? Можете ли вы опубликовать полный журнал ядра при загрузке? ... – TheCodeArtist

+0

Я связываю RTC Ds3232 с i2c и тестировал это на lpc1788 cortex m3. его внешний вид по загрузочному ядру ядра, мое устройство зарегистрировано в ядре, и я могу проверить свое устройство, работая, заходя в /sys/device/platform/i2c-gpio.0/i2c-0/0-0068/rtc/rtc0# cat Дата. когда я выполнил дату кота, он покажет предупреждение так же, как я упоминаю в своем вопросе, за которым следует дата. – amar

 Смежные вопросы

  • Нет связанных вопросов^_^