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

 
 
> отладка ядра, как правильно?
Метценгерштейн
сообщение 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
Ответов
Метценгерштейн
сообщение Mar 23 2016, 13:59
Сообщение #2


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

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



Спасибо за подробное изложение- буду пользоваться.
Поиском по всем файлам- имею ввиду не grep, а реально поиск файлов и текста в них по всему проекту ядра...
Грустно (
http://www.sourceinsight.com/
Как-то бесплатно можно его получить?

Цитата(Tarbal @ Mar 23 2016, 15:38) *
Я платным пользуюсь:
http://www.sourceinsight.com/

Лучше ничего не видел.

Попытался я understand C++ скормить ядро линукса- на 99% ошибку выдает- много для него.


Цитата(Tarbal @ Mar 23 2016, 14:37) *
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 и много чего другого.

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

можно немного подробней- как dmesg просмотреть printk?
Префикс был KERN_INFO

или не обязательно dmesg смотреть.
Что удобней? Чтобы только printk вывел мне мои сообщения.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Mar 23 2016, 14:02
Сообщение #3


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

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



Цитата(Метценгерштейн @ Mar 23 2016, 17:34) *
Поиском по всем файлам- имею ввиду не grep, а реально поиск файлов и текста в них по всему проекту ядра...


можно немного подробней- как dmesg просмотреть printk?
Префикс был KERN_INFO


Оттого вам и нелегко искать, что грепом не пользуетесь.

В консоле пишите команду dmesg и пользуетесь.
KERN_INFO может не напечатать сообщений если прежде не дать команды echo, которую я написал.


Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:24
Рейтинг@Mail.ru


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