6ull が Linux ドライバ モジュールをロードできない問題の解決方法

6ull が Linux ドライバ モジュールをロードできない問題の解決方法

0x01 ドライバーモジュールのロードに失敗しました

ドライバーのロードに失敗した理由は次のとおりです。エラー メッセージは、ボード上で実行されている Linux カーネルのバージョンが 4.1.15-g49efdaa であり、アーキテクチャが ARMv7 であることを示しています。一方、ドライバーのコンパイルに使用されたカーネル ソース コードのバージョンは 4.1.15 であり、アーキテクチャが ARMv6 です。これは、ドライバーをコンパイルするために使用されるカーネル バージョン名とアーキテクチャが、ボード上で実行されているものと一致していないことを示します。

root@ALIENTEK-IMX6U:~/get# insmod led.ko
[ 1634.442887] led: バージョンマジック '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' は '4.1.15-g49efdaa SMP preempt mod_unload modversions ARMv7 p2v8 ' である必要があります
insmod: エラー: モジュール led.ko を挿入できませんでした: モジュール形式が無効です

0x02 ソリューション

これを解決するには 2 つの方法があります。
(1)カーネルとデバイスツリーを再コンパイルし、ボードに書き込みます。
(2)ホストのカーネル構成情報をボード上のカーネル構成情報と一致するように変更する。

カーネルの再書き込みは面倒なので、ここでは方法 2 を使用します。

1. ボード端末でuname -rおよびuname -pコマンドを入力して、ボード上で実行されているカーネルのバージョンとアーキテクチャ情報を表示します。

root@ALIENTEK-IMX6U:~/get# uname -r
4.1.15-g49efdaa
root@ALIENTEK-IMX6U:~/get# uname -p
アームv7l

ボード上で動作するLinuxカーネルのバージョンは4.1.15-g49efdaaで、プロセッサアーキテクチャはARMv7です。

2. ホストのドライバーモジュールが使用する Linux カーネルのルートディレクトリに入り、 make menuconfigを実行して Linux カーネルのグラフィカル構成インターフェイスを起動します (menuconfig を使用できない場合は、Baidu を使用して対応する依存ライブラリをインストールできます)。

下の図に示すように、 System Typeオプションを入力します。

ここに画像の説明を挿入

次に、 Multiple platform selectionオプションを入力します。

ここに画像の説明を挿入

次に、下のインターフェースで、最初のARMv6 based platforms(ARM11)の前の*をキャンセルします (選択後にスペースバーを押してキャンセルします)

ここに画像の説明を挿入

キャンセル後、保存して終了すると、カーネルでサポートされるアーキテクチャが ARMv7 に変更されます。
menuconfig を設定した後は、他のカーネル設定コマンドを入力しないでください。そうしないと、以前の設定がフラッシュされます。

3. カーネル ルート ディレクトリの Makefile を開き、ボード上で実行されている Linux カーネル バージョン番号の後半部分をEXTRAVERSION変数の後に追加します。たとえば、私のカーネルの後半部分は-g49efdaaです。

ここに画像の説明を挿入

完了したら変更を保存し、Linux カーネルのルート ディレクトリでmake -j12を実行してカーネルを再コンパイルします。
カーネルをコンパイルした後、ドライバー モジュールを再コンパイルします。

ドライバー モジュールがコンパイルされたら、NFS を使用してボードにダウンロードします。modinfo modinfo [驅動模塊名]と入力して、ドライバー モジュール情報を表示します。

root@ALIENTEK-IMX6U:~/get# modinfo led.ko
ファイル名: /home/root/get/led.ko
著者: zuozhongkai
ライセンス: GPL
ソースバージョン:597E1DDC8A372707B8FD0DE
依存:
vermagic: 4.1.15-g49efdaa SMP プリエンプト mod_unload modversions ARMv7 p2v8

vermagic行に表示されているドライバ モジュールのカーネル バージョンとプロセッサ アーキテクチャがボード内のカーネル情報と一致しており、ドライバ モジュールを正常にロードできることがわかります。

root@ALIENTEK-IMX6U:~/get# uname -r
4.1.15-g49efdaa
root@ALIENTEK-IMX6U:~/get# uname -p
アームv7l

要約する

6ull が Linux ドライバー モジュールをロードできない問題の解決方法については、これで終わりです。Linux ドライバー モジュールをロードできない問題に関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux カーネル デバイス ドライバー Linux カーネル モジュールの読み込みメカニズム メモの概要

<<:  フラットスタイルを使用してウェブサイトをデザインする方法

>>:  Vueプロジェクトのパッケージ化の詳細な説明

推薦する

HTMLの行間設定方法と問題点

<p></p> の行間隔を設定するには、style="line-h...

Windows での MySQL 8.0.16 のインストールと設定方法のグラフィック チュートリアル

この記事は、参考のためにMySQL 8.0.16のインストールグラフィックチュートリアルを記録してい...

js は axios 制限リクエスト キューを実装します

目次背景は次のとおりです。何が起こるでしょうか?背景は次のとおりです。実際の開発では、ネットワークの...

MySQL でコマンドを使用して階層検索を実現する方法の詳細な説明

序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...

基本構造、ドキュメント タイプ、ヘッダー、本文などの一般的な HTML 要素の概要。

1. 基本構造:コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBL...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

ローカルストレージにブール型の値を保存する際の落とし穴を解決する

LocalStorageはブール値を保存します今日、ブール値データを保存するために localsto...

WeChatミニプログラムがシームレスなスクロールを実現

この記事の例では、WeChatアプレットのシームレスなスクロールを実現するための具体的なコードを参考...

VMware Workstation に Windows Server 2019 をインストールする (グラフィック チュートリアル)

キーの入力を求められた場合は、[キーがありません]を選択します。デスクトップエクスペリエンスを選択す...

MySQL msiバージョンのダウンロードとインストールの初心者向けの詳細なグラフィックチュートリアル

目次1. MySQL msiバージョンをダウンロードする2. インストール3. 環境変数を設定する1...

大規模な MySQL テーブルに対する count() の実装を最適化しました

以下は、B+ ツリーのデータ構造と実験結果からの推測に基づいた私の判断です。間違いがあればご指摘くだ...

IdeaはリモートDockerをデプロイし、ファイルを構成する

1. LinuxサーバーのDocker構成ファイルを変更する vim /usr/lib/system...

Nginx フォワードプロキシとリバースプロキシの違いと原理分析

1. フォワードプロキシとリバースプロキシの違いフォワード プロキシはクライアントのプロキシとして機...

私が遭遇したIE8の互換性に関する注意事項

1. IE8 の getElementById は id のみをサポートし、name はサポートしま...