Ich entwickle ein eingebettetes System, das derzeit Linux mit der Konsolenausgabe an der seriellen Schnittstelle 1 bootet (unter Verwendung des Konsolen-Boot-Parameters aus dem Bootloader). Irgendwann werden wir jedoch diese serielle Schnittstelle verwenden. Was ist die beste Lösung für die Kernel-Konsolenausgabe? /dev/null? Kann sie irgendwie auf ein pty gelegt werden, so dass wir möglicherweise darauf zugreifen können?
Antworten
Zu viele Anzeigen?Wenn Sie nur die printk-Meldungen des Kernels von der Konsole lesen und nicht tatsächlich getty oder eine Shell darauf ausführen wollen, können Sie netconsole verwenden. Sie können Ihre Bootloader-Kernel-Optionen (oder modprobe netconsole) mit folgendem Inhalt versehen:
netconsole=4444@10.0.0.1/eth1,9353@10.0.0.2/12:34:56:78:9a:bc
wobei 4444 der lokale Port, 10.0.0.1 die lokale IP und eth1 die lokale Schnittstelle ist, über die die Nachrichten gesendet werden. 9353 ist der entfernte Port, 10.0.0.2 ist die entfernte IP-Adresse, an die die Nachrichten gesendet werden, und das letzte Argument ist die Mac-Adresse des entfernten Systems (z. B. Ihres Desktops).
Führen Sie dann den Befehl zum Anzeigen der Nachrichten aus:
netcat -u -l -p 9353
Mehr dazu erfahren Sie in Dokumentation/networking/netconsole.txt
Sie können von einer Shell aus mit dmesg auf den printk-Meldungspuffer zugreifen. Der Kernelpuffer hat eine endliche Größe und überschreibt die ältesten Einträge mit den neuesten, also müssen Sie entweder dmesg regelmäßig überprüfen oder netconsole einschalten, wie @bmdhacks vorschlägt.
Wenn es keine Konsole gibt, verpassen Sie alle Oops-Informationen, die bei einem Kernel-Absturz ausgegeben werden. Selbst die Verwendung von netconsole kann hier nicht helfen, wenn der Kernel abstürzt und einen Neustart durchführt, bevor TCP die Ausgabe an den entfernten Socket liefern kann. Im Allgemeinen modifizieren wir kernel/panic.c:panic(), um Registerinhalte und andere Zustände in einem Bereich des NOR-Flashs zu speichern, so dass zumindest einige Informationen für eine nachträgliche Fehlersuche zur Verfügung stehen.