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

推薦する

QT が MYSQL データベースに接続するための詳細な手順

最初のステップは、対応するデータベースモジュール(sql)をプロジェクトファイル( .pro )に追...

MySQL パフォーマンス最適化のヒント

MySQL パフォーマンスの最適化MySQL はインターネット企業で広く使用されており、MySQL ...

Reactコンポーネントをフルスクリーンにする方法

導入この記事は、 React + antdをベースにして、完全な全屏demoを紹介します。その理由は...

JS WebSocketを使用して簡単なチャットを実装する方法

目次ショートポーリングロングポーリングウェブソケットコミュニケーションの原則シンプルな1対1チャット...

ベースリンクタグの使用の紹介ベース

<br />リンクをクリックすると、ポップアップ表示される Web ページ アドレスは ...

クロスドメインの問題を解決するためのNginxの実用的な方法

フロントエンドとバックエンドを分離し、nginxを使用してクロスドメインの問題を解決するフロントエン...

CSS を使用して、画像に 3D の凸型と凹型のエフェクト (フレーム外に凸型、またはフレーム内に凹型) を実現します。

Ⅰ. 問題の説明: CSS を使用して画像の 3D 凸凹効果を実現します。 Ⅱ実施手順は以下のとお...

Reactは複雑な検索フォームの展開と折りたたみ機能を実装します

時間に余裕を持って、過去を忘れましょう。前のセクションでは、[検索] フォームとクエリおよびリセット...

CSS で 2 つの固定列と 1 つの適応列を実装するいくつかの方法

この記事では、CSS で 2 つの固定列と 1 つのアダプティブ列を実装するいくつかの方法を紹介し、...

HTML の div と span の違い (共通点と相違点)

共通点: DIV タグと SPAN タグは、コンテンツ全体を非表示にしたり、コンテンツ全体を移動した...

html2canvas を使用して HTML コードを画像に変換する方法

コードを画像に変換するにはhtml2canvas は、ブラウザから Web ページのスクリーンショッ...

MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル MySQL 8.0 の新しいパスワード認証方法

この記事では、参考までにMySQL8.0.11のインストールと設定方法、およびMySQL8.0の新し...

要素のフォームコンポーネントに関する注意事項

要素フォームとコード表示詳細はエレメントフォーム公式サイトをご覧ください構造と機能の分析紹介とソース...

XHTML の IE 条件付きコメント

<br />条件付きコメントはIEシリーズ製品上でXHTMLコード処理を分離して行うこと...

海外のウェブページのカラーマッチング事例20選共有

この記事では、優れた Web ページのカラー マッチングの事例を 20 件集めて紹介します。これらの...