2018年07月30日

カーネルモジュール作成、@Raspberry Pi 3 ACentOS6.9 BCentOS7.2, CentOS7.5 、insmod,lsmod, rmmod, /var/log/message, gccバージョン,kernel-headersパッケージ

1.@CentOS6.9で作成した カーネルモジュールhello.koをinsmod。
 成功後、Bへscp送信。
 Bでinsmod失敗。

Jul 30 00:12:59 c75240 kernel: hello: disagrees about version of symbol module_layout

【参考】Linuxのカーネルモジュールの整合性検証の仕組み
https://blog.bitmeister.jp/?p=2916
キーワード:vermagic、最近のLinuxはmodversions

/usr/src/kernels/3.10.0-862.el7.x86_64/include/linux/vermagic.h
/usr/src/kernels/3.10.0-862.9.1.el7.x86_64/include/linux/vermagic.h
/usr/src/kernels/3.10.0-862.9.1.el7.x86_64.debug/include/linux/vermagic.h
------------------------------
ファイルサイズ 0やった
/usr/src/kernels/3.10.0-862.el7.x86_64/include/config/modversions.h
/usr/src/kernels/3.10.0-862.9.1.el7.x86_64/include/config/modversions.h
/usr/src/kernels/3.10.0-862.9.1.el7.x86_64.debug/include/config/modversions.h
---

# modinfo hello.ko
filename: hello.ko
license: GPL
retpoline: Y
rhelversion: 7.5
srcversion: 68351AC1142B2310C91DFCC
depends:
vermagic: 3.10.0-862.el7.x86_64 SMP mod_unload modversions


# grep MODVERSION /boot/config-3.10.0-862.el7.x86_64
CONFIG_MODVERSIONS=y



2.BCentOS7.2でソースをコンパイル。
  insmod成功後、 CentOS7.5にscp送信。
  insmod確認。


Bログ例
# tail -f /var/log/messages

Jul 29 23:59:28 c75240 kernel: hello: loading out-of-tree module taints kernel.
Jul 29 23:59:28 c75240 kernel: hello: module verification failed: signature and/or required key missing - tainting kernel
Jul 29 23:59:28 c75240 kernel: Hello!

■備考
後でパッケージ kernel-headers等の必要パッケージを記載する。
linux/module.hなどがどのパッケージでインストールされるか
記載しておく。

# rpm -qf /usr/src/kernels/3.10.0-862.el7.x86_64/include/linux/module.h
kernel-devel-3.10.0-862.el7.x86_64

# rpm -qf /usr/src/kernels/3.10.0-862.el7.x86_64/include/linux/kernel.h
kernel-devel-3.10.0-862.el7.x86_64


◎日経Linux(リナックス) 2018年 3月号:円
日経Linux(リナックス) 2018年 3月号 [雑誌]
日経Linux(リナックス) 2018年 3月号 [雑誌]



◎Linuxデバイスドライバ 第3版:円
Linuxデバイスドライバ 第3版
Linuxデバイスドライバ 第3版




==========================
hello.c
==========================
#include
#include

static int hello_init(void)
{
printk("Hello、Jack!\n");
return 0;
}

static void hello_cleanup(void)
{
printk("Good-bye, Jack!\n");
}

module_init(hello_init);
module_exit(hello_cleanup);

MODULE_LICENSE("GPL");
posted by アンドレアス at 11:34| Comment(0) | vi上級 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。