Ответ 1
dmesg
должен отображать сообщения printk
.
Просто быстрый вопрос о функции printk() на уровне ядра, если я вызываю это, где будет печататься сообщение? (Я использую Ubuntu на i386 arch с последней загрузкой ядра)
не может найти его нигде,
Если бы кто-то мог указать мне в правильном направлении для какого-то руководства для функции printk(), это было бы здорово!
dmesg
должен отображать сообщения printk
.
printk
сообщения поступают в буфер сообщений журнала ядра, который может быть раскрыт различными способами в зависимости от конфигурации системы. Команда оболочки dmesg
покажет их, и они также должны быть скопированы в файлы /var/log
с помощью демона syslog
. Возможно, они будут отправлены на последовательную консоль или в текстовый режим виртуального терминала, но я не помню, как это было.
Если вы поместили несколько операторов printk()
в модуль ядра для отладки и попыток захвата выходов по мере их печати, то вы ищете klogd
. Выполните man klogd
для большего количества задержек и опций.
Вот обертка script для 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
В man-странице printk(9)
содержится очень маленькая информация. Короче говоря, он отправляется в буфер журнала, где демон syslog может забрать его и обработать. Он также отправляется на консоль, если его лог-уровень достаточно высок (см. dmesg(1)
для этого бита).
Найдите /dev/kmsg
в своей системе.