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

推薦する

MySQL のストレージ エンジンの違いと比較

MyISAM ストレージエンジンMyISAM は ISAM ストレージ エンジンに基づいており、それ...

MySQL マスタースレーブ構築(複数のマスターと 1 つのスレーブ)の実装アイデアと手順

背景:最近、同社のプロジェクトは同時実行のプレッシャーに耐えられないようなので、最適化が差し迫ってい...

vue N​​progress のプログレスバー機能を実装する際の一般的な問題

NProgress は、ページがジャンプしたときにブラウザの上部に表示される進行状況バーです。公式ウ...

Dockerデータストレージのバインドマウントの詳細な説明

この記事を読む前に、Volumes について予備知識を身に付けておいてください。詳細については、こち...

HTML(divレイヤー)を介してFLASHにリンクを追加するための実装コード

今日、クライアントが広告を掲載したいのですが、提供された素材は Flash です。私たちはあまり気に...

MySQLは既存のコンテンツを保持し、後でコンテンツを追加します

このコマンドは、データ テーブル ff_vod を変更し、vod_url フィールドの内容の後に 9...

Explainキーワードに基づいてMySQLインデックス機能を最適化する方法

EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...

Windows プラットフォーム構成 5.7 バージョン + MySQL データベース サービス

ルートユーザーのパスワードを初期化するプロセスと、よくある2つの問題の解決策が含まれています。 1....

Docker-Composeコマンドの使い方の詳しい説明

Docker コンテナはさまざまな方法で管理およびデプロイできます。 Docker コマンドを直接使...

docker を使用してシンプルな C/C++ プログラムをデプロイする方法

1. まずhello-world.cppファイルを作成しますプログラムコードは次のとおりです。 #i...

Docker+nextcloudで個人用クラウドストレージシステムを構築

1. Dockerのインストールと起動 yum で epel-release をインストールします ...

MySQL 条件付きクエリと使用法および優先順位の例の分析

この記事では、例を使用して、MySQL 条件クエリ and or の使用方法と優先順位を説明します。...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...

Linux で同じ内容のファイルを識別する方法の詳細な説明

序文ファイルのコピーによってハードドライブのスペースが大量に浪費され、ファイルを更新するときに混乱が...

実用的な情報が満載のJavaScript Webフォーム機能通信

1. はじめに先ほど、フロントエンドの表示の問題について説明しました。では、前のコンテンツに戻って、...