7 Stimmen

Wohin schickt man die Kernel-Konsole auf einem eingebetteten System?

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?

3voto

bmdhacks Punkte 15405

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

3voto

DGentry Punkte 15830

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X