Lösung für den Fehler von 6ull beim Laden des Linux-Treibermoduls

Lösung für den Fehler von 6ull beim Laden des Linux-Treibermoduls

0x01 Das Treibermodul konnte nicht geladen werden

Die Beschreibung des Fehlers beim Laden des Treibers lautet wie folgt. Die Fehlermeldung gibt an, dass die auf der Karte ausgeführte Linux-Kernelversion 4.1.15-g49efdaa und die Architektur ARMv7 ist; während die zum Kompilieren des Treibers verwendete Kernel-Quellcodeversion 4.1.15 und die Architektur ARMv6 ist. Dies weist darauf hin, dass der zum Kompilieren des Treibers verwendete Kernel-Versionsname und die Architektur nicht mit denen auf der Platine übereinstimmen.

root@ALIENTEK-IMX6U:~/get# insmod led.ko
[1634.442887] führte: Version Magic „4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8“ sollte „4.1.15-g49efdaa SMP preempt mod_unload modversions ARMv7 p2v8“ sein.
insmod: FEHLER: Modul konnte nicht eingefügt werden led.ko: Ungültiges Modulformat

0x02 Lösung

Es gibt zwei Möglichkeiten, dieses Problem zu lösen:
(1) Kompilieren Sie den Kernel und den Gerätebaum neu und brennen Sie diese auf die Platine.
(2) Ändern Sie die Kernelkonfigurationsinformationen im Host, um sie mit denen auf der Platine in Einklang zu bringen.

Das erneute Brennen des Kernels ist mühsam, deshalb verwenden wir hier Methode 2 .

1. Geben Sie die Befehle uname -r und uname -p im Board-Terminal ein, um die Versions- und Architekturinformationen des auf dem Board laufenden Kernels anzuzeigen.

root@ALIENTEK-IMX6U:~/get# uname -r
4.1.15-g49efdaa
root@ALIENTEK-IMX6U:~/get# uname -p
armv7l

Die auf der Platine laufende Linux-Kernelversion ist 4.1.15-g49efdaa und die Prozessorarchitektur ist ARMv7

2. Geben Sie das Stammverzeichnis des vom Treibermodul verwendeten Linux-Kernels im Host ein und führen Sie make menuconfig aus, um die grafische Konfigurationsoberfläche des Linux-Kernels zu starten (wenn Sie menuconfig nicht verwenden können, können Sie Baidu verwenden, um die entsprechenden abhängigen Bibliotheken zu installieren).

Geben Sie System Type ein, wie in der folgenden Abbildung gezeigt:

Bildbeschreibung hier einfügen

Geben Sie dann die Option Multiple platform selection ein:

Bildbeschreibung hier einfügen

Entfernen Sie dann in der folgenden Benutzeroberfläche das * vor der ersten ARMv6 based platforms(ARM11) (drücken Sie nach der Auswahl die Leertaste, um abzubrechen).

Bildbeschreibung hier einfügen

Nach dem Abbrechen, Speichern und Beenden wird die vom Kernel unterstützte Architektur auf ARMv7 geändert.
Geben Sie nach der Konfiguration von menuconfig keine anderen Kernelkonfigurationsbefehle ein, da sonst die vorherige Konfiguration gelöscht wird.

3. Öffnen Sie das Makefile im Kernel-Stammverzeichnis und fügen Sie nach der Variable EXTRAVERSION die zweite Hälfte der Versionsnummer des Linux-Kernels hinzu, der auf Ihrem Board läuft. Die zweite Hälfte meines Kernels lautet beispielsweise -g49efdaa .

Bildbeschreibung hier einfügen

Speichern Sie die Änderungen nach Abschluss und führen Sie make -j12 im Stammverzeichnis des Linux-Kernels aus, um den Kernel neu zu kompilieren.
Kompilieren Sie das Treibermodul neu, nachdem der Kernel kompiliert wurde.

Nachdem das Treibermodul kompiliert wurde, verwenden Sie NFS, um es auf die Karte herunterzuladen. Geben Sie modinfo [驅動模塊名] ein, um die Informationen zum Treibermodul anzuzeigen:

root@ALIENTEK-IMX6U:~/get# modinfo led.ko
Dateiname: /home/root/get/led.ko
Autor: zuozhongkai
Lizenz: GPL
Quelle:597E1DDC8A372707B8FD0DE
kommt darauf an:
vermagic: 4.1.15-g49efdaa SMP preempt mod_unload modversionen ARMv7 p2v8

Es ist ersichtlich, dass die Kernelversion und die Prozessorarchitektur des in vermagic Zeile angezeigten Treibermoduls mit den Kernelinformationen auf der Platine übereinstimmen und das Treibermodul erfolgreich geladen werden kann.

root@ALIENTEK-IMX6U:~/get# uname -r
4.1.15-g49efdaa
root@ALIENTEK-IMX6U:~/get# uname -p
armv7l

Zusammenfassen

Dies ist das Ende dieses Artikels über die Lösung für den Fehler beim Laden des Linux-Treibermoduls durch 6ull. Weitere verwandte Inhalte zum Fehler beim Laden des Linux-Treibermoduls finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Linux-Kernel-Gerätetreiber. Zusammenfassung der Hinweise zum Lademechanismus von Linux-Kernelmodulen.

<<:  So verwenden Sie den Flat Style zum Gestalten von Websites

>>:  Detaillierte Erläuterung der Vue-Projektverpackung

Artikel empfehlen

Probleme beim Springen auf HTML-Seiten und bei der Parameterübertragung

HTML-Seitensprung: Fenster.öffnen(URL, "&quo...

MySQL-Batch entfernt Leerzeichen in einem bestimmten Feld

Gibt es in MySQL eine Möglichkeit, Leerzeichen st...

So installieren Sie den MySQL 5.7.28-Binärmodus unter CentOS 7.4

Linux-Systemversion: CentOS7.4 MySQL-Version: 5.7...

Ändern Sie die Dateiberechtigungen (Eigentum) unter Linux

Linux und Unix sind Mehrbenutzer-Betriebssysteme,...

Vollständiger Code zur Implementierung der Vue-Backtop-Komponente

Wirkung: Code: <Vorlage> <div Klasse=&qu...

Einführung und Installation von vue-cli

Inhaltsverzeichnis 1. Einleitung 2. Einführung in...

Hinweise zum Systemaufruf des Linux-Kernel-Gerätetreibers

/**************************** * Systemaufruf*****...

Eine "klassische" Falle der MySQL UPDATE-Anweisung

Inhaltsverzeichnis 1. Problematische SQL-Anweisun...

Führen Sie die Schritte zum Aktivieren der GZIP-Komprimierung in Nginx aus.

Inhaltsverzeichnis Vorwort 1. Konfigurieren Sie d...

MySQL-Abfrageoptimierung: Ursachen und Lösungen für langsame Abfragen

Freunde, die in der Entwicklung tätig sind, insbe...

Einige kleine Methoden, die häufig in HTML-Seiten verwendet werden

Fügen Sie das Tag <Head> hinzu <meta http...

Eine kleine Sammlung von HTML-Meta-Tags

<Head>……</head> gibt den Dateikopf vo...

Detaillierte Analyse des Tomcat-Servers des Centos 7-Systems

Inhaltsverzeichnis 1. Der Ursprung von Tomcat 1. ...

Miniprogramm zur Implementierung der Sieve-Lotterie

In diesem Artikelbeispiel wird der spezifische Co...