nns779 / px4_drv

Unofficial Linux driver for PLEX PX4/PX5/PX-MLT series ISDB-T/S receivers (not V4L-DVB)
GNU General Public License v2.0
308 stars 49 forks source link

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

Closed kznrluk closed 3 months ago

kznrluk commented 1 year ago

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 の引数を削除しました。

https://github.com/torvalds/linux/commit/6e30a66433afee90e902ced95d7136e8f7edcc7e https://github.com/torvalds/linux/commit/dcfbb67e48a2becfce7990386e985b9c45098ee5

tsukumijima commented 1 year ago

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

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

tsukumijima commented 8 months ago

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

kznrluk commented 3 months ago

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

ご指摘ありがとうございます。全くもってその通りです。こちらはCloseさせていただきます。