Allwinner H6 TVBOXにPanfrostを再インストールする

どうしたわけか今まで使っていたTVBOXのArmbianが突然ブートしなくなりました。この機種H6 miniはTFカードソケットがないのでブートしなくなったら終わりです。おそらくapt-mark holdでu-bootパッケージをホールドしていたのが外れて公式パッケージを入れたせいだと思われますが、こうなっては最初から作りなおす以外に手はありません。手順次のとおりです。

  1. PhoenixSuitでAndroidファームウェアを入れてリカバリする
  2. リカバリモードにブートしてTwep-tx6をインストールする
  3. TwrpのAdvanceモードのターミナルからddコマンドを使ってeMMCにArmbianをインストールする
  4. リブート

Armbianもこの際に新しいイメージを作りました。(2020.6.4: u-boot fix)

https://mega.nz/folder/hWpnyJ7B#4cNnkcDH7UbtnXVCVneW6A

Desktop Image

https://mega.nz/folder/dbgH1BjJ#onJAdr8A6XtUQ_PT-jquBg

Update Kernel

これでリカバリができてPanfrostをコンパイルしようとしたらmesonのインストールで躓きました。どうもPython3.7でないと動かないようです。そこでPython3.7にしたら今度は依存関係でPythonのモジュールがが動かなくなってしまい、また元のPython3.6に戻しました。こういろいろトラブルが出て手に負えなくなってきたので、Armbianのフォーラムを読んでPanfrostのインストールをまとめてみました。

Unable to make Panfrost work on H6

Panfrostのインストール手順

1.リポジトリを追加してアップグレードする

sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:oibaf/graphics-drivers 
sudo apt-get update
sudo apt-get upgrade

2.パッケージをアップデートする

sudo apt-get install libgles2-mesa

3.Xorgをアップデートする

sudo apt-get install xserver-xorg-core-hwe-18.04
sudo apt-get install xserver-xorg-input-evdev-dev-hwe-18.04

4./etc/X11/xorg.conf.d/01-armbian-defaults.confを編集する

Section "Monitor"
	Identifier		"Monitor0"
	Option			"DPMS" "false"
EndSection
Section "ServerFlags"
	Option			"BlankTime" "0"
	Option			"StandbyTime" "0"
	Option			"SuspendTime" "0"
	Option			"OffTime" "0"
EndSection
Section "Device"
	Identifier		"Default Device"
	#Option	"AccelMethod" "none"
	Option	"AccelMethod" "glamor"

5.リブートしてテストする

$ Xorg -version

X.Org X Server 1.20.5
X Protocol Version 11, Revision 0
Build Operating System: Linux 4.4.0-170-generic aarch64 Ubuntu
Current Operating System: Linux orangepi3 5.6.13-sunxi64 #trunk SMP Fri May 29 09:05:04 UTC 2020 aarch64
Kernel command line: root=UUID=876ff9a9-0f4b-4fa5-98d2-9bc6bb972ef9 console=ttyS0,115200 console=tty1 maxcpus=4 rootdelay=10 cryptopts=target=mmcblk2p2_crypt,source=/dev/disk/by-uuid/34dba1e7-e2a4-4ae7-81e8-27bebebae69d,keyscript=/lib/cryptsetup/scripts/openluksdevices.sh keydisk=0a57c6eb-0839-4bf4-a6ce-f50f16f06549 rootdelay=10
Build Date: 18 December 2019  08:15:29AM
xorg-server-hwe-18.04 2:1.20.5+git20191008-0ubuntu1~18.04.1 (For technical support please see http://www.ubuntu.com/support) 
Current version of pixman: 0.34.0
	Before reporting problems, check http://wiki.x.org
	to make sure that you have the latest version.

v1.20.5なっているのを確認してからglmark2とglmark2-es2のテストをします。

shiva@orangepi3:/etc/X11/xorg.conf.d$ glmark2
=======================================================
    glmark2 2014.03+git20150611.fa71af2d
=======================================================
    OpenGL Information
    GL_VENDOR:     Panfrost
    GL_RENDERER:   Mali T720 (Panfrost)
    GL_VERSION:    2.1 Mesa 20.2.0-devel (git-c48f42e 2020-05-30 bionic-oibaf-ppa)
=======================================================
[build] use-vbo=false: FPS: 124 FrameTime: 8.065 ms
[build] use-vbo=true: FPS: 137 FrameTime: 7.299 ms
[texture] texture-filter=nearest:^C
shiva@orangepi3:/etc/X11/xorg.conf.d$ glmark2-es2 
=======================================================
    glmark2 2014.03+git20150611.fa71af2d
=======================================================
    OpenGL Information
    GL_VENDOR:     Panfrost
    GL_RENDERER:   Mali T720 (Panfrost)
    GL_VERSION:    OpenGL ES 2.0 Mesa 20.2.0-devel (git-c48f42e 2020-05-30 bionic-oibaf-ppa)
=======================================================
[build] use-vbo=false: FPS: 123 FrameTime: 8.130 ms
[build] use-vbo=true:^C

追記1:

再インストールしても前と同じでブートできないトラブルがありました。今まで動いてたのに突然おかしくなったのに首を傾げたのですが、面倒でもUARTでアクセスしてみました。

DRAM:Error while initializing DRAM PHY!

resetting ... 

今までも何度かエラーメッセージが出た後ブートできたのですが、それが突然無限ループになっていたようです。それでリサーチしたらArmbianフォーラムで議論していました。

h6 allwinner tv box need help!!!!

端折って結論から言えばu-bootの問題で入れ替える必要があります。このフォーラムで解決ずみのu-boot-sunxi-with-spl-h6-noname.binをフォーラムで書いてある通りにインストールします。

追記2:リモートコントロールのインストール

私の作ったイメージはTanix TX6ベースなのでそのまま使い続けていましたが、リモートコントロールが使えません。lircdなど試してみてもうまくいきませんでした。そこで使えるようにTX6を土台にパッチを作りました。目的はリモートコントロールでオンオフすることです。DTもH96 mini用に作りました。結果はVLCなどのメディアプレーヤで使えるのですが肝心のON/ OFFではOFFしか機能しません。OFFの状態ではLinuxは動いてないのでONにできないのは当然と言えば当然です。LibreELECでは起動もできるので何かu-bootに組み込むなどの方法があるようですが、先に書いたようにu-bootが微妙なのでそのままです。

Thinkpad X200にmacOS High Sierra VMを入れる

ThinkPad x200はSnow Leopard止まりですがVirtualBoxを使って入れられないか検索したところどうやらできそうだということがわかりした。そこでサイト通りにやったのですがやはり簡単には行きませんでした。まずMojave 10.14.6は入りません。インストーラーがHWチェックでエラーを出すのでインストールが完了できません。

com.apple.diskmanagement error 69874

そこでHigh Sierraなら入りそうなのでやってみることにしました。最初の難関はインストールディスクの賞味期限が切れていることです。それで次のようにホストPCのシステム時計を過去に戻します。

date -s 030300002019

Install Diskの作成

参考のサイトの通りに作成します。

hdiutil create -o /Users/krishna/wk/highsierra -size 7900m -volname highsierra -layout SPUD -fs HFS+J
hdiutil attach /Users/krishna/wk/highsierra.dmg -noverify -mountpoint /Volumes/highsierra
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/highsierra --nointeraction
hdiutil detach /volumes/Install\ macOS\ High\ Sierra
hdiutil convert /Users/krishna/wk/highsierra.dmg -format UDTO -o ~/Desktop/highsierra.cdr
mv ~/Desktop/highsierra.cdr ~/Desktop/highsierra.iso

VirtualBox イメージの作成

これも参考のサイト通りに作成します。

$ VBoxManage modifyvm  'macOS 10.13 High Sierra' --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff
$ VBoxManage  setextradata 'macOS 10.13 High Sierra' "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "iMac11,3"
$ VBoxManage  setextradata 'macOS 10.13 High Sierra' "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
$ VBoxManage  setextradata 'macOS 10.13 High Sierra' "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Iloveapple"
$ VBoxManage  setextradata 'macOS 10.13 High Sierra' "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
$ VBoxManage  setextradata 'macOS 10.13 High Sierra' "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

x200ではこれだけだと動かないので次の設定を追加します。

$ VBoxManage  modifyvm 'macOS 10.13 High Sierra'  --cpu-profile "Intel Core i7-6700K"

VirtualBoxの設定

ゲストOSがUSBにアクセスできるようにするためにホストPCの設定です。

gpasswd -a USER vboxusers

VirtualBox側の設定です。

- Pointing Device: USB Tablet OR PS/2 Mouse
- Network: Intel PRO/1000 MT Desktop Intel PRO/1000 MT Desktop
- USB: usb3

マウスとキーボードはx200では厳しいものがあり、USB Tabletだとチャタリングを起こすときがあります。そうした場合、PS/2 Mouse設定で幾分改善されます。ネットワークは使えないと思うのですが一応設定しておきます。VirtualBoxのネットワークカードはインストールでエラーになるのでUSBIPを使います。もしUSBIPがなければ試してませんがスマホのUSBテザリングでもいけると思います。

VirtualBox 5.2(Ubuntu 18)の場合、インストールの途中でリブートしたときに、また振り出しに戻ります。それを避けるためにActivate Boot ManagerをCtrl+F12で起動します。詳しくは参考のサイトに書かれています。

Post Installation

解像度の設定をやってみたのですが無駄した。一応設定方法を書いておきます。

VBoxManage setextradata "macOS 10.13 High Sierra" VBoxInternal12/EfiGraphicsResolution 1280x720

キーボードはもちろんThinkpadなので、x220で使ったKextを/L/Eにインストールします。

  • VoodooPS2Controller.kext
  • IntelMausiEthernet.kext

Kext Utility.appをApplcationsにインストールして実行します。

VirtualBoxのフルスクリーンモードにすると使いやすくなります。


参考

ThinkPad X230iのRefurbish

H6 TVBOXの他にThinkPad X220をメインに使っていますが、たまにメンテ等で使えない場合、サブ機のX200を使います。X200はCore2Duoでなんとか使えるのですが、Javascriptsを使ったサイトではかなりストレスを感じます。そこでサブ機用に中古X230iをヤオフクで、ジャンク扱いですがかなり破格の値段、2700円(米ドルで約25ドル)で手に入れました。HDDなし、メモリなし、一部天板が欠けている、キーボドの文字盤がいくつか消えているというもので、さらにバッテリーが正規品でないというエラーまででます。その他は至って正常でした。このジャンク品を使えるようにするのが今回の目的です。

HDDとメモリはX220で換装してあまったHDDと16GBのメモリを8GBづつ分けて使うことにしました。HDDとメモリをつけると無事ブートできました。Windowsはドライバーを自動的に再インストールするので特に問題はありませんでした。

BIOSのアップデート

一番の問題はBIOSのアップデートです。X230はWhitelistを外したMODBIOSがあり、それをアップデートすることで、WIFIモジュール、さらに正規外のバッテリーも使えるようになります。手順は次のとおりです。

  1. 正規BIOSのダウングレード
  2. ECファームウェアのアップデート
  3. UEFI BIOSのアップデート

UEFI BIOSのバージョンがv2.77になるとロックがかかってECファームウェアをアップデートできないのとMOD UEFI BIOSもアップデート前のバージョンにシビアなので一旦、ダウングレードしておきます。

ECファームウェアはこのサイトに詳しく書かれているのですが、一つでも間違えると、それこそJTAGで復旧する以外手はなくリスクが大きいので、次のサイトからお手軽版を手に入れてアップデートしました。

最後に1vyraからダウンロードしたMODBIOSをアップデートします。

天板の修復

まず隙間をタバコフィルターで埋めて、その上にエポキシ系樹脂を充填します。

油性マジックで修復した部分を塗ってしまいます。車用の補修ペンがあればそちらのほうが尚いいでしょう。

以上でリファービッシュの完了です。パーツを買い揃えると却って高く付きますが手元にあるもので済ますことができれば格安のラップトップに変身です。WIFIモジュールも余っているブロードコムのパーツをインストールしたのでmacOSのCatalinaも入れて使えるはずです。

iSCSIとNetwork Manager

有線であればiSCSIをBoot時に有効できるのですが、Wi-Fiの場合はデスクトップ環境になってからWi-Fiが使えるようになるため工夫が必要です。Ready NASでiSCSIを使えるようにしているのですが、コマンドラインからの操作は煩わしい。検索してみるとRed HatのドキュメントでNetwork ManagerのdispatcherでiSCSIを有効化していたので、そのアイディアを使ってみることにしました。

Ready NASのiSCSIはFirmwareに組み込まれていて特殊のなのですが、基本は同じです。

bidirectional CHAPは設定しません。これはドキュメントがないのでユーザー名の設定方法がわからないためです。ログイン用のCHAPは設定します。

クライアント側ですが、詳しい設定は他のドキュメントにあるので割愛しますが、ログイン用の設定は、/etc/iscsi/nodes以下にあるdefaultを編集します。

#node.session.auth.authmethod = CHAP
#node.session.auth.username = 
#node.session.auth.password = 
node.session.auth.username_in = group1
node.session.auth.password_in = CHAP_secret

Network Managerのdispatcher用のファイルを作成します。

/etc/NetworkManager/dispatcher.d/10-iscsi

#!/bin/sh

iscsiadm  -m node  --targetname \
 "iqn.1994-11.com.netgear:nas-sh:xxxxxxxxx:group1" \
 --portal "192.168.1.100:3260,1" --login

実行パーミッションをつけてリブートします。

TVBOX: Zen Box Z6のArmbian化

ヤオフクで入手したのでさっそくArmbianをインストールしてみました。CPUはオクトコアのamlogic s912で今まで使っていたs905xより性能がアップしています。ビルドしたfirmwareは個人のプロジェクトなので不具合が出るケースがよくあります。今回、予想通り問題がありました。最新カーネルが5.7.0-rc3なのですが、これだとカーネルに不具合がありイーサネットが使えません。イーサネットが使えるカーネルは以前ビルドした5.5.1-aml-s9xxxを使いました。この機種はTVBOXには珍しく1Gbpsなのでサーバーとして最適です。

Wi-FiはクアルコムのQCA9377ですが、一部ファームウェアないのでそのまま使えません。まずarmbian-firmware-fullをインストールして、さらにfirmware-sdio-5.bin_WLAN.TF.1.1.1-00061-QCATFSWPZ-1をネットで探して/lib/firmware/ath10k/QCA9377/hw1.0にコピーします。これは必要ないかもしれませんが、ln -s firmware-sdio-5.bin_WLAN.TF.1.1.1-00061-QCATFSWPZ-1 firmware-sdio-5.binとしてシンボリックリンクを張っておきます。さらにDTはmeson-gxm-mecool-kiii-pro.dtbがそのまま使えるのですが、旧カーネルにないので、カーネルを再ビルドが必要です。面倒なので次期アップグレードで直っていることを期待してそのままです。

デスクトップとしてH6より快適に動作しますが、ただカーソルのチラツキが気になります。amlogic系は前バージョンs905xでもそうでしたがデスクトップとしては今ひとつです。その点、H6は申し分ありません。Panfrostは最新のmesaをいれれば使えそうです。

Wi-Fiチップを調べてみようと思ったのですが今回は特に必要ありませんでした。Wi-FiのドライバーもBTのドライバーもdmesgアウトプットでだいたい予想が付きました。

Panfrotstの設定はArmbianのフォーラムの通りでできます。

sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt-get update
sudo apt-get upgrade
/etc/X11/xorg.conf.d/01-armbian-defaults.conf

Section "Device"
    ...
    Option      "AccelMethod"    "glamor"
    ...
Section "OutputClass"
    Identifier "Panfrost"
    MatchDriver "meson" 
    ... 

H6 TVBOXのヒートシンク換装

Panfrostが使えるようになったのはよいのですが、そのためにCPUを一つ減らなさないとオーバーヒートしてしまう問題が出てきました。そこで思い切ってヒートシンクを交換に挑戦してみました。H6 CPUは1.5cm角なので2.0〜2.5cm角のファン付きヒートシンクをアマゾンから取り寄せました。

もとのヒートシンクを外すにはハンダゴテで熱を与えると接着剤を柔らかくなり取りやすくなります。ヒートシンクを取ったあと、マイナスドライバーで残った接着剤を取り除き、細かい紙ヤスリで磨きます。そのあとエタノールできれいに拭き取ります。

取り寄せたヒートシンクは接着テープがあったのでそれでCPUに固定しました。とくにグリスなどは必要ありませんでした。CPUファンは5Vなので風量が十分かどうか不安でしたが、効果ははっきり出てました。H6のクアッドコアをフルに活用しても十分温度上昇を抑えられています。