Sortierung der technischen Hinweise zum Linux-Kernel-Gerätetreiber-Kernel-Debugging

Sortierung der technischen Hinweise zum Linux-Kernel-Gerätetreiber-Kernel-Debugging
/******************
 * Kernel-Debugging-Technologie ********************/

(1) Einige debuggingbezogene Konfigurationsoptionen im Kernel-Quellcode

Die Kernel-Konfigurationsoptionen umfassen einige Optionen zum Kernel-Debugging, die alle im Menü „Kernel-Hacking“ konzentriert sind. enthalten:

CONFIG_DEBUG_KERNEL

Stellt zusätzliche Debugoptionen zur Verfügung und sollte aktiviert werden. Es werden dadurch nicht automatisch alle Debugfunktionen aktiviert.

Eine detaillierte Beschreibung der Debugoptionen finden Sie im Treiberhandbuch oder in der Hilfebeschreibung von menuconfig.

(2) So steuern Sie printk-Debugging-Anweisungen global über Makros

Durch die Zusammenarbeit mit Makefile können wir unsere eigenen Debug-Anweisungen in der C-Datei definieren.

(3) Einsatz von strace

strace kann alle von Programmen im Benutzerbereich ausgegebenen Systemaufrufe verfolgen. Nützliche Parameter sind:

  • -t zeigt die Uhrzeit des Anrufs an
  • -T Für explizite Anrufe aufgewendete Zeit
  • -e begrenzt die Art der verfolgten Systemaufrufe, z. B. „-e execve“
  • -f alle Kindprozesse verfolgen
  • -p Einen bestimmten Prozess verfolgen. Beispiel: „-p 8856“
  • -o Informationen in eine bestimmte Datei ausgeben

Strace ist sehr nützlich, um subtile Fehler in Systemaufrufen zu entdecken, insbesondere bei Multiprozessprogrammen. Sie können viele nützliche Informationen über den Rückgabewert und die Prozess-PID-Ausgabe von strace erhalten. wie:

$>strace -o zht.txt -f ./process_create

(4) Einsatz von ltrace

ltrace kann alle von User Space-Programmen ausgegebenen Funktionsaufrufe dynamischer Bibliotheken verfolgen. Nützliche Parameter sind:

  • -t zeigt die Uhrzeit des Anrufs an
  • -T Für explizite Anrufe aufgewendete Zeit
  • -f alle Kindprozesse verfolgen
  • -p Einen bestimmten Prozess verfolgen
  • -o Informationen in eine bestimmte Datei ausgeben

(5) Überprüfen Sie die Oops-Meldung

„Oops“ ist die gebräuchlichste Art des Kernels, den Benutzer darüber zu benachrichtigen, dass etwas Unglückliches passiert ist. Normalerweise bleibt der Kernel nach dem Senden eines Oops in einem instabilen Zustand.

In einigen Fällen kann ein Oops einen Kernel-Panic auslösen, der einen Systemabsturz zur Folge hat. Zu diesen Situationen können gehören:

  • * Hoppla tritt im Code auf, der das Schloss hält
  • *Hoppla tritt bei der Kommunikation mit Hardwaregeräten auf
  • *oops tritt im Interrupt-Kontext auf
  • *Oops tritt im Leerlaufprozess (0) oder im Init-Prozess (1) auf, da der Kernel ohne diese beiden Prozesse nicht arbeiten kann

Wenn das Oops auftritt, während ein anderer Prozess ausgeführt wird, beendet der Kernel diesen Prozess und versucht, weiterzulaufen. Es kann viele Gründe für ein Oops-Ereignis geben, beispielsweise einen Speicherzugriff außerhalb der zulässigen Grenzen oder ungültige Anweisungen.

Die wichtigsten in Oops enthaltenen Informationen sind der Registerkontext und die Aufrufverfolgung, die Oops künstlich hervorrufen können, beispielsweise:

wenn(schlechte_Sache)
 INSEKT();
//oder BUG_ON(schlechte_Sache);

Sie können panic() verwenden, um schwerwiegendere Fehler zu verursachen. Der Aufruf von panic() gibt nicht nur eine Fehlermeldung aus, sondern setzt auch das gesamte System außer Betrieb. Nur in äußerst dringenden Fällen verwenden:

wenn(schreckliche_Sache)
 Panik("foo ist %ld!\n", foo);

Manchmal kann es beim Testen hilfreich sein, einfach die Stapelinformationen auszudrucken, z. B. mit dump_stack():

 wenn(!debug_check){
  printk(KERNEL_DEBUG "einige Informationen bereitstellen\n");
  : Der Stapel wird mit dem Stapelspeicher verknüpft.
 }

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Hinweise zur Speicherverwaltung von Linux-Kernel-Gerätetreibern
  • Hinweise zur Zeitverwaltung des Linux-Kernel-Gerätetreibers
  • Hinweise zum Zeichengerätetreiber des Linux-Kernel-Gerätetreibers
  • Hinweise zum virtuellen Dateisystem des Linux-Kernel-Gerätetreibers
  • Hinweise zur Verwendung der verknüpften Liste des Linux-Kernel-Gerätetreibers
  • Hinweise zum Proc-Dateisystem des Linux-Kernel-Gerätetreibers
  • Detaillierte Erklärung zum Schreiben von Linux-Kameratreibern
  • Analyse des Parameterübertragungsprozesses des Treibermoduls in Linux

<<:  Detaillierte Erläuterung der Idee zur Implementierung der Funktion zum Anzeigen und Verbergen von Passwörtern in Vue

>>:  Mehr als 100 Zeilen Code zur Implementierung von React Drag Hooks

Artikel empfehlen

So verwenden Sie Anti-Shake und Throttling in Vue

Inhaltsverzeichnis Vorwort Konzept Stabilisierung...

Änderung der Standardquelldatei sources.list des Ubuntu20.04 LTS-Systems

Wenn Sie den Inhalt der Datei „source.list“ verse...

Tiefgreifendes Verständnis des Ereignisausführungsmechanismus von JavaScript

Inhaltsverzeichnis Vorwort Das Prinzip der asynch...

Erfahrung in der Lösung von Tomcat-Speicherüberlaufproblemen

Vor einiger Zeit habe ich Testern eine Produktver...

XHTML: Rahmenstruktur-Tag

Rahmenstruktur-Tag <frameset></frameset&...

Einige Parameterbeschreibungen von Texteingabefeldern im Webdesign

<br />In Gästebüchern, Foren und anderen Ort...

Detaillierte Diskussion der Unterschiede zwischen Schleifen in JavaScript

Inhaltsverzeichnis Vorwort Aufzählbare Eigenschaf...

CSS-Lösung zum Zentrieren von Elementen mit variabler Breite und Höhe

1. Horizontale Mitte Öffentlicher Code: html: <...

Mehr als 100 Zeilen Code zur Implementierung von React Drag Hooks

Vorwort Der Quellcode umfasst insgesamt nur mehr ...

Detaillierte Erläuterung des Selinux-Grundkonfigurationstutorials unter Linux

selinux ( Security-Enhanced Linux) ist ein Linux-...

Details zur Bündelung statischer Ressourcen ohne JavaScript

Inhaltsverzeichnis 1. Benutzerdefinierter Import ...

So fügen Sie Wettervorhersagen in Ihre Website ein

Wir hoffen, dass wir durch die Einbindung der Wet...