Skip to content
New issue

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

driver: Linuxカーネルv6.4の関数シグニチャの変更に対応 #26

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

kznrluk
Copy link

@kznrluk kznrluk commented Jul 5, 2023

Arch Linuxにて、カーネルを 6.4.1 に更新したところDKMSのビルドが失敗するようになりました。

DKMS make.log for px4_drv-0.2.1 for kernel 6.4.1-arch2-1 (x86_64)
Wed Jul  5 15:26:58 JST 2023
'revision.h' was updated.
  CC [M]  /var/lib/dkms/px4_drv/0.2.1/build/driver/driver_module.o
  CC [M]  /var/lib/dkms/px4_drv/0.2.1/build/driver/ptx_chrdev.o
In file included from ./include/linux/linkage.h:7,
                 from ./include/linux/preempt.h:10,
                 from ./include/linux/spinlock.h:56,
                 from ./include/linux/kref.h:16,
                 from /var/lib/dkms/px4_drv/0.2.1/build/driver/ptx_chrdev.h:13,
                 from /var/lib/dkms/px4_drv/0.2.1/build/driver/ptx_chrdev.c:9:
/var/lib/dkms/px4_drv/0.2.1/build/driver/ptx_chrdev.c: In function ‘ptx_chrdev_context_create’:
./include/linux/export.h:27:22: error: passing argument 1 of ‘class_create’ from incompatible pointer type [-Werror=incompatible-pointer-types]
   27 | #define THIS_MODULE (&__this_module)
      |                     ~^~~~~~~~~~~~~~~
      |                      |
      |                      struct module *
/var/lib/dkms/px4_drv/0.2.1/build/driver/ptx_chrdev.c:573:35: note: in expansion of macro ‘THIS_MODULE’
  573 |         ctx->class = class_create(THIS_MODULE, name);
      |                                   ^~~~~~~~~~~
In file included from ./include/linux/device.h:31,
                 from ./include/linux/cdev.h:8,
                 from /var/lib/dkms/px4_drv/0.2.1/build/driver/ptx_chrdev.h:16:
./include/linux/device/class.h:230:54: note: expected ‘const char *’ but argument is of type ‘struct module *’
  230 | struct class * __must_check class_create(const char *name);
      |                                          ~~~~~~~~~~~~^~~~
/var/lib/dkms/px4_drv/0.2.1/build/driver/ptx_chrdev.c:573:22: error: too many arguments to function ‘class_create’
  573 |         ctx->class = class_create(THIS_MODULE, name);
      |                      ^~~~~~~~~~~~
./include/linux/device/class.h:230:29: note: declared here
  230 | struct class * __must_check class_create(const char *name);
      |                             ^~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:252: /var/lib/dkms/px4_drv/0.2.1/build/driver/ptx_chrdev.o] Error 1
make[1]: *** [Makefile:2026: /var/lib/dkms/px4_drv/0.2.1/build/driver] Error 2
make: *** [Makefile:19: px4_drv.ko] Error 2

下記コミットでの変更に対応し class_create の引数を削除しました。

torvalds/linux@6e30a66
torvalds/linux@dcfbb67

@tsukumijima
Copy link

横から失礼します。
このプルリクエストでは単純に THIS_MODULE の引数が削除されていますが、それでは現状大半を占める Linux カーネル 6.3 系以前を使っているシステムでビルドできなくなってしまうのではないでしょうか。

6.3 系以前から ctx->class = class_create(name); と呼び出しても正常動作するようになっていたのだとしても、より古いカーネルを使っているシステムのサポートを鑑みると、(手前味噌にはなりますが) tsukumijima@76408ca のように 6.4 系以降と 6.3 系以前で処理を分岐させるのが適当だと考えます。

@tsukumijima
Copy link

px4_drv の開発者の @nns779 さんは残念ながら2021年9月から2年半以上ネット上から失踪されており、今後の更新は望み薄と言わざるを得ません。
私の方で引き続き px4_drv を使い続けるためのフォークを維持していますので、このページをご覧になった方はぜひ乗り換えをお勧めします (Ubuntu / Debian でしたら Debian パッケージで簡単にインストールできます) 。
https://github.com/tsukumijima/px4_drv

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants