сообщения printk () не отображаются в консоли - PullRequest
0 голосов
/ 17 июня 2020

Итак, я пытаюсь научиться писать модули Linux, и прямо сейчас я экспериментирую с базовым модулем c "Hello World":

#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void){

    printk(KERN_ALERT "Hello, world.\n");
    return 0;
}

static void hello_exit(void){

    printk(KERN_ALERT "goodbye.\n");
}

module_init(hello_init);
module_exit(hello_exit);

И я наконец получил этот модуль работать! Когда я добавляю с помощью insmod, он выводит «hello» в kernel.log, а когда я удаляю его с помощью remmod, он выводит «до свидания» в kernel.log.

Моя проблема в том, что я решил, что хочу попробовать и получить output для вывода на консоль. Насколько я понимаю о printk (), для того, чтобы сообщения отображались в консоли, в консоли должен быть установлен соответствующий уровень сообщений в / proc / sys / kernel / printk. (Это все согласно https://elinux.org/Debugging_by_printing). На моей консоли установлен уровень 4.

cat / proc / sys / kernel / printk:

4       4       1       7

Поскольку KERN_ALERT имеет уровень 2, а моя консоль настроена на печать уровня 4 и ниже сообщения, почему сообщения printk не отображаются на моей консоли? Когда я запускаю dmesg, я вижу, что сообщения явно находятся в буфере, но никогда не выводят go на консоль. На самом деле мне не нужно, чтобы они печатали на консоли, но я действительно хочу понять, как все это работает.

...