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 良くない
ありがとう