春雨日記 about me tags

デュアルコアでRAM512MBの高性能()ルータを手に入れたので,録画できないか試してみました.

mirakcというMirakurunコンパチブルの軽量チューナ共有ソフトがありますが,Alpineでarmv6用イメージが公開されていることからルータレベルのショボい環境でも動くんじゃ無いかと思ったので挑戦です.

とりあえず,この記事ではrecfriioとlibaribb25のOpenWRT用パッケージを作ります.

はじめに

今回の環境:

  • WZR-1750DHP / OpenWRT 22.03 bcm53xx
  • HDUS
  • よくわからんカードリーダー
  • 青CAS

使用するチューナは適宜上HDUSとなっていますが,LDT-FS100Uです.

CPUはarmv7lとなっていますが,公式イメージではVFPが無効化されているよう?なのでハードフロートは使用できません.

*下記の準備が終わったソースは公開しているので,recfriioを使う以外に興味が無い方はSDKの用意まで飛ばして下さい

パッケージの準備

OpenWRTのビルドシステムでは,パッケージ毎にMakefileを用意し,そこにパッケージ生成方法を記述します.

それをfeedで参照してビルドするのですが,とりあえずMakefileを用意します.

recfriio

stz版のフォークであるhimalock版を使用します. https://github.com/himalock/recfriio

recfriioで必要となるパッケージはlibusb-1.0 glib2 libpthread libboost-system libboost-filesystem pkgconfigです.(Makefileより)

なのでMakefileをこんな感じに

https://git.haru3.me/haru/recfriio/commit/0352149dff9771a3c049a3415cdbe64a0eda4d37

結構めちゃめちゃやってますがビルドが通ったのでヨシ

内蔵しているb25は古いので使用しません.b25抜きでビルドできるように若干修正しています.

ついでにHDUS以外の追加コンポーネントはコメントアウトしてあります.

libaribb25

Mirakurunではarib-b25-stream-testを利用していましたが,あれは更新が止まっており大変古いので新しい物を使います.

フォークが色々あって迷うところですが,tsukumijima氏の物を使用しました.

こちらはcmakeプロジェクトなのでMakefileを追加します.

https://git.haru3.me/haru/libaribb25/commit/79219ed20701e4e7ec0872db445a2ba48974d1ec

SDKの用意

ソースの改造が終わったので,ビルドする為にSDKを用意します.

1.SDKのダウンロード

使用しているプラットフォーム毎に異なるので,各自落として下さい.場所はOpenWRTのイメージが公開されている所の下部です.

私の場合,bcm53xxでOpenWRT 22.03なので

https://downloads.openwrt.org/releases/22.03.0/targets/bcm53xx/generic/

ここの下部にある openwrt-sdk-22.03.0-bcm53xx-generic_gcc-11.2.0_musl_eabi.Linux-x86_64.tar.xz です.

使用しているOpenWRTとバージョンは合わせる必要があると思います.

2.インストール

作業ディレクトリは/rootです.

まず必須パッケージのインストール

詳細は https://openwrt.org/docs/guide-developer/toolchain/install-buildsystem にディストリ毎に書いてあります.

私はArchなので

1
2
3
4
5
pacman -S --needed base-devel autoconf automake bash binutils bison \
bzip2 fakeroot file findutils flex gawk gcc gettext git grep groff \
gzip libelf libtool libxslt m4 make ncurses openssl patch pkgconf \
python rsync sed texinfo time unzip util-linux wget which zlib
pacman -S --needed asciidoc help2man intltool perl-extutils-makemaker swig

を実行.

次にSDKを触ります.

1
2
3
4
5
6
wget https://downloads.openwrt.org/releases/22.03.0/targets/bcm53xx/generic/openwrt-sdk-22.03.0-bcm53xx-generic_gcc-11.2.0_musl_eabi.Linux-x86_64.tar.xz
tar xvf openwrt-sdk-22.03.0-bcm53xx-generic_gcc-11.2.0_musl_eabi.Linux-x86_64.tar.xz
cd openwrt-sdk-22.03.0-bcm53xx-generic_gcc-11.2.0_musl_eabi.Linux-x86_64
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig

3.レポジトリの作成

feedsから参照出来るように,レポジトリを作成します.

まず,パッケージを格納するディレクトリを用意します.

場所は/root/mypackages/examplesとしました.

そして上で改変したソースを追加

1
2
3
4
mkdir -p /root/mypackages/examples
cd /root/mypackages/examples
git clone https://git.haru3.me/haru/recfriio.git
git clone https://git.haru3.me/haru/libaribb25.git

feedsに見てもらえるよう設定

1
echo 'src-link mypackages /root/mypackages' >> /root/openwrt-sdk-22.03.0-bcm53xx-generic_gcc-11.2.0_musl_eabi.Linux-x86_64/feeds.conf

インデックスを更新

1
2
./scripts/feeds update mypackages
./scripts/feeds install -a -p mypackages

参考にさせて頂きました: https://continue-to-challenge.blogspot.com/2019/08/openwrt_30.html

ビルド&インストール

それではパッケージを作成します.

1
2
3
4
5
cd /root/openwrt-sdk-22.03.0-bcm53xx-generic_gcc-11.2.0_musl_eabi.Linux-x86_64
make package/recfriio/prepare
make package/recfriio/compile -j6
make package/libaribb25/prepare
make package/libaribb25/compile -j6

成功すると,SDKのbin/packages/{アーキテクチャ}/mypackages/にあるはずです.

1
2
3
ls bin/packages/arm_cortex-a9/mypackages/
as11loader_1.0-1_arm_cortex-a9.ipk  recfriior5_1.0-1_arm_cortex-a9.ipk
libaribb25_1.0-1_arm_cortex-a9.ipk

これをscpあたりで/tmpに転送し,

1
2
3
opkg install /tmp/as11loader_1.0-1_arm_cortex-a9.ipk
opkg install /tmp/recfriior5_1.0-1_arm_cortex-a9.ipk
opkg install /tmp/libaribb25_1.0-1_arm_cortex-a9.ipk

でインストールできます.

依存パッケージは自動的にダウンロードされるはずなのでインターネットに繋いでおいてください.

https://mevius.5ch.net/test/read.cgi/avi/1602307605/

の140にあるリンクからSKNET_AS11Loader.sysを抽出し,/lib/firmware/にコピーするとas11loaderが読んでくれます. 改変版なので同じディレクトリに置いてなくても大丈夫.

おわりに

無事OpenWRTルータでもHDUSを用いて録画したり,B-CASでデスクランブルしたりできるようになりました.

動作中のCPU利用も大したことなく,軽量な録画サーバであれば十分ルータだけでやっていけそうです.

力尽きたので書くか分からないですが,mirakcを使って遠隔で視聴することも出来ました.