insmode getを使用してドライバをロードする:module_layoutシンボルバージョンに同意しない

insmode getを使用してドライバをロードする:module_layoutシンボルバージョンに同意しない

ARMシステムのLinuxカーネル用の単純なドライバをコンパイルしました。

$uname -a

Linux CR5 4.4.171-cr5 #2 Tue Mar 10 11:49:00 CET 2020 armv7l GNU/Linux

コンパイルするには、次の場所にある破損したシステムの構成ファイルを使用しました。

/proc/config.gz

バニラカーネルをダウンロードし、4.4.5タグをチェックアウトし、設定ファイルを置き換え、カーネルをコンパイルし、armツールchineを使用してドライバをコンパイルしました。

gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabi このドライバには簡単なコードが含まれています。

    #include <linux/module.h>
    #include <linux/kernel.h>

    int init_module(void) {
        printk(KERN_INFO "Hello world.\n");
        return 0;
    }

    void cleanup_module(void) {
        printk(KERN_INFO "Goodbye world.\n");
    }

使ったモジュールの挿入ドライバがロードされますが、端末のエラーメッセージは次のとおりです。

insmod: エラー: モジュールを挿入できません test_module.ko: 無効なモジュール形式

存在する情報このメッセージを受け取りました

test_module: module_layout シンボルバージョンに同意しません。

しかし、システムでモジュールを実行することと私のモジュールを実行することを比較すると、readelf-a

これELFヘッダ同じファイル属性同じです。

また何を確認できますか?たぶん、モジュールのロードがカーネルによってブロックされたのでしょうか?どうやって確認しますか?私は次に何ができるかについてリーダーとして機能する人がいますか?

メモ

  • 簡単なCプログラムが壊れたので、ツールマシンは大丈夫だと思います。
  • insmod-f 良くない

ありがとう

答え1

同じレイアウトをすべて変更しても、レイアウトに問題があります。

ここで答えを見つけてください

ここ

関連情報