Qbilinux 日記

Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

PLEX PX-W3U4/W3PE4/Q3PE4 用の unofficial linux ドライバを debian で使用してみた (2019/4 更新)

過去に書いた「PLEX PX-W3U4/W3PE4/Q3PE4 用の unofficial linux ドライバを debian 9.5 で試してみた」の更新版.

toshi-mtk.hatenablog.com

最近,テレビを見る事ってほとんど無くなってるんだけど,たまに使うとなんとなく動作がおかしいときがあったので少しだけチェックてみて過去の blog を書き直してみました.

PLEX PX-W3U4/W3PE4/Q3PE4 用の unofficial linux ドライバが https://github.com/nns779/px4_drv にあります.PLEX 社製じゃなくて個人で作成している物のようです.感謝.

割と頻繁に更新されているようなので,一旦インストールして運用している状態でも,気が向いたときに差分をチェックして修正内容に思い当たることがある場合には更新した方が良いかと思います.

ということでソースを持ってきて,ドキュメント通りコンパイル&インストール.

$ git clone https://github.com/nns779/px4_drv
$ cd px4_drv/fwtool
$ make
$ wget http://plex-net.co.jp/plex/pxw3u4/pxw3u4_BDA_ver1x64.zip -O pxw3u4_BDA_ver1x64.zip
$ unzip -oj pxw3u4_BDA_ver1x64.zip pxw3u4_BDA_ver1x64/PXW3U4.sys
$ ./fwtool PXW3U4.sys it930x-firmware.bin
$ sudo mkdir -p /lib/firmware
$ sudo cp it930x-firmware.bin /lib/firmware/
$ cd ../driver
$ make
$ sudo make install
$ sudo modprobe px4_drv

更新したい場合には

$ cd px4_drv
$ git pull
$ cd driver
$ make
$ sudo make install
$ sudo modprobe px4_drv

だけでオッケーですね.ただし,デバイスドライバーを使用しているときには更新できないので注意が必要です.EPG を取得しているときとか,録画しているときとかは更新できないって事ね.

で,再起動などすればデバイスが認識されます.

$ lsmod | grep px
px4_drv 69632 0
usbcore 253952 4 usbhid,px4_drv,xhci_pci,xhci_hcd
$ ls -al /dev/px4video*
crw-rw-r-- 1 root video 246, 0 9月 17 17:20 /dev/px4video0
crw-rw-r-- 1 root video 246, 1 9月 17 17:20 /dev/px4video1
crw-rw-r-- 1 root video 246, 2 9月 17 17:20 /dev/px4video2
crw-rw-r-- 1 root video 246, 3 9月 17 17:20 /dev/px4video3
crw-rw-r-- 1 root video 246, 4 9月 17 17:20 /dev/px4video4
crw-rw-r-- 1 root video 246, 5 9月 17 17:20 /dev/px4video5
crw-rw-r-- 1 root video 246, 6 9月 17 17:20 /dev/px4video6
crw-rw-r-- 1 root video 246, 7 9月 17 17:20 /dev/px4video7

次,recpt1 コマンド.

PLEX が配布している Linux_Driver.zip に含まれている物がありますが,割と古いソースをベースにしていて色々と不具合がある雰囲気なので使わない方が良いかなと思います.ってことで,普通に配布されているものを使用.過去に書いた blog では pt1_drv.h などにパッチを当てたりしていましたが,自動判別させる場合には必要ですがコマンドラインからデバイス名を指定して使う場合には特に必要ないかと思います.

Mirakurun で利用する場合,/usr/local/etc/mirakurun/tuners.yml などで

- name: PX4-S1
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video0  - -
  isDisabled: false

と recpt1 にデバイス名を引数で与えているので pt1_drv.h のデバイス名に対するパッチは必要ないかと思います.はい.

ということで今回はパッチなしと言うことで,

$ hg clone http://hg.honeyplanet.jp/pt1
$ cd pt1/recpt1/
$ ./autogen.sh
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

動作確認.

$ recpt1 --device /dev/px4video0 BS01_0 10 test_bs.ts
$ recpt1 --device /dev/px4video2 25 10 test_ts.ts

ts ファイルが出来ました.

あとは,お好きな環境でセットアップしてください.最近は Mirakurun (https://github.com/Chinachu/Mirakurun) + EPGStation (https://github.com/l3tnun/EPGStation) あたりが流行かな?

recpt1 の引数にデバイス名を与えず自動認識で使う場合には

diff -Nrc recpt1/pt1_dev.h recpt1.new/pt1_dev.h
*** recpt1/pt1_dev.h    2019-04-21 16:27:14.765854684 +0900
--- recpt1.new/pt1_dev.h        2019-04-22 02:42:10.971698834 +0900
***************
*** 10,16 ****
      "/dev/pt1video9",
      "/dev/pt1video8",
      "/dev/pt1video13",
!     "/dev/pt1video12"
  };
  char *isdb_t_dev[NUM_ISDB_T_DEV] = {
      "/dev/pt1video2",
--- 10,20 ----
      "/dev/pt1video9",
      "/dev/pt1video8",
      "/dev/pt1video13",
!     "/dev/pt1video12",
!     "/dev/px4video0",
!     "/dev/px4video1",
!     "/dev/px4video4",
!     "/dev/px4video5"
  };
  char *isdb_t_dev[NUM_ISDB_T_DEV] = {
      "/dev/pt1video2",
***************
*** 20,26 ****
      "/dev/pt1video10",
      "/dev/pt1video11",
      "/dev/pt1video14",
!     "/dev/pt1video15"
  };

  // 変換テーブル(ISDB-T用)
--- 24,34 ----
      "/dev/pt1video10",
      "/dev/pt1video11",
      "/dev/pt1video14",
!     "/dev/pt1video15",
!     "/dev/px4video2",
!     "/dev/px4video3",
!     "/dev/px4video6",
!     "/dev/px4video7"
  };

  // 変換テーブル(ISDB-T用)
diff -Nrc recpt1/recpt1.h recpt1.new/recpt1.h
*** recpt1/recpt1.h     2019-04-21 16:27:14.765854684 +0900
--- recpt1.new/recpt1.h 2019-04-22 02:34:37.029228065 +0900
***************
*** 2,9 ****
  #ifndef _RECPT1_H_
  #define _RECPT1_H_

! #define NUM_BSDEV       8
! #define NUM_ISDB_T_DEV  8
  #define CHTYPE_SATELLITE    0        /* satellite digital */
  #define CHTYPE_GROUND       1        /* terrestrial digital */
  #define MAX_QUEUE           8192
--- 2,9 ----
  #ifndef _RECPT1_H_
  #define _RECPT1_H_

! #define NUM_BSDEV       12
! #define NUM_ISDB_T_DEV  12
  #define CHTYPE_SATELLITE    0        /* satellite digital */
  #define CHTYPE_GROUND       1        /* terrestrial digital */
  #define MAX_QUEUE           8192

な感じのパッチを適用すれば良いかなと思います.pt1_dev.h に追加したデバイス名分の配列数を recpt1.h でも修正しておかないとワーニングが出ますので注意が必要ですね.まぁ引数でデバイス名を指定する場合でもこのパッチを適用することに問題はないですけど,その辺りはお好きにどうぞって感じかな.利用環境に応じて判断してくださいって感じ.

一応,動作確認.

$ recpt1 BS01_0 10 test_bs.ts
$ recpt1 25 10 test_ts.ts

問題なさそうだね.

以上,参考まで.