📺

Orange Pi 5+Armbianで録画鯖を作る (ベースの支度編)

に公開

はじめに

Raspberry Piを使っての録画サーバーを作る話は比較的有名ですが、他のシングルボードコンピューター(SBC)で構築する話はあまり聞かないものです。
手元には以前購入したOrange Pi 5があり、性能もよいのでコイツを活用してみたいと思います。

また、以前に書いた記事末尾の宿題を片付けるという意味も多少あったりします。

Orange Pi 5ってどんなものかを知りたい場合には、昔の記事ですが以下のリンクを参照してください。

https://zenn.dev/techmadot/articles/hello-orangepi5

OSをインストールする

Orange Pi 5の発売元から公開されているOSイメージを使ってシステムを作るとスムーズなのですが、中身の得体の知れなさで気になる人がいるかもしれません。
特に、常時稼働のサーバーとして使う、ホームネットワークに参加するなどを考慮すると、たしかにケアすべきポイントかもしれません。

そこで、今回は Armbian をOrange Pi 5のベースOSとして使ってみます。

Armbian の準備

ArmbianではOrange Pi 5 用のイメージを配布しています。しかし、今回はこれを使用しません。
Armbianのリポジトリからソースコードなど一式を取得して、自分でイメージをビルドします。

Armbian の取得

以下のコマンドを実行して、Armbianのビルド環境を取得します。
今回は、v25.05 のブランチを使用してビルドを行いました。他に安定版のブランチを使用するときには、該当箇所を変更してください。デフォルトのブランチではたまたま状態が悪いこともあるので、そのときには変更しましょう。

$ git clone  --depth=1 -b v25.05  https://github.com/armbian/build.git armbian-build

ビルド

以下のコマンドでイメージをビルドします。
この INSTALL_HEADERS=yes オプションの指定がポイントで、このあとドライバをコンパイルする作業のひと手間を減らします。
このコマンドを実行するとメニューが表示され、各種設定を選択していきます。
以下のコマンドでは、デスクトップ環境無し、Ubuntu 24.04ベース(noble)、カーネル設定を変更しないなど、を指定しています。必要に応じて解除し、メニューから選んでも良いでしょう。

$ cd armbian-build
$ sudo ./compile.sh BOARD=orangepi5 \
  INSTALL_HEADERS=yes \
  BRANCH=current KERNEL_CONFIGURE=no RELEASE=noble BUILD_DEKTOP=no 

このあとのビルド作業には時間が掛かります。
状態にもよるのでしょうがディスク容量も40GB程度は用意しておくようにと見た気がします。
また、メモリも結構使うようで、VMなどで作業をしている場合には注意が必要です。今回の作業中では、VMに24GBのメモリ、64GBのディスクを割り当てて作業をしています。

microSDに書込み

正常にビルドが完了すると、 armbian-build/output/images にイメージファイルが出力されています。今回 25.05のブランチで作業をしていましたが、生成されたファイル名には 25.08 となっており、少々おかしな点がありますが、一旦許容としました。

  • Armbian-unofficial_25.08.0-trunk_Orangepi5_noble_current_6.12.28.img

このファイルを、microSDに書き込みます。
Linux系OSを使っているのであれば、以下のコマンドで書込みをします。
このコマンドで dev/sdb は、microSDが刺さっている場所とします。

sudo dd if=./output/images/Armbian-unofficial_25.08.0-trunk_Orangepi5_noble_current_6.12.28.img of=/dev/sdb

起動

microSDをOrange Pi 5に挿入し、電源を入れます。
すると、以下の項目を聞かれるので入力を進めます。

  • rootアカウントのパスワード
  • デフォルトのシェル (bash, zsh)
  • 一般ユーザーアカウント(ユーザー名・パスワード)
  • ロケールの設定

設定が完了後、rootアカウントでログインした状態になります。
この時点で、ssh-serverが動いているので、他PCからのアクセスも可能です。

チューナーデバイスのドライバをビルドする

チューナーデバイスのドライバをビルドしなければなりません。
今、Kernel は以下のようになっており、6.12が使われています。
これまでよく使用していたpx4_drvは、このカーネルバージョンではビルドがエラーとなってしまうので、他のものを使用します。

orangepi@orangepi5:~$ uname -r
6.12.28-current-rockchip64

tsukumijima/px4_drv をつかう

tsukumijima版px4_drvを使用します。
これはさまざまな改良を取り込んだ、本家px4_drvのフォーク版です。
最近のLinuxカーネルへの対応も含まれており、これならばビルドに成功します。

https://github.com/tsukumijima/px4_drv

詳しい手順はリポジトリのテキストを参照してください。
ここではドライバのビルドのところに注目して記載します。

dkmsでドライバを追加

リポジトリをクローンして、以下のコマンドを実行します。

## クローン
git clone https://github.com/tsukumijima/px4_drv

## インストールとビルド
sudo cp -a ./ /usr/src/px4_drv-0.5.4
sudo dkms add px4_drv/0.5.4
sudo dkms install px4_drv/0.5.4

Armbianをビルドしたときにカーネルヘッダのインストールをしてあったため、/usr/src には、 linux-headers-6.12.28-current-rockchip64 のディレクトリがあります。このようなヘッダディレクトリがない場合には、カーネルヘッダのインストールが必要となります。

ファームウェア

it930x-firmware.binなどを取り出し、所定の場所に配置します。
リポジトリのドキュメントより引証したものを、以下に記載します。

$ cd fwtool
$ make
$ wget http://plex-net.co.jp/plex/pxw3u4/pxw3u4_BDA_ver1x64.zip -O pxw3u4_BDA_ver1x64.zip
$ unzip -oj pxw3u4_BDA_ver1x64.zip pxw3u4_BDA_ver1x64/PXW3U4.sys && rm pxw3u4_BDA_ver1x64.zip
$ ./fwtool PXW3U4.sys it930x-firmware.bin && rm PXW3U4.sys
$ sudo mkdir -p /lib/firmware && sudo cp it930x-firmware.bin /lib/firmware/
$ cd ../

デバイス認識の確認

対象とするデバイスを接続し、以下のコマンドを実行して認識されているか確認しましょう。

sudo dmesg | grep px4

この結果、以下のようにデバイスファイルが出来ていれば、成功といえます。

[  375.040771] px4_drv: loading out-of-tree module taints kernel.
[  375.043284] px4_drv: px4_drv version 0.5.4, rev: 534, commit: b4a6f9a9f569e9365ca7ee50442109128b13ccfe @ develop
[  375.163298] px4_usb 5-1:1.0: Firmware loaded. version: 1.4.0.0
[  375.277149] px4_usb 5-1:1.0: /dev/pxs1urvideo0
[  375.277307] usbcore: registered new interface driver px4_usb

まとめ

今回はArmbian+Orange Pi 5という組み合わせで、px4_drvのビルドまでを準備しました。一番大変な土台部分を説明したので、この後はスムーズに作業ができるのではと思っています。

余談

Armbianの配布イメージをインストールして、armbian-upgrade を適用後、再起動すると起動しない状態に陥りました。アップグレードをしないとカーネルとカーネルヘッダが合わないので、避けることも出来ず。
今回はやむを得ず、自分でイメージをビルドし、その際にカーネルヘッダも含めてしまうという選択をとった次第です。アップグレードがうまくいく方法があれば、知りたいものです(なお、armbian-configからの更新でも失敗してしまう・・・)。

Discussion