Куда печатает printk ()? - PullRequest
       5

Куда печатает printk ()?

29 голосов
/ 27 октября 2010

Просто быстрый вопрос о функции printk () на уровне ядра, если я позвоню, куда будет напечатано сообщение? (Я использую Ubuntu на i386 arch с последней загрузкой ядра)

не могу найти его нигде,

Если бы кто-то мог также указать мне правильное направление для какого-то руководства по функции printk (), это было бы здорово!

Ответы [ 5 ]

32 голосов
/ 27 октября 2010

dmesg должно отображать printk сообщений.

13 голосов
/ 27 октября 2010
Сообщения

printk отправляются в буфер сообщений журнала ядра, который может быть представлен различными способами в зависимости от конфигурации системы.Команда оболочки dmesg покажет их, и они также должны быть скопированы в файлы в /var/log демоном syslog.Можно зарегистрировать их на последовательной консоли или в виртуальном терминале в текстовом режиме, но я не помню, как это было неестественно.

3 голосов
/ 28 октября 2010

Если вы поместили несколько операторов 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
2 голосов
/ 02 июня 2013

Найдите /dev/kmsg в вашей системе.

2 голосов
/ 27 октября 2010

Справочная страница printk(9) содержит очень небольшую информацию.Короче говоря, он отправляется в буфер журнала, где демон syslog может взять его и обработать.Он также отправляется на консоль, если его уровень логирования достаточно высок (см. dmesg(1) для этого бита).

...