以前、Raspberry Pi OSで地デジ視聴環境を構築しましたが。
Raspberry Pi 4でUSB TVチューナが使用できたのは、カーネルドライバが予めRaspberry Pi OSで用意されていた、つまりドライバがビルド・インストールされていたからです。
他のシングルボードコンピュータは、ドライバが用意されていないため、USBチューナを取り付けても/dev/dvbデバイスが作成されず、チューナは使えない場合が多いと思います。(Raspberry Pi以外使えたことありません
そこで。カーネルのビルド環境が用意されているTinker Board 2Sにて。
USB チューナドライバをビルドして、地デジ視聴環境が構築できるようにしてみたいと思います。
目次
Tinker Board 2SのUSB TVチューナドライバ有効版カーネルビルド手順
ビルド環境の準備
eMMCへ新しいDebianイメージを書き込み
新しい環境を作るということで。今日現在の、最新の環境に更新しようと思いまして。
2023年7月に公開された、Debian 10(kernel 4.19) v2.1.16をダウンロードさせて頂きました。
Type-C USBケーブルでPCと接続して、ダウンロードしたイメージを書き込みました。
手順はこちらの記事になります。
OS更新
起動後、ログインしてOSを更新しておきます。linaro / linaro
sudo apt update
sudo apt upgrade
タイムゾーン変更
タイムゾーンを設定しておかないと、これから作成するファイルやカーネルの生成時刻がわからなくなります。事前に必ず設定しましょう。
コマンドでさらっと。
sudo timedatectl set-timezone Asia/Tokyo
ホスト名変更、GUI/CUI切替はtinker-configから
sudo tinker-config
ホスト名や、GUI/CLIの切替は、こちらから変更が可能のようです。
IPアドレス設定
静的IPアドレスを割り当てる場合ですが。
Tinker OSは、systemdのNetworkManagerが導入されているようです。
nmcli
nmcli device status
nmcli connection show
# コネクション名を指定 この場合 enp3s0 がコネクション名になります
CONUID=`nmcli -g GENERAL.UUID c s enp3s0`
echo ${CONUID}
sudo nmcli connection modify ${CONUID} ipv4.addresses <IPアドレス>/24
sudo nmcli connection modify ${CONUID} ipv4.gateway <ゲートウェイアドレス>
sudo nmcli connection modify ${CONUID} ipv4.dns "<DNSアドレス>"
sudo nmcli connection modify ${CONUID} ipv4.method manual
sudo nmcli connection up ${CONUID}
最後の行、connection upで変更がすぐに反映されますので、SSH接続している場合はご注意ください。
ユーザの作成
カーネルをビルドするための、作業用のユーザを作成しておきました。
sudo adduser hide
# 管理者権限付与
sudo adduser hide sudo
Tinker Board 2用カーネルのビルド
u-bootは別途環境が必要のため今回はカーネルのみビルド
カーネルのビルドは、Tinker Board 2S本体で可能ですが。u-bootを更新したい場合は、x86_64のUbuntu環境が必要のようです。
よって、今回はカーネルのビルド・インストールのみ行おうと思います。
ビルドツールのインストール
このあたりをインストールしておけば大丈夫かなと思います。
sudo apt-get install -y build-essential bison flex aptitude libssl-dev liblz4-tool autoconf automake
ソースコードはDebianとカーネルのバージョンに合ったものを選択
Tinker Board 2のカーネルソースはこちらですが。
ダウンロードの前に。ブランチを選択して、バージョンを使用しているものに合わせましょう。今回は、debian 10のカーネル4.19になります。こちらが対応する正しいソースコードとなります。
ストレージの空き容量確認
※23.8.1追記
Tinker Board 2SのeMMCの容量は16GB。ルートパーティションの空き容量は7.7GBほどです。
カーネルのビルドをしましたが、ストレージの使用量はこのくらいになりました。空き容量202MB。
本当に容量がギリギリでした。
可能でしたら、USB端子にSSDやHDDを接続して、そちらでビルドしたほうが良いと思います。
ちなみに、Tinker BoardのType-C端子の電源容量は、Type-Aの通常の端子よりも大きく、SSDを取り付けても全く問題なく使用できるようです。
ソースコードのクローン
正しいバージョンがわかったところで、ブランチを指定してソースコードをクローンさせて頂きました。
git clone https://github.com/TinkerBoard2/kernel.git --branch linux4.19-rk3399-debian10
圧縮・ダウンロード・展開にしばらく時間がかかります。
カーネルソースということで、かなりの数のファイルを取り扱います。
今回はeMMCを搭載したTinker Board 2Sを使用しましたが。microSDカード運用のTinker Board 2(無印)では、なかなかカーネルビルドは厳しいかもしれません。
Tinker Board 2既定のビルド設定の読み込み
いきなりコンフィグ画面を起動すると、初期状態のため、正しい設定がわかりません。
まずは、既定のTinker Board 2の設定を読み込みます。
cd kernel
make tinker_board_2_defconfig
特に問題なく、.configファイルに既定値が保存されました。
ビルド設定にUSB-TVチューナのドライバを追加
Ditigal TV用のドライバ(DVB)と、Siano Rioチューナ用のドライバ(smsdvb)を追加して、Tinker Board 2で使用できるようにしましょう。
make menuconfig
- Device Drivers
- Multimedia support
- 「Ditigal TV Support」でスペースを入力、*マークをセットしました。
- その後、下にスクロールして「MediaUSBAdapters」
- Siano SMS1xxx based MDTV receiverにMマークをセットしました。
- Save→Exit→ExitまたはESC→ESC→ESC
このような感じで、CONFIG_DVB_COREとCONFIG_SMS_SIANO_MDTVが有効になりました。(次回は最初から.configファイルをテキストエディタで編集しても良さそうです
arm64でチューナを使用する場合の不具合対応
V4L/DVBを拝見すると、arm64アーキテクチャでTVチューナを使用すると、メモリー確保に失敗する場合がある、という情報が御座いました。
パッチを拝見すると、どうも今回使用するカーネルでは、その内容が取り込まれているように見えます。
よって、ここではTinker Board 2のカーネルソースをそのまま使用させて頂くことにします。
カーネルとドライバのビルド
いよいよビルドに入りましょう。
make rk3399-tinker_board_2.img -j8
今回使用したソースコードは、Wi-Fiモジュールのドライバが組み込まれており、上記の手順でWi-Fiドライバもビルドされるようです。
バージョンやディストリビューションの違いによって、ビルド前に別途ドライバのソースを入手する必要がある場合もありますのでご注意ください。
ビルドはおよそ1時間ほどかかりました。
モジュールのインストール
ビルドに不安がある場合、念のため、/lib/modulesディレクトリをバックアップしておいたほうが良いかもしれません。
モジュールをインストールします。
sudo make modules_install
/lib/modulesディレクトリ内に、たしかにsianoのDVBドライバモジュールが配置されました。
ブートイメージのインストール
さて。ビルドしたカーネルは、どこに置けば良いのでしょうか。
今回、eMMCを内蔵したTinker Board 2Sということで、ブートメディアは/dev/mmcblk2になります。
ビルドしたboot.imgは、GPTパーティションの4番、boot領域に埋め込みました。
sudo dd if=boot.img of=/dev/mmcblk2p4 status=progress
新しいカーネルを起動
再起動して、新しいカーネルを早速使用してみましょう。
更新前のカーネルのラベルはこのような感じでした。6月13日にビルドされたカーネルです。
再起動後は、このような感じで「Sun Jul 30 13:13:02」とビルド時刻の表示が変わりました。
USBチューナが使用できるかどうか確認
チューナーをUSB端子に取り付けたところ、/dev/dvbデバイスが作成されました。
チューナーのファームウェアは別途必要ですが、使用できる見通しになりました。
実用性は、実際に使用して様子を見る必要がありそうです。
シングルボードコンピュータを使用するうえでも、カーネルをビルドできるというのは、やはり面白いですね。
新しいデバイスやファイルシステム等の機能を、自分の使用しているマシンで試すことができます。
Tinker Board 2は、カーネルをビルドする環境がしっかりと提供されていて、問題なくビルドすることが可能です。
また電源容量が大きく、バスパワーのUSB2.5インチHDDを取り付け可能です。
なにかデバイスを取り付けて、長期的に使用する目的には向いている感じがします。
カーネルのビルドは少し大変かもしれませんが、よろしければ挑戦してみてください。