yasukata / kernel_module_cdev_template

Linux character device example
2 stars 0 forks source link

Cannot Compile #1

Open ghost opened 6 years ago

ghost commented 6 years ago

以下のようなエラーが出てしまいます。

@[hachi@hachi01:~/project/kernel_module_cdev_template] make make -C /lib/modules/4.13.0-19-generic/build M='/home/hachi/project/kernel_module_cdev_template' EXTRA_CFLAGS='-I/home/hachi/project/kernel_module_cdev_template/include' modules make[1]: ディレクトリ '/usr/src/linux-headers-4.13.0-19-generic' に入ります CC [M] /home/hachi/project/kernel_module_cdev_template/kmod.o /home/hachi/project/kernel_module_cdev_template/kmod.c:73:11: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] .fault = kmod_mem_fault, ^~~~~~ /home/hachi/project/kernel_module_cdev_template/kmod.c:73:11: note: (near initialization for ‘kmod_mmap_ops.fault’) cc1: some warnings being treated as errors scripts/Makefile.build:309: ターゲット '/home/hachi/project/kernel_module_cdev_template/kmod.o' のレシピで失敗しました

カーネルは4.13.0-19-generic、Ubuntu 17.10を利用しています

yasukata commented 6 years ago

ご報告ありがとうございます。返信が遅くなり申し訳ありません。 ご指摘頂きましたエラーは、linux/include/linux/mm.h の中に定義されている、vm_operations_struct 構造体のメンバである fault 関数の引数が、新しいバージョンの Linux カーネルで変更されたことによるもののようです。 古いバージョン ( 4.10 ) では、以下のようだったものが、

int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);

新しいバージョン ( 4.13 ) では、宣言が以下のように変更されていました。

int (*fault)(struct vm_fault *vmf);

この変更に対応するために、カーネルのバージョンによって、引数を変更する箇所を追加しました。 https://github.com/yasukata/kernel_module_cdev_template/commit/b455554ce9e3fc308413f0e6a14679ac34ba83eb この修正を追加後、手元の環境では、4.13 でもコンパイルできるようになりました。