#linux-kernel #kernel #linux-device-driver
#linux-ядро #ядро #linux-драйвер устройства
Вопрос:
Я поместил несколько отладочных сообщений в код ядра. проверил /var/log / messages, dmesg и там такого дампа нет. на компьютере запущен syslogd
я также изменил /proc / sys /kernel/printk на 8 4 1 7
есть идеи, в чем может быть проблема?
Ответ №1:
Я сталкивался с той же проблемой до вчерашнего дня, когда нашел кое-что интересное. В последнее время ядро Linux использует pr_* * вместо printk (версии 3.5 и более поздние).
Я попытался запустить программу базового модуля с printk в версии ядра 3.3 и то же самое в версии 3.7 и выше.
Первый работает нормально. Позже просто не отображаются printk в dmesg или /var/log/messages
. Однако замена printk на макрос pr_info выполнила свою работу. (также существуют другие варианты pr_err, pr_notice и т.д., Которые Были найдены в include /linux /kernel.h Ранее, теперь перенесены в include/linux /printk.h)
Хотя макрос pr_* * довольно старый, благодаря кампании Джо Перчеса, который инициировал вышеупомянутое изменение, мы лучше изучаем способы работы ядра ! (Ссылка: pr_info())
Ответ №2:
Самое простое объяснение заключается в том, что ваш printk()
не вызывается.
Сохраняйте простоту и придерживайтесь проверки dmesg(1)
выходных данных во время отладки этой проблемы — все syslog(3)
/var/log/messages
выходные данные на основе консоли отделены от проблемы с сообщениями, которые даже не отображаются в буфере сообщений ядра.
Комментарии:
1. я поместил prink () внутри подпрограммы планировщика ядра sched_fork(),normal_prio () и др. ни один из них не появился в dmesg. можете ли вы предложить процедуру, которая всегда вызывается во всех случаях. просто хотел проверить, что мое перекомпилированное ядро загружается при загрузке компьютера
2. Вау, это дорогой способ заглянуть в планировщик. Ознакомьтесь
Documentation/scheduler/sched-stats.txt
с информацией о более дешевых способах узнать, что делает планировщик. 🙂 Если вы хотите, чтобы измененное ядро загружалось и работало, я предлагаю изменить что-то более похожее наinit/main.c
функциюstart_kernel()
. Он запускает все различные подсистемы при загрузке.3. спасибо за комментарий.. Похоже, мой способ был слишком дорогим, Документация / планировщик — гораздо более приятный способ изучить это. почему-то я скептически отношусь к тому, что мое перекомпилированное ядро, которое я установил через dpkg -i, не активно. как это проверить? я успешно перезагрузил компьютер и выполнил все, шаг за шагом, упомянутые в blog.avirtualhome.com/2010/11/06 /…
4. Проверьте дату сборки
uname -a
в вашем запущенном ядре — это даст вам лучшее представление о том, используете ли вы ядро, созданное вами сегодня, или ядро, предоставляемое дистрибутивом. Хотя эти инструкции, которые вы нашли, отлично подходят для отслеживания разработки ядра Ubuntu, они кажутся немного «тяжелыми» — если вы не возражаете против использования восходящего kernel.org вместо ядра загляните в kernel-package (также доступен в некоторых репозиториях Ubuntu) — с ним намного проще работать.5. спасибо за помощь. Можете ли вы предложить мне какое-либо легкое в сборке ядро. я хочу проделать некоторую работу по модификации планировщика. Я новичок в разработке ядра.