イヌツムリのメモ

学習したことのメモである。しかし、他の人が読んでもわかるように書こう。

modprobe: ERROR: could not insert 'module_name': Exec format error

はじめに

modprobeしたが、モジュールをロードできなかった。
問題を解決できなかったが、別アプローチでロードすることはできた。

事象

$ make -C /lib/modules/$(uname -r)/build M="drivers/module_name" modules
# make -C /lib/modules/$(uname -r)/build M="drivers/module_name" modules_install
# modprobe module_name
modprobe: ERROR: could not insert 'module_name': Exec format error

$ dmesg
module: x86/modules: Skipping invalid relocation target, existing value is nonzero for type 1, loc ffffffffc05af400, val ffffffffc05ad168

対策

makeファイルを自分で書いてmodprobeしたところ、ロードすることができた。
なぞ。

調査

 loc = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr
                        + rel[i].r_offset;

./arch/x86/kernel/module.cのapply_relocate_add()内で、locが0でないことにより、エラーを吐いている。
elf bss