Raspberry Pi 4 Model B 8GB で PLEX PX-W3U4 を使用

Raspberry Pi 4 Model B 8GB で PLEX PX-S1UD V2.0 を使用してみました。

OS

OS は Raspberry Pi OS (旧 Raspbian) ではなく Ubuntu を使用しました。2020 年 7 月の時点では Raspberry Pi OS は 32bit 版しか提供されておらず、 64bit 版はベータのテストバージョンです。一方、Ubuntu は公式に Raspberry Pi 4 向けの 64bit 版が提供されています。また、私は自作 PC でも Ubuntu を使用しているため、そこでのノウハウを横展開できる利点もあります。

Raspberry Pi 4 Model B 8GB にインストールした Ubuntu のバージョンは 20.04 です。インストールについは下記の通り、別途投稿しています。

PX-W3U4 ドライバのインストール

PX-W3U4 の Linux 向けドライバは販売元の PLEX から提供されていますが、最終更新が 2018 年と古く、サポート対象外であり、対応するディストリビューションとそのバージョン、カーネルのバージョンも固定的です。

http://www.plex-net.co.jp/download/

一方で、PLEX 公式とは別に GitHub で、【px4_drv – Unofficial Linux driver for PLEX PX4/PX5/PX-MLT series ISDB-T/S receivers】が公開されています。

GitHub

Unofficial Linux driver for PLEX PX4/PX5/PX-MLT series ISDB-…

ソースコードとインストール方法が記載されており、基本的に Linux であれば動作すると思われるため、こちらを使用します。

Ubuntu で PX-W3U4 を使用するユーザーを video グループに入れ、OS を再起動します (ログオフでもよいです) 。

sudo gpasswd -a $USER video
sudo reboot

続いて、私にとって必要と思われるパッケージをインストールします。

sudo apt install -y build-essential git wget libasound2-dev \
      autoconf libtool pcsc-tools pkg-config libpcsclite-dev pcscd \
      cmake yasm curl ssh dkms unzip

これでドライバをインストールする準備が整いました。

ここで、PX-W3U4 を Raspberry Pi 4 に接続します。接続後、dmesg コマンドを実行すると、下記のような出力がされていました。新しい デバイスとしては認識されています。

[ 6342.003444] usb 1-1.1: new high-speed USB device number 6 using xhci_hcd
[ 6342.108145] usb 1-1.1: New USB device found, idVendor=0511, idProduct=083f, bcdDevice= 1.00
[ 6342.108162] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6342.108173] usb 1-1.1: Product: W3U4
[ 6342.108184] usb 1-1.1: Manufacturer: PLEX̀
[ 6342.108194] usb 1-1.1: SerialNumber: 

以下のコマンドを一気に実行します。適当な作業用ディレクトリを作成し、そこで作業しています。

mkdir ~/working_directory && \
        cd ~/working_directory && \
        git clone https://github.com/nns779/px4_drv && \
        cd px4_drv/fwtool/ && \
        make -j$(nproc) && \
        curl -O http://plex-net.co.jp/plex/pxw3u4/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 ../ && \
        sudo cp -a ./ /usr/src/px4_drv-0.2.1 && \
        sudo dkms add px4_drv/0.2.1 && \
        sudo dkms install px4_drv/0.2.1 && \
        sudo modprobe px4_drv

再度、dmesg コマンドを実行すると、下記のような出力がされていました。px4video0 から px4video3 まで 4 つのチューナーデバイスが認 識されています。

[ 6648.548568] px4_drv: loading out-of-tree module taints kernel.
[ 6648.552764] px4_drv: px4_drv version 0.4.0, rev: 319, commit: d528b9b6afd43106c5d541073514adb35d43576f @ develop
[ 6648.661177] px4_usb 1-1.1:1.0: Firmware loaded. version: 1.4.0.0
[ 6648.797566] px4_usb 1-1.1:1.0: /dev/px4video0
[ 6648.797733] px4_usb 1-1.1:1.0: /dev/px4video1
[ 6648.797811] px4_usb 1-1.1:1.0: /dev/px4video2
[ 6648.797878] px4_usb 1-1.1:1.0: /dev/px4video3
[ 6648.798012] usbcore: registered new interface driver px4_usb

ls コマンドでも確認できます。

$ ls -al /dev/px*
crw-rw-r-- 1 root video 507, 0 May 16 17:39 /dev/px4video0
crw-rw-r-- 1 root video 507, 1 May 16 17:39 /dev/px4video1
crw-rw-r-- 1 root video 507, 2 May 16 17:39 /dev/px4video2
crw-rw-r-- 1 root video 507, 3 May 16 17:39 /dev/px4video3

PX-W3U4 の動作確認

recpt1 を使用しました。recpt1 は複数存在しますが、GitHub で公開されている下記のものを使用しました。

GitHub

PT1/PT2/PT3をLinuxで使う為の録画ツール(STZ版). Contribute to stz2012/rec…

ソースコードを一部修正しつつインストールします。

cd ~/working_directory && \
        git clone https://github.com/stz2012/recpt1.git && \
        cd recpt1/recpt1 && \
        sed -i -e "/^char \*bsdev\[NUM_BSDEV\] = {$/a \ \ \ \ \"/dev/px4video1\",\n\ \ \ \ \"/dev/px4video0\"," pt1_dev.h && \
        sed -i -e "/^char \*isdb_t_dev\[NUM_ISDB_T_DEV\] = {$/a \ \ \ \ \"/dev/px4video2\",\n\ \ \ \ \"/dev/px4video3\"," pt1_dev.h &&
        ./autogen.sh && \
        ./configure && \
        make -j$(nproc) && \
        sudo make install

各チューナーデバイスと方式の対応は下記の通りです。

/dev/px4video0ISDB-S衛星
/dev/px4video1ISDB-S衛星
/dev/px4video2ISDB-T地上
/dev/px4video3ISDB-T地上

各チューナーデバイスで任意のチャンネルを設定し、10秒間キャプチャしてみます。

recpt1 --device /dev/px4video0 <bs_ch> 10 <bs_ch>.ts
recpt1 --device /dev/px4video1 <bs_ch> 10 <bs_ch>.ts
recpt1 --device /dev/px4video2 <gr_ch> 10 <gr_ch>.ts
recpt1 --device /dev/px4video3 <gr_ch> 10 <gr_ch>.ts

暗号化されたストリームが出力されます。