2020年10月20日火曜日

Rock64にEPGStation

 CPUパワー的にはいけんじゃないの?とNanoPi NEOにEPGStation載せてみたまでは良かったんですが、結局、録画はできそうなもののエンコードに難があって、rateは高く設定しなきゃなんないわリップシンクできないわということで、これじゃアカンね… 結局、Allwinner系SoCではアクセラレーションかけられず、で、ダメなんだね(泣)。はぁ…、NanoPi NEOでできそうなアプリが減っていく…。

まぁ、ラズパイ3Bで本線は確保してるんで所詮はバックアップなんですが、そうは思いつつも、ちゃんと録画性能ないものに電気食わせてても仕方ないので、やはりrock64を持ち出すことにしました。これならラズパイ3Bよりも安くて速いし…

Rock64 + Raspi3用ケース

ボードサイズは同じだし、USBポートの数が違うけどHDMIなどの位置も同じだから、電源コネクタの違いさえ加工すればラズパイ3B用のケースに収まるよね、ということで、ラズパイ用のケースを流用してるんです。

今回もそれでいこうと思ってピックアップしたケース、3段重ねタイプでした。

入れてみると、この、真ん中にある「中層」の薄い部分、ラズパイとrock64の部品配置の違いで完全に邪魔であることが判り、あえなく総撤去。あとはそれに加えて、電源口の違いを修正すれば収まってくれます。

ということで準備完了。なお、RK3328は、経験上それなりに熱くなるので、効果のほどは微妙ですが、放熱器を乗せてあります(下の銀色の箱はHDD)。これでも、もしかすると夏場、h.264エンコードの際に熱くなりすぎるかも知れません。

これでrock64は3台目になるんですが、今までとは異なり、armbianをインストールしてみました。Armbian rock64には、現時点でLinux5系のイメージと、Linux4系のLegacyと銘打ったイメージがあります。私、HDMIモニタを使ってなくてHDMI - VGAアダプタを使っているんですが、Linux5だと、それを使った表示ができません。HDMI直結なら問題ないことは判ってるんですが(HDMI付きのTVでは問題なく表示できるがTVは家族共用ですから…)、基本ヘッドレスとはいえ場合によってはHDMI - VGAを使用するので、Legacyを使います。ここまでは問題なし。

で、チューナーは、PX-S1UDです。


ん?チューナーが動いてない…

mirakurunまでインストールしてチャンネルスキャンしてみると、何も検出してくれません。おやや…とlsusbしてみると、ちゃんとチューナーは見つけてますが、dmesgしてみるとreturn code -12で正常に立ち上がれていません。

 smsusb:smsusb_init_device: smscore_register_device(...) failed, rc -12

 smsusb:smsusb_probe: Device initialized with return code -12

 smsusb: probe of 2-1.4:1.0 failed with error -12

しかしちゃんと先人は居られるもので…ありがとうございます。


久しぶりのカーネルビルド???

まだLinux2.xの初期以前の頃は、PCにLinuxインストールするにしても、PCIカードのデバイスドライバの存在非存在や、ある機能のサポート有無がドライバのバージョンに依存していたことがあったり、ドライバのサポート状況を見てPCIカードを選んだりドライバソースを更新するなどで、比較的頻繁に、カーネルのreconfigやbuildをやっていました。もうだいぶ昔のことで、2.x後期頃からそのような機会も大幅になくなり、ほぼ一回インストールしたらカーネル再構築することもなく…と、長らくエンドユーザーに徹しておりました(汗)

しかしまぁ、カーネルソースにパッチを当てる以上buildは必須なので、armbian-configを通じて使用しているカーネルソースをダウンロードしパッチを当てます。smsusbおよび関連するモジュールのみの問題のはずなので、カーネル自体を入れ替える必要なく、そのため今走っているカーネルと同じバージョン情報でモジュールをbuildする必要があります。.config保存しておいてmake mrproper、.config戻してmake oldconfigするのは今も変わらず。さて、走行しているカーネルのEXTRAVERSIONは、というと…uname -rした結果は4.4.213-rockchip64、と言うことなので、はいはい、じゃEXTRAVERSIONは-rockchip64、それを渡しつつmake modules_prepareしてmake modules。で、できたモジュールをmodprobeしてみると…

smsmdtv: version magic '4.4.213-rockchip64+ SMP mod_unload aarch64' should be '4.4.213-rockchip64 SMP mod_unload aarch64'

え”?俺"+"なんてつけてないんだけど…。

.scmversion

実はこれ、まったく知らなかったんです…なぜ?機構的には古くからあるようなのに。

いつもカーネルイメージ全体作り直すか、基本debian使いなので、debianのソースを使用し更新するモジュールだけdebianの仕組みの中で作り直していたから、意識する必要なかったんですかね…。


ということで、.scmversionをtouchして、make mrproperからやり直し。
クロス環境ではなくローカルbuild、かつ、後で気づいたんですがw、シングルプロセスでbuildしてたので、moduleだけとはいえ数時間かかるプロセス。
最終的に、同じversion magicのモジュールを手に入れることができました。これでチャンネルスキャンを行わせてみると、今度は正常にスキャンできました。

これで、ラズパイ3Bコケても、比較的容易に中継ぎ登板できるかなと思います。
さて、この次は、Pi Zeroではprime video再生できなかったkodiか。それもまたrock64かな…。
 

2021/5/25追記

 諸般の事情でこの記事の後、PX-S1UDを使用した録画機は、PineA64に移っていました。それはもうすんなり動いたんで書くこともなかったんです。しかし、そいつに使っていたHDDが寿命を向かえていることが判ったため、急遽新たなレコーダーを起こす必要にかられ、rock64を再登板させて引き継ぐことを考えました。
当然、当時のセットアップ状況が残っているわけもなく、新たなインストールです。

・USB3の問題 

今から調達するとなるとUSB3を前提にしたくなるわけで当然そういう選択になります。rock64自体、USB3.0対応しているから大丈夫だよね…。…。…。…。ところが、動作が怪しい。ちゃんとUSB3で認識するんだけどformatかけると停止、というか、エラーを発しだす。
これがまたx64なPCでは確実に動くんで、HDD自体の不良ではありません(ORICOの2.5"のケースに6G SATAのHDD)。
(時系列が実際に起こったこととは入れ替わって書いてるんですが、順序としてはPineA64にこのHDDをつないだとき、動作しなかったんですよ。そのあとx86に持っていってみて問題ない、ということは、USB3 HDDのサポートに問題あるかも?ということで、rock64が再浮上したのでした。)
 
となると…また電源問題かよ。
 
残念ながら手元にはセルフパワーなUSB3 hubはなく、USB2しかない。しかし、PineA64ではUSB2で性能的な問題はなかったので、USB3 hubを調達するまでのつなぎでUSB2で行くことにする。

・OS的問題

Rock64の場合、ちょっとケチった環境でモニタにHDMIがないからと、HDMI - VGAあるいはHDMI - DVIアダプタを使おうとすると、ayufan氏のインストールイメージ以外ではHDMIがそれらアダプタに適した出力をしてくれない。そのため、armbianなどの場合ヘッドレスで使うしか今のところない。
この問題を知る以前から、microSDブートではなくHDDブートのためにayufan氏のイメージを使用してきたけど、安定版としては4.4.190と、だいぶ古いカーネルを使うことになり、かつ、一部のUSB機器を接続するとクラッシュを起こす。そのため、ちょっと冒険して5.12.0のイメージを使うことに。
ただ、xubuntuのイメージを使ったはずなのに、32GのmicroSDはフルフルに。仕方ないので、minimalにxubuntu-desktopを追加インストールする形でセットアップを行う。これなら32GのmicroSDはスカスカです。

・EPGStation v2

もう数回セットアップしたことになるmirakurun+EPGStation、手順だけ、当時から参照させてもらっているサイトのお世話になれば大丈夫かな…と思いきや、EPGStationがv2と新しくなっている。
セットアップマニュアルにあるとおりにやっているはずなのに、vue-cli-service not foundでbuildが完了しない。node_modules消して〜とか試してみるがダメ。どうも"Javascript heap out of memory"で落ちている、ということで、最終的に、
export NODE_OPTIONS="--max-old-space-size=1024"
が必要、と知るまで、一日掛かってしまいました。これでなんとか動きだしました。 rock64に都合3G swap割り当ててもダメだったので、オンメモリで1G以上必要だったのでしょう。

・USBの性能的問題

ところがお試し録画してみると、録画したものは全然ダメダメ、画面の真ん中くらいしかちゃんと動画再生できてない(後はブロックノイズ)。USB2って一応480Mbpsあるんで、HDDとチューナー同じhubにぶら下げても大丈夫でしょってやってたんですが、それって実はPineA64時に踏んだ轍で、パフォーマンス的にダメなんです。なので、結局USB3ポートにセルフパワーhubをつけてHDD、USB2ポートの一つにPX-S1UD、もうひとつのUSBポートにHID系のものをつなぐ、という構成で、ようやく運用できるようになりました。
最終的には、セルフパワーのUSB3 hubを持ってきてUSB3につながないと、HDD性能が生きないので、近いうちに調達する事にします。さすがに桁が違うのでね…。

・余談

セットアップ時にあんまり考えず、mirakurun+EPGStationをセットアップして最初立ち上げ番組表みたとき、時間が「?、UTCになってる…」ということでtimezoneを直したところ、すでにEPGを取得済みの部分は16時間ずれて解釈されたまま残ってしまうことが判りました。当然、録画失敗します。
EPGをフラッシュする方法が判らず、しかしまぁそのうちちゃんと同期するでしょ、と放っておいたら、翌朝まで16時間ずれ番組表が残ることになってしまいました…気をつけましょう。
 

 

0 件のコメント:

コメントを投稿