We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
当方、Rocky Linux 9 で利用させて頂いております。 カーネルのバージョンが上がっても dkmsで自動ビルドする様にしていたのですが、先日 9.3 から 9.4 に バージョンアップして以降、ビルドに失敗する様になりました。
[root@rocky9 driver]# cat /etc/rocky-release Rocky Linux release 9.4 (Blue Onyx) [root@rocky9 driver]# uname -a Linux rocky9 5.14.0-427.16.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed May 8 17:48:14 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
手動でmakeしてみたところ、以下の通りエラーが発生します。
[[root@rocky9 driver]# pwd /usr/src/px4_drv/driver [root@rocky9 driver]# make 'revision.h' was updated. make[1]: ディレクトリ '/usr/src/kernels/5.14.0-427.16.1.el9_4.x86_64' に入ります CC [M] /usr/src/px4_drv/driver/driver_module.o CC [M] /usr/src/px4_drv/driver/ptx_chrdev.o 次のファイルから読み込み: ./include/linux/linkage.h:7, 次から読み込み: ./include/linux/preempt.h:10, 次から読み込み: ./include/linux/spinlock.h:56, 次から読み込み: ./include/linux/kref.h:16, 次から読み込み: /usr/src/px4_drv/driver/ptx_chrdev.h:13, 次から読み込み: /usr/src/px4_drv/driver/ptx_chrdev.c:9: /usr/src/px4_drv/driver/ptx_chrdev.c: 関数 ‘ptx_chrdev_context_create’ 内: ./include/linux/export.h:17:22: エラー: 互換性のないポインタ型から 1 番目の ‘class_create’ の引数に渡しています [-Werror=incompatible-pointer-types] 17 | #define THIS_MODULE (&__this_module) | ~^~~~~~~~~~~~~~~ | | | struct module * /usr/src/px4_drv/driver/ptx_chrdev.c:573:35: 備考: in expansion of macro ‘THIS_MODULE’ 573 | ctx->class = class_create(THIS_MODULE, name); | ^~~~~~~~~~~ 次のファイルから読み込み: ./include/linux/device.h:31, 次から読み込み: ./include/linux/cdev.h:8, 次から読み込み: /usr/src/px4_drv/driver/ptx_chrdev.h:16, 次から読み込み: /usr/src/px4_drv/driver/ptx_chrdev.c:9: ./include/linux/device/class.h:230:54: 備考: expected ‘const char *’ but argument is of type ‘struct module *’ 230 | struct class * __must_check class_create(const char *name); | ~~~~~~~~~~~~^~~~ /usr/src/px4_drv/driver/ptx_chrdev.c:573:22: エラー: 関数 ‘class_create’ への引数が多すぎます 573 | ctx->class = class_create(THIS_MODULE, name); | ^~~~~~~~~~~~ 次のファイルから読み込み: ./include/linux/device.h:31, 次から読み込み: ./include/linux/cdev.h:8, 次から読み込み: /usr/src/px4_drv/driver/ptx_chrdev.h:16, 次から読み込み: /usr/src/px4_drv/driver/ptx_chrdev.c:9: ./include/linux/device/class.h:230:29: 備考: ここで宣言されています 230 | struct class * __must_check class_create(const char *name); | ^~~~~~~~~~~~ cc1: いくつかの警告はエラーとして取り扱われます make[2]: *** [scripts/Makefile.build:299: /usr/src/px4_drv/driver/ptx_chrdev.o] エラー 1 make[1]: *** [Makefile:1934: /usr/src/px4_drv/driver] エラー 2 make[1]: ディレクトリ '/usr/src/kernels/5.14.0-427.16.1.el9_4.x86_64' から出ます make: *** [Makefile:19: px4_drv.ko] エラー 2 [[root@rocky9 driver]#
尚、もう一台 Rocky Linux 8 で録画サーバーを稼働させていますが、こちらは問題ありません。
[root@rocky8 ~]# cat /etc/rocky-release Rocky Linux release 8.9 (Green Obsidian) [root@rocky8 ~]# uname -a Linux rocky8 4.18.0-513.24.1.el8_9.x86_64 #1 SMP Thu Apr 4 18:13:02 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
この問題を解決するにはどうすれば良いでしょうか?
The text was updated successfully, but these errors were encountered:
tsukumijima@76408ca
Sorry, something went wrong.
早速のご回答ありがとうございます。 結論から申し上げますと最終的にはビルドに成功しましたが、ご提示頂いた コードそのままでは同じエラーが発生しました。
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,4,0) ctx->class = class_create(name); #else ctx->class = class_create(THIS_MODULE, name); #endif
で、カーネルバージョンが6.4以上かどうかでclass_create() の呼び方を変えていますが、Rocky Linux 9.4 のカーネルバージョンは
[root@rocky9 ~]# uname -r 5.14.0-427.16.1.el9_4.x86_64
の通り 5.14 ですので else 以降の処理に分岐し、結果として古い(?)呼び出し方が選択されます。 (因みにそれまでビルドに成功していた Rocky Linux 9.3 のカーネルバージョンは 5.14.0-362.24.1 です)。
そこでこの分岐処理をカットし、単純に
ctx->class = class_create(THIS_MODULE, name);
を
ctx->class = class_create(name);
に変更してみたところ、ビルドに成功しました。
当方で発生した問題はこれで解決しましたが、この方法では Rocky Linux 8 や 9.3 以前では逆にエラーになると思いますので、可能でしたら汎用性を持たせて頂きたく、お願い致します。
No branches or pull requests
当方、Rocky Linux 9 で利用させて頂いております。
カーネルのバージョンが上がっても dkmsで自動ビルドする様にしていたのですが、先日 9.3 から 9.4 に
バージョンアップして以降、ビルドに失敗する様になりました。
手動でmakeしてみたところ、以下の通りエラーが発生します。
尚、もう一台 Rocky Linux 8 で録画サーバーを稼働させていますが、こちらは問題ありません。
この問題を解決するにはどうすれば良いでしょうか?
The text was updated successfully, but these errors were encountered: