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プロジェクトのパッケージ化の詳細な説明

推薦する

JavaScript でのモグラ叩きゲームの実装

この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

記事では、js を使用して弾幕効果を実現する方法を説明します

目次新しい HTML ファイルを作成します。初期テンプレートを作成するHTML の追加CSS パディ...

CSS でよく発生する問題の整理 (ロゴのハッキング/コンテナの固定/画像の垂直方向の中央揃え)

1. IEブラウザモードハックロゴ1. CSSハックロゴコードをコピーコードは次のとおりです。 ie...

mysql 8.0.16 winx64.zip インストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.16 winx64.zipのインストールと設定方法の具体的なコード...

MySQL トリガーの使用方法と利点と欠点の紹介

目次序文1. トリガーの概要2. トリガーの作成2.1 トリガー構文の作成2.2 コード例3. トリ...

WebプロジェクトをIdeaにインポートし、Tomcatに公開する問題を解決します

Idea は既存の Web プロジェクトをインポートして Tomcat に公開しますが、Tomcat...

MySQL のダウンロードとインストールの詳細グラフィックチュートリアル

1. MySQLデータベースをダウンロードするには、公式Webサイトにアクセスしてください:http...

ユニークインデックスの S ロックと X ロックによる MySQL デッドロック ルーチンの理解

「初心者向けソースコードからの MySQL デッドロック問題の理解」では、MySQL ソースコードを...

Vue フロントエンドと Django バックエンドを使用して、一定期間内のデータをクエリする方法

序文開発プロセスでは、すべてのデータではなく特定の期間内のデータをクエリするなど、クエリのフィルタリ...

MySQL は制限を使用してページング例メソッドを実装します

1. 制限の基本的な実装一般的に、クライアントは、pageNo (ページ番号) と pageSize...

フィボナッチ数列のJavaScript出力を実装する方法

目次トピック分析する基本的な解決策基本的な再帰再帰最適化要約するトピック私たちが答えなければならない...

フロントエンドの面接でよく聞かれる JavaScript の質問の完全なリスト

目次1. 手書きのインスタンス2.配列のマップメソッドを実装する3. Reduceは配列のmapメソ...

jsはウォーターフォールフローのボトムアウトによるデータの動的ロードを実現します

この記事では、ウォーターフォールフローが底に達したときにデータを動的にロードするためのjsの具体的な...

Vue要素はテーブルの追加、削除、データの変更を実装します

この記事では、テーブル内のデータを追加、削除、変更するためのvue要素の具体的なコードを参考までに共...

nginxのアップストリーム設定と機能の詳細な説明

設定例 アップストリームバックエンド{ サーバー backend1.example.com 重み=5...