2013-05-09 6 views
8

Mein Betriebssystem Ubuntu 12.04. Ich habe dieses Kernel-Modul geschrieben und ich benutze den Befehl insmod und rmmod, aber es gibt nichts in/var/log messages. Wie kann ich dieses Problem beheben?printk() druckt nicht in/var/log/messages

/* 
* hello-1.c - The simplest kernel module. 
*/ 
#include <linux/module.h> /* Needed by all modules */ 
#include <linux/kernel.h> /* Needed for KERN_INFO */ 

int init_module(void) 
{ 
    printk(KERN_INFO "Hello world 1.\n"); 

    /* 
    * A non 0 return means init_module failed; module can't be loaded. 
    */ 
    return 0; 
} 

void cleanup_module(void) 
{ 
    printk(KERN_INFO "Goodbye world 1.\n"); 
} 
+2

Versuchen Sie KERN_ALERT anstelle von KERN_INFO, um zu sehen, ob dies daran liegt, dass Ihr Protokolllevel zu hoch eingestellt ist. Sie können auch Ihre Protokollebene ändern. –

+0

Wie kann ich Log-Level ändern? – woody

+1

klogd -c n, wobei n das Niveau ist. Es gibt auch andere Möglichkeiten, es zu setzen. –

Antwort

1

Überprüfen Sie, ob syslog Daemon-Prozess ausgeführt wird, da dies der Prozess ist, der Kopien printk Nachrichten von Kernel-Ring/log Nachrichtenpuffer /var/log/messages wenn ich mich richtig. printk-Nachrichten können mit dmesg Dienstprogramm/Befehl angezeigt werden oder Nachrichten werden in/var/log/messages. Wenn der richtige Loglevel eingestellt ist, werden die printk-Nachrichten sofort auf der Konsole angezeigt. Sie müssen dmesg nicht verwenden oder müssen/var/log/messages einchecken. printk debug messages kann auch Teil von /var/log/syslog sein.

0

Moderne Linux-Distributionen verwenden rsyslog (oder einen anderen Syslog-Daemon) nicht mehr. Sie basieren auf journald, das Teil von systemd ist, daher fehlt die Datei/var/log/messages und Sie müssen den journalctl-Befehl verwenden, um das Systemprotokoll zu lesen.

0

Zunächst sollten Sie prüfen, ob ob das Modul korrekt geladen ist oder nicht, mit diesem Befehl

lsmod | grep "hello-1" //hello-1 is the name of your module 

Da Sie ein Kernel-Modul geschrieben, die eine Botschaft druckt. Die Nachrichten vom Kernel und seinem Modul finden Sie in/var/log/syslog oder Sie können diese Art von Nachrichten mit dem Befehl dmesg anzeigen. Wenn Ihr Modul "Hello World 1." ausgibt, sollten Sie den folgenden Befehl verwenden, um die Nachricht von Ihrem Modul zu sehen.

dmesg | grep "Hello World 1." 
0

Suchen Sie dies in /etc/syslog.conf, die * .info ... Zeilen. Diese scheinen zu kontrollieren, was über printk protokolliert wird.

*.=info;*.=notice;*.=warn;\ 
auth,authpriv.none;\ 
cron,daemon.none;\ 
mail,news.none   -/var/log/messages 

fand ich, dass/proc/sys/kernel/printk nur wirklich die Konsolenprotokollebene gesteuert, nicht die Protokollierung in die Datei. Und ich denke, überprüfen Sie Syslog läuft auch;) Wir hatten genau das gleiche Problem, KERN_INFO nicht zu Protokolldateien gehen und dies behoben. hth