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

Raspberry Pi 4 Model B 8GB で PLEX PX-W3U4 を使用してみました。問題なく快適に動作しています。

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 年と古く、サポート対象外であり、対応するディストリビューションとそのバージョン、カーネルのバージョンも固定的です。

PLEXテレビチューナーの最新ドライバはこちらから。生産終了したチューナーのドライバもこちらからダウンロードいただけます…

一方で、PLEX 公式とは別に GitHub で、【px4_drv – Unofficial Linux driver for PLEX PX-W3U4/Q3U4/W3PE4/Q3PE4 ISDB-T/S receivers (PLEX PX-W3U4/Q3U4/W3PE4/Q3PE4用の非公式版Linuxドライバ)】が開発されています。

GitHub

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

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

まず、Ubuntu の APT のパッケージを最新にし、Ubuntu で PX-W3U4 を使用するユーザーを video グループに入れ、Ubuntu を再起動します。

sudo apt update
sudo apt upgrade
sudo gpasswd -a $USER video
sudo reboot

再起動後の情報は下記の通りでした。

$ uname -a
Linux ubuntu 5.4.0-1013-raspi #13-Ubuntu SMP Mon Jun 15 03:17:37 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux

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

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 コマンドを実行すると、下記のような出力がされていました。新しいデバイスとしては認識されています。

$ dmesg

[ 1381.073403] usb 1-1.4: new high-speed USB device number 3 using xhci_hcd
[ 1381.178299] usb 1-1.4: New USB device found, idVendor=0511, idProduct=083f, bcdDevice= 1.00
[ 1381.178315] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1381.178326] usb 1-1.4: Product: W3U4
[ 1381.178336] usb 1-1.4: Manufacturer: PLEX̀
[ 1381.178346] usb 1-1.4: SerialNumber: xxxxxxxxxxxxxxx

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

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 つのチューナーデバイスが認識されています。

$ dmesg

[ 1674.605244] px4_drv: loading out-of-tree module taints kernel.
[ 1674.608101] px4_drv: px4_drv version 0.2.1, rev: 200, commit: 90e0a4b30b812e7e5fff4483144f165de8914157 @ develop
[ 1674.716796] px4_drv 1-1.4:1.0: Firmware loaded. version: 1.4.0.0
[ 1674.854845] px4_drv 1-1.4:1.0: tsdev 0: px4video0
[ 1674.855009] px4_drv 1-1.4:1.0: tsdev 1: px4video1
[ 1674.855078] px4_drv 1-1.4:1.0: tsdev 2: px4video2
[ 1674.855146] px4_drv 1-1.4:1.0: tsdev 3: px4video3
[ 1674.855314] usbcore: registered new interface driver px4_drv
[ 1674.855368] usbcore: registered new interface driver isdb2056_drv

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

$ ls -al /dev/px*
crw-rw-r-- 1 root video 508, 0 Jul 11 18:58 /dev/px4video0
crw-rw-r-- 1 root video 508, 1 Jul 11 18:58 /dev/px4video1
crw-rw-r-- 1 root video 508, 2 Jul 11 18:58 /dev/px4video2
crw-rw-r-- 1 root video 508, 3 Jul 11 18:58 /dev/px4video3

PX-W3U4 の動作確認

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

GitHub

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

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

cd ~/working_directory && \
  wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip && \
  unzip c44e16dbb0e2.zip && \
  cd pt1-c44e16dbb0e2/arib25 && \
  make -j$(nproc) && \
  sudo make install

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 --enable-b25 && \
    make -j$(nproc) && \
    sudo make install

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

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

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

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

キャプチャ結果は VLC 等で確認することができます。