Куда печатает printk()?
Просто быстрый вопрос о функции printk() на уровне ядра, если я назову это, куда будет напечатано сообщение?(Я использую Ubuntu на i386 arch с последней загрузкой ядра)
не могу найти это нигде,
Если бы кто-то также мог указать мне правильное направление для какого-то руководства для функции printk(), это было бы здорово!
5 ответов
printk
сообщения отправляются в буфер сообщений журнала ядра, который может быть представлен различными способами в зависимости от конфигурации системы. Команда оболочки dmesg
покажет их, и они также должны быть скопированы в файлы в /var/log
посредством syslog
демон. Можно зарегистрировать их на последовательной консоли или в виртуальном терминале в текстовом режиме, но я не помню, как это было необдуманным.
Если вы положили некоторые printk()
операторы в модуле ядра для отладки и попытки перехватить выходные данные, так как они печатаются, то, что вы ищете klogd
, Выполнить man klogd
для большего количества задержаний и вариантов.
Вот скрипт-обёртка для klogd
что я закодировал некоторое время назад, чтобы облегчить небольшую боль отладки:
#!/bin/bash
function bashtrap()
{
echo
echo -n "[+] stopping klogd ... "
pids=`ps aux | grep klogd | awk '{print $2}'`
for pid in $pids
do
kill SIGTERM $pid 2> /dev/null
done
echo "done"
if [ $1 ]
then
exit;
fi
}
sync
bashtrap
klogd -x -f - -n -c 8 2>&1 1 | tee klog.txt & klog_pid=$!;
echo "[+] klogd started"
echo "[+] press ctrl+c to exit ... $klog_pid"
sync
trap "bashtrap 1" SIGINT
while [ 1 ]
do
sleep 3
echo -n "."
done
ps aux | grep klogd
printk(9)
Страница man содержит очень мало информации. Короче говоря, он отправляется в буфер журнала, где демон syslog может взять его и обработать. Он также отправляется на консоль, если его уровень логирования достаточно высок (см. dmesg(1)
за это немного).