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 8.0.16 winx64 のインストールと設定方法のグラフィックチュートリアル

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

Mysql 5.6ではユーザー名とパスワードを変更するメソッドが追加されました

まずMySQLにログインする シェル> mysql --user=root mysqlパスワー...

HTML ページでギリシャ文字を使用する方法

ギリシャ文字は、特に数学や物理学などの科学技術分野で非常によく使用される記号列であり、特定の意味を持...

MySQL クエリ フィールド タイプが json の場合の 2 つのクエリ メソッド

テーブル構造は次のとおりです。 id varchar(32) 情報JSONデータ: id = 1 i...

CentOS での MySQL ログイン 1045 問題を解決する

アプリケーション全体を CentOS にデプロイする必要があるため、当然ながらデータベース操作は不可...

jQuery を使用してカルーセル効果を実装する

本日ご紹介するのは、jQuery を使用してシンプルなカルーセルを実装する方法です。実装の原則は次の...

HTML+CSSで充電水滴融合特殊効果コードを実現

目次序文:成し遂げる:要約:まず効果を見てみましょう: 序文:このアイデアは、Bilibili のア...

Centos7サーバーの基本的なセキュリティ設定手順

pingスキャンをオフにする(役に立たないが)まずルートに切り替えるエコー 1 > /proc...

VirtualBox6上のCentOS7で静的IPを設定する方法と注意点

VirtualBox をインストールした後、CentOS 7 をインストールします。ここでは詳細には...

Linux の 5 ステップ ビルド カーネル ツリー

目次0. システムに付属するカーネルツリー1. 環境設定最初のステップステップ2 2. ソースコード...

Dockerでudpポート番号を指定する問題を解決する

Docker はコンテナを起動するときにアクセス ポートを指定します。複数の -p オプションを使用...

JavaScript BOM の説明

目次1. BOMの紹介1. JavaScriptは3つの部分から構成される2.ウィンドウオブジェクト...

Linux サーバーに SSH パスワードなしでログインする方法

テスト サーバーにログインするたびに、必ず ssh ログインのパスワードを入力する必要があります。ロ...

跳ねるボールを実現するネイティブjs

思いつきで、小さなボールが跳ね返るケーススタディを書いてみました。具体的な内容は以下のとおりです。主...

親ページの更新を制御するために HTML で iframe を実装するためのアイデアとコード

1. 応用シナリオ親ページ a.jspサブページ b.jsp (ページ a に埋め込まれた ifra...