地デジチューナーを認識するカーネル・ドライバをビルドする (Rock5 Model B向け)
はじめに
近年の Linux カーネルでは標準ドライバで地デジチューナーを認識できると言われています。
しかしながらRock5 Model B の公式イメージを使った際、他の環境で認識できたデバイスであっても標準ドライバがロードされず使用することができませんでした。
今回の対象デバイスは、 PLEX の PX-S1UD や PX-Q1UD を指しています。
Armbian を使う理由
開発元 Radxa の公式ページを見ると Rock5 上でカーネルコンパイルする方法が記載されています。
この手順に従って実機上でカーネルコンパイルをしてもよいのですが、 Rock5 がパワフルとはいえ時間が掛かります。
そこで、 Armbian を使用し、 PC でカーネルらのクロスコンパイルを行い、システムイメージを作るという方法を採ります。
Armbian イメージの作成
Rock5 の Armbian イメージはビルド済みのものが配布されています。
しかしながら、radxa のイメージと同じく、地デジチューナーのドライバはそのままで認識という状態にならなかったので、カーネル・システムイメージのコンパイル・ビルドを行います。
コンパイル用環境の準備
この記事作成に当たり x64 で動作する Linux 環境 (Ubuntu 22.04 Desktop 版)を準備して使用しました。Armbian のビルドシステムではクロスコンパイルする環境が整備されるので、これで問題ありません。
2GB 以上のメモリ、 35GB 程度のディスクスペースを消費するようで、公式ドキュメントによれば仮想マシン環境や、WSL2 の環境でもビルド出来そうです。
ソースコードの取得
ビルドのシステムを含め、以下のリポジトリからソースコードを取得します。
ここでは以下のコマンドを実行してコードを取得したものとして説明します。
$ git clone --depth=1 -b main https://github.com/armbian/build armbian-build
カーネル・ドライバのコンパイル
以下のコマンドを実行してコンパイルを開始します。
コンパイルを始めるときに最初に表示される画面で、「Show a kernel configuration menu before compilation」を選択しておきます。
$ cd armbian-build
$ ./compile.sh BOARD=rock-5b INSTALL_HEADERS=yes
このあと画面に従って進めるのですが、以下の項目を順番に選んでいきます。
- legacy
- jammy
- Image with console interface
- 今回は GUI を不要としたため。
- Desktop 画面が欲しい人は Image with desktop environment を選択
- Standard image with console interface
これらを選んだあと、処理が進みます。以下の図はコンパイル途中の様子です。
しばらくすると、以下の画面が出てくるはずなので、それまでしばらく待ちます。
DTV 用のドライバを有効にする
- "Device Drivers" を選択
- "Multimedia support" を選択
- "Autoselect ancillary drivers" の項目が OFF であることを確認。 ON になっていたら OFF に変更
- "Media drivers" を選択
- "Media USB Adapters" を選択
- "Siano SMS1xxx based MDTV receiver" にチェックを入れる
設定が終わったら EXIT でこの画面を抜けます。
このあとは本格的なコンパイルに入り、時間が掛かる作業です。
また、以下の記事でパッチを当てていましたが現時点の 5.10 カーネルに含まれるソースでは既に対処が入っていることを確認しています。
コンパイルの完了
全ての処理が完了すると、 output/images ディレクトリにイメージファイルが出来上がっています。
$ cd output/images; ls
Armbian_23.08.0-trunk_Rock-5b_jammy_legacy_5.10.160.img
動作確認
生成されたイメージファイルを microSD カードに書き込みます。
この書き込む手順は dd
で書き込むもよし、使い慣れた Win32DiskImager などのツールを使ってもかまいません。
初回の起動においては、アカウントの準備やタイムゾーンの設定などが必要になります。
それらの設定を済ませた後、PLEX の PX-S1UD や PX-Q1UD デバイスを接続してみます。
以下のコマンドを実行し、デバイスファイルが出来ているかを確認します。
今回使用しているデバイスでは /dev/dvb/adapter0 が出現するはずで、この情報が見えるようになります。
rock@rock-5b:~$ ls /dev/dvb/
adapter0
dmesg
コマンドを実行してみて以下のようなログが出ていることでも認識していることを確認できます。
[ 245.691931] usb 2-1: New USB device found, idVendor=3275, idProduct=0080, bcdDevice= 0.01
[ 245.691958] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 245.691975] usb 2-1: Product: PX-S1UD Digital TV Tuner
[ 245.691993] usb 2-1: Manufacturer: PLEX Digital TV Tuner
[ 245.694020] smsusb:smsusb_probe: board id=18, interface number 0
[ 245.695494] usb 2-1: Direct firmware load for isdbt_rio.inp failed with error -2
[ 245.695521] smsmdtv:smscore_load_firmware_from_file: failed to open firmware file 'isdbt_rio.inp'
[ 245.696318] dvbdev: DVB: registering new adapter (Siano Rio Digital Receiver)
[ 245.697867] usb 2-1: DVB: registering adapter 0 frontend 0 (Siano Mobile Digital MDTV Receiver)...
[ 245.698258] smsdvb:smsdvb_hotplug: DVB interface registered.
[ 245.698277] smsmdtv:smscore_init_ir: IR port has not been detected
[ 245.698294] smsusb:smsusb_probe: Device initialized with return code 0
ここでは isdbt_rio.inp
ファイルがないため警告がでていますが、これはメーカー提供ドライバから抽出してファイルを配置すれば解決する話です。
まとめ
以上、Armbian で地デジチューナーを認識させるまでの作業ステップを説明しました。
地デジチューナーを認識させるためとはいえ結構手間がかかりましたので、素直に認識できる他のデバイスを使うという選択のほうがお勧めですね。
シングルボードコンピューター(SBC) で使える USB 接続のチューナーデバイスの紹介、システムの構築などはこちらの技術同人誌でも紹介しております。
おすすめのチューナーデバイス
私がお勧めするとしたら下記デバイスです。1チューナーだけど3波対応で、 今なら Linux 向けドライバも使えるようになった PX-M1UR も次点として選んでいます。
これらの設定方法はネットで調べるか、技術同人誌の中身を読んでいただければと思います。
その他
現時点では確認を取っていませんが、おそらく Orange Pi 5 で Armbian を使用する場合においても同様の処理が必要になると思われます。
Discussion