Tinker Board 2SでUSB-TVチューナーを使用するには

以前、Raspberry Pi OSで地デジ視聴環境を構築しましたが。

https://denor.jp/raspberry-pi-os-64%E3%83%93%E3%83%83%E3%83%88%E7%89%88%E3%81%AEepgstation%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86-%E4%BB%A4%E5%92%8C5%E5%B9%B42023%E5%B9%B41%E6%9C%88%E7%89%88

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をダウンロードさせて頂きました。

ダウンロードはこちらになります。

[blogcard url=”https://tinker-board.asus.com/jp/download-list.html?product=tinker-board-2s”]

Type-C USBケーブルでPCと接続して、ダウンロードしたイメージを書き込みました。

手順はこちらの記事になります。

https://denor.jp/tinker-board-2s%E3%81%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E8%A6%9A%E6%9B%B8


OS更新

起動後、ログインしてOSを更新しておきます。linaro / linaro

sudo apt update
sudo apt upgrade

タイムゾーン変更

タイムゾーンを設定しておかないと、これから作成するファイルやカーネルの生成時刻がわからなくなります。事前に必ず設定しましょう。

コマンドでさらっと。

sudo timedatectl set-timezone Asia/Tokyo

Asia/Tokyoに変わりました。


ホスト名変更、GUI/CUI切替はtinker-configから

sudo tinker-config

tinker-configを起動しました。

ホスト名や、GUI/CLIの切替は、こちらから変更が可能のようです。


IPアドレス設定

静的IPアドレスを割り当てる場合ですが。

Tinker OSは、systemdのNetworkManagerが導入されているようです。

このため、こちらの記事の手順になります。

https://denor.jp/raspberry-pi-4%E7%89%88fedora-37%E3%81%AEip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E8%A8%AD%E5%AE%9A%E7%AD%89%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E8%A6%9A%E6%9B%B8

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のカーネルソースはこちらですが。

[blogcard url=”https://github.com/TinkerBoard2/kernel”]

ダウンロードの前に。ブランチを選択して、バージョンを使用しているものに合わせましょう。今回は、debian 10のカーネル4.19になります。こちらが対応する正しいソースコードとなります。

[blogcard url=”https://github.com/TinkerBoard2/kernel/tree/linux4.19-rk3399-debian10″]


ストレージの空き容量確認

※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
  1. Device Drivers
  2. Multimedia support
  3. 「Ditigal TV Support」でスペースを入力、*マークをセットしました。
  4. その後、下にスクロールして「MediaUSBAdapters」
  5. Siano SMS1xxx based MDTV receiverにMマークをセットしました。
  6. Save→Exit→ExitまたはESC→ESC→ESC

このような感じで、CONFIG_DVB_COREとCONFIG_SMS_SIANO_MDTVが有効になりました。(次回は最初から.configファイルをテキストエディタで編集しても良さそうです


arm64でチューナを使用する場合の不具合対応

[blogcard url=”https://patchwork.kernel.org/project/linux-media/patch/20180303182056.5109-1-tomoki.sekiyama@gmail.com/”]

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を取り付け可能です。

なにかデバイスを取り付けて、長期的に使用する目的には向いている感じがします。

カーネルのビルドは少し大変かもしれませんが、よろしければ挑戦してみてください。[amazonjs asin=”B09G6VBRC4″ locale=”JP” title=”WayPonDEV Tinker Board 2S 4GB Rockchip RK3399 AIシングルボードコンピューターと16G EMMC for IoTデバイスはAndroid10 OS Tinkerboard 2S をサポートします”]

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です