【2024年3月】px4_drv が DKMS ビルドエラーになったら代わりにフォーク版を使うべしの巻

最近あまりにも Twitter で『何もしてないのに PLEX チューナードライバが壊れた!!!!』という話を聞きすぎるので、軽くインターネットの集合知として放流しておく。

Sponsored Link

TL;DR

GitHub - tsukumijima/px4_drv: Unofficial Linux / Windows (WinUSB) driver for PLEX PX4/PX5/PX-MLT and e-better series ISDB-T/S receivers (not V4L-DVB)
Unofficial Linux / Windows (WinUSB) driver for PLEX PX4/PX5/PX-MLT and e-better series ISDB-T/S receivers (not V4L-DVB) ...
  • 私が多くの方のフォークやプルリクエストを取り込みながらメンテナンスを続けている tsukumijima/px4_drv に切り替えるべき
  • px4_drv は2021年9月以降一切メンテナンスされておらず、復活は望めない
    • 原作者の nns779 大先生は2021年9月を最後に突如ネットから失踪されている
    • ご存命なら良いのですが、丁度コロナが猛威を振るっていた時期、さらにこれほどの高性能なドライバをリバースエンジニアリングで開発できるスキルをお持ちの方となると相当なご経験を積まれたシニアエンジニアの方でしょうし、亡くなられてしまったのかなと思ったり…
  • Linux 6.4 / 6.8 系では px4_drv 内部で利用されている Linux カーネル API に破壊的変更が行われたため、本家版 px4_drv (0.2.1) は Linux 6.4 系以降では動作しない
  • Linux のデバイスドライバは ABI の関係で、カーネル更新ごとに再ビルドしなければならない仕様
    • このためにカーネル更新時にソースコードから自動で再ビルドする DKMS が存在している
  • Ubuntu 22.04 LTS の Linux カーネルは Ubuntu 22.04.4 以降で 5.15 系 → 6.5 系に更新されている
    • HWE カーネル有効時のみ (HWE カーネル無効時は EOL まで 5.15 系が使われる)
    • 本家版 px4_drv は Linux 6.4 系以降では動作しないため、sudo apt upgrade で Ubuntu 22.04.4 相当に更新するとこの時限爆弾が発火する

詳しい解説

…はい、言いたいことは上記でほぼすべてですが、要は『本家版 px4_drv はもうメンテされておらず Linux 6.4 以降に対応してないから私が代わりにメンテしているフォーク版の tsukumijima/px4_drv を代わりに使ってね』ということです。

driver: Linuxカーネルv6.4の関数シグニチャの変更に対応 by kznrluk · Pull Request #26 · nns779/px4_drv
Arch Linuxにて、カーネルを 6.4.1 に更新したところDKMSのビルドが失敗するようになりました。 DKMS make.log for px4_drv-0.2.1 for kernel 6.4.1-arch2-1 (x86_64...
dkms install px4_drv/0.2.1でエラーが発生した件

Linux 6.4 系で動作しなくなった経緯は上記の通りです。class_create() 関数の引数が変わって実質形骸化していた THIS_MODULE が削除されたことによる影響らしい。


Mirakurun が起動しない (./include/linux/export.h:29:22: error: passing argument ... でドライバのコンパイルエラー) - Qiita
ドライバのコンパイルエラーが発生したお話。症状「docker-mirakurun-epgstation のチューナーカードを PX-MLT8PE に換装」…

…よく見たらなんか『今回は、カーネルをダウングレードすることで対処することにしました』、とか書いてあるんです。
もうね、アホかと。馬鹿かと。お前らな、この辺の問題点をすべて解消したフォーク版ドライバの存在も知らずにセキュリティ上問題があるカーネルダウングレードとかしてんじゃねーよ、ボケが。[1]元ネタ

…と喉まで出かかりましたが(誇張表現)、やはりフォークのため知名度が今のところない(そもそも検索にインデックスされてないので出てこない)ので、とにかく周知するために書いた次第です。

tsukumijima/px4_drv でのそのほかの改善

tsukumijima/px4_drv には(ほぼ外部の貢献者のみなさんのおかげで)Linux 6.4 系以降のサポートが行われているだけでなく、追加の改善もあります。

  • ファームウェアを DKMS ソースに同梱し、ファームウェアの抽出やビルドを不要化
    • nns779 さんが以前 ツイート にて CRC32 が特定のハッシュ値 (0b41a994) のファームウェアが一番安定すると語っていたため、当該ファームウェアの抽出済みバイナリをリポジトリに含めています。
  • Debian パッケージの作成とインストールに対応し、インストール/アンインストールを簡略化
    • Releases ページにある Debian パッケージ (.deb) を sudo apt install でローカルインストールするだけで px4_drv を導入できます。もう手動で dkms コマンドをいじる必要はありません。
    • ただし、カーネルや px4_drv 自体の更新後は、タイミング次第で px4_drv が再ロードされない場合があります。 極力更新後すぐに再起動することを推奨しますが、もしすぐに再起動できない場合は明示的に sudo modprobe px4_drv を実行してください。
  • techmadot 氏のフォーク の内容を取り込み PX-M1UR / PX-S1UR に対応 (実験的)
    • PX-M1UR はチップ構成が DTV02A-1T1S-U とほぼ同一、PX-S1UR は DTV02A-1T1S-U から衛星チューナー IC を削った構成のようです。
    • MyGica VT20 よりは遥かに安定するはずですが、(同一構成の) DTV02A-1T1S-U と比べても実売価格で 15,000 円近くとかなり高めです。現状敢えて PX-M1UR / PX-S1UR を選ぶ理由はありません。
  • otya 氏のフォーク での更新を取り込み安定性と互換性を改善
    • 私は全然 C 言語が分からないのですが、安定性や chardev 版 PT1 / PT2 / PT3 ドライバとの互換性の向上が行われているようです。

References

References
1 元ネタ

コメント