реклама на сайте
подробности

 
 
> отладка ядра, как правильно?
Метценгерштейн
сообщение Mar 23 2016, 09:57
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Допустим, надо негде в драйвере вывести сообщение отладочное.
Как это делать? Printk?
Чуть подробней можно с примером.

Есть ли какой механизм, чтобы можно было загрузить весь проект- ядро в него и от туда ходить по ф-ям. Например, выделил ф-ю- go to definition

Как-то это не правильно поиском по всем файлам рыться...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
des333
сообщение Mar 23 2016, 11:17
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(Метценгерштейн @ Mar 23 2016, 12:57) *
Допустим, надо негде в драйвере вывести сообщение отладочное.
Как это делать? Printk?
Чуть подробней можно с примером.

Код
printk("Debug message\n");

sm.gif

Цитата(Метценгерштейн @ Mar 23 2016, 12:57) *
Есть ли какой механизм, чтобы можно было загрузить весь проект- ядро в него и от туда ходить по ф-ям. Например, выделил ф-ю- go to definition

Как-то это не правильно поиском по всем файлам рыться...

Вы можете использовать ctags (например, в связке с vim).
Для этого нужно зайти в директорию с исходным кодом и выполнить команду:
Код
ctags --c-kinds=-m -R .

В vim после этого нужно поставить курсов на название функции и нажать Ctrl+]

Для исходников ядра также есть полезный сайт. Там всё уже проиндексировано и пожно удобно сёрфить по коду.


--------------------
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Mar 23 2016, 11:37
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(des333 @ Mar 23 2016, 15:17) *
Код
printk("Debug message\n");

sm.gif


Вы можете использовать ctags (например, в связке с vim).
Для этого нужно зайти в директорию с исходным кодом и выполнить команду:
Код
ctags --c-kinds=-m -R .

В vim после этого нужно поставить курсов на название функции и нажать Ctrl+]

Для исходников ядра также есть полезный сайт. Там всё уже проиндексировано и пожно удобно сёрфить по коду.


printk(KERN_ERR " %s data %d\n", __func__, param);

В файле /proc/sys/kernel/printk устанавливается уровень от 0 до 7

KERN_ERR кажется raven 5. Если не писать KERN_ERR и т.д., то используется значение по умолчанию. Кажется это KERN_INFO.

echo 7 > /proc/sys/kernel/printk разрешит печатать все уровни.

Посмотреть напечатанное можнo в системной консоли, в системном логе или в буфере при помощь команды dmesg.

Кроме того можно сделать debug_fs и много чего другого.

Кстати единое адресное пространство ядра позволяет читать и печатать значения переменной любого драйвера. Пишете модуль, который имеет только метод инициализации модуля и он возвращает ошибку(прием из книжки Олега Цилюрика). При инициализации модуля все переменные ядра доступны и могут быть распечатаны. Ну а потом модуль не ставится из-за заложенной ошибки, но при попытке установки вы распечатали нужные вам переменные.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 14:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016