Mecool M8s Pro WのArmbianアップグレードで窮地に陥った話

この機種はAmlogic 905wのチップを使っていて、性能が905xに比べて若干低いい以外は性能は同じです。カーネル5.1なのでそろそろアップグレードしなきゃと思い続けていてようやく取り掛かることにしました。普段から不思議に感じていたのですが、完成度が高いわりにArmbianでは正式サポートしていません。なぜかという疑問がこのアップグレードを機にわかりました。

窮地その1:ddでeMMCに書き込む

ddでTFカードからeMMCに書き込めば、基本使えるはずなのですが、Amlogic製のTV-boxに限っては違います。eMMCデバイスのbootloaderの部分に固有の情報があり、それがないとシステムが動きません

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk1p1      1368064  1617919   249856  122M  c W95 FAT32 (LBA)
/dev/mmcblk1p2      1619968 30777343 29157376 13.9G 83 Linux
...
Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       32768   557055   524288  256M  e W95 FAT16 (LBA)
/dev/mmcblk0p2      557056 60906687 60349632 28.8G 83 Linux

eMMCのスタートは1368064から始まっていて、一方、TFカードは32768です。その情報を上書きしなようにするためにarmbianではnand-sata-installというコマンドを使います。また最新のイメージではinstall-aml.shというコマンド使います。さらに厄介なのはinstall-aml.shコマンドでインストールするとなぜかもとのAndroidが立ち上がってしまうので、最初に旧Armbianのnand-sata-installでインストールし、さらに新Armbianのinstall-aml.shを使います。さらに悪いことにAndroidを最新にアップグレードすると今度はRFカードからブートができなくなります。さらにこの機種はTFカードからブートする手段が物理的にもソフト的にもありません。大抵のTV-boxではリセットスイッチを押しながら電源を入れたり、リモコンを押したりすればできるのですが、このTV-boxの基盤にそれらしきボタン部分のショートさせてもできませんでした。さらにこのTV-boxのリモコンはUSB接続なのでLircのようにカーネルに直接アクセスできません。またリセットボタンを長押ししながら電源を入れるとUSB OTGモードになれますがそれもできません。最大の問題点はOTGモードでWindows機からAmlogic専用のロム焼きツールが使えないということです。

窮地その2:インストール失敗でアクセスできない

eMMCにArmbianのインストール失敗。TFカードブートもできずリブートを繰り返すようになってしまいました。原因はDTのセッティングをuEnv.iniとextlinux/extlinux.confの両方に設定していなかったことでした。

こうなるをゲームオーバーです。そこで分解してUART接続してどうなっているのか見てみることにしました。

 

窮地その3:USBシリアルドライバーがない

Armbianに私が使っているUSBシリアルドライバーがない

私が使っているCH341は今まではUbuntuを使っていたので、なんの問題もなく動いていましたがArmbianに移行した今ではそのままでは使えないのでドライバーを作ります。ところが本家の中国のサイトからドライバーのソースをダウンロードしても最新のArmbianではコンパイルできません。本家のサイトにご丁寧にかいてあります。これは中華モノに共通して言えることですが、安くていいものなんだけどドライバーがないかあるいは何か問題がある。そこでパッチを探したところ、修正パッチの当たったリポジトリが見つかり、そのソースをコンパイルすると使えるようになりました。

https://github.com/juliagoda/CH341SER.git

解決

絶体絶命の状況下でUART接続してみたら、どうやらU-Bootのところでエラーを起こして止まっているという状態でした。これで首の皮1枚つなかったことになります。ここから復旧するために、いろいろDebian WIKI等で勉強して、TFTP/DHCPでブートが行けそうという感じになりました。さらにU-Bootのhelpで何が使えるか見てみると、x86_64のGrubと同じような復旧、すなわち、ローカルディスクにアクセスしてブートすることができそうだということがわかってきました。そこでarmbianのbootディレクトリでなにか情報を探ってみたところ、それらしきものがありました。USBは認識するもののアクセスできません。TFカードはできました。これで一筋の光が差し込んできました。この光に沿って解決していきます。これ以上長々書いても意味ないので次のようにしてU-BootでTFカードからブートできます。TFTPbootの場合はネットワークをセットアップします。pingで確認できます。ブート方法は多少違いますが基本同じです。

#setenv ipaddr "192.168.1.2"
#setenv netmask "255.255.255.0"
#setenv dnsip "192.168.1.1"
setenv env_addr "0x10400000"
setenv kernel_addr "0x11000000"
setenv initrd_addr "0x13000000"
setenv boot_start booti ${kernel_addr} ${initrd_addr} ${dtb_mem_addr}
fatload mmc 0 ${kernel_addr} zImage
fatload mmc 0 ${initrd_addr} uInitrd
fatload mmc 0 ${env_addr} uEnv.ini
env import -t ${env_addr} ${filesize}
fatload mmc 0 ${dtb_mem_addr} ${dtb_name}
run boot_start

この経験でAmlogic独自の方法でArmbianをブートしていることがわかりました。これは100%オープンソースという建前のArmbianの趣旨に反しています。よってArmbianからリリースされずフォークプロジェクトとしてリリースされるということです。

WireGuard in NetworkManager

Ubuntu 18.04ではまだWireGuardはリリースされていないので、NetworkManagerのアプレットはありませんがリポジトリからインストールできます。目的はネット周りはすべてNetworkManagerに任せれば利便性が向上するということです。IKEv2のStrongSwanもOpenVPNもみなアプレットでNetworkManagerからアクセスできるので非常に利用価値が高くなっています。Githubで説明に書かれている方法でやってみたのですがパスに不具合があり正常にインストールできませんでいたので、すこし変更しました。

./autogen.sh
make
sudo make sysconfdir=/etc install

設定ファイル以外はすべて/usr/local配下にインストールします。またresolvconfが必要になるのでパッケージをインストールします。

apt install openresolv

WireguardはStrongSwanのIKEv2に比べても安定しています。IKEv2は8時間程度で切れるのですがWireGuardは24時間継続できています。また設定も簡単なので問題が起きても修正をかけやすいメリットがあります。

TV-box:Bluetoothに挑戦

先日はWi-Fiが使えるようになってネットワーク環境が改善されました。このIT6335チップはBT/WIFIコンボなのでWi-Fiが使えれば必然にBTも使えるようになるはずです。ちょうどArmbianのフォーラムでOrangePi3のBTのディスカッションがあったのでその情報を参考にセットアップしてみました。結論から言うとデバイスは立ち上がるものの不安定で接続ができいません。

画面のところまでできるのですがその後切断してしまいます。現在のところの設定です。

/etc/init.d/ap6255-bluetooth
    
    MAC_OPTIONS="11:22:33:44:55:66"
    PORT="ttyS1"
    echo 388 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio388/direction
    echo 1 >/sys/class/gpio/gpio388/value

    /usr/bin/timeout 20s /usr/bin/brcm_patchram_plus \
                --patchram /lib/firmware/brcm/bcm4335tx6.hcd \
                --bd_addr $MAC_OPTIONS \
                --use_baudrate_for_download --no2bytes \
                --enable_lpm /dev/$PORT 2>&1

    hciattach /dev/$PORT any
    hciconfig hci1 up

追記1

coreelecから抜き出したFWで、bcm4335a0.hcdがもっともあっていることがわかりました。しかし次のエラーありデバイスに接続できません。

rfkill list; dmesg | egrep -i 'blue|firm'
0: hci0: Bluetooth
	Soft blocked: no
	Hard blocked: no
1: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no
2: hci1: Bluetooth
	Soft blocked: no
	Hard blocked: no
[   15.487845] Bluetooth: Core ver 2.22
[   15.487909] Bluetooth: HCI device and connection manager initialized
[   15.487925] Bluetooth: HCI socket layer initialized
[   15.487930] Bluetooth: L2CAP socket layer initialized
[   15.487941] Bluetooth: SCO socket layer initialized
[   17.686355] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4335/1 wl0: Mar 24 2013 20:36:01 version 6.30.171.24.20 (B0 Station/P2P)
[   21.462530] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   21.462537] Bluetooth: BNEP filters: protocol multicast
[   21.462551] Bluetooth: BNEP socket layer initialized
[   76.064894] Bluetooth: HCI UART driver ver 2.3
[   76.064903] Bluetooth: HCI UART protocol H4 registered
[   76.064905] Bluetooth: HCI UART protocol BCSP registered
[   76.064947] Bluetooth: HCI UART protocol LL registered
[   76.064950] Bluetooth: HCI UART protocol ATH3K registered
[   76.064976] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   76.065120] Bluetooth: HCI UART protocol Intel registered
[   76.065212] Bluetooth: HCI UART protocol Broadcom registered
[   76.065234] Bluetooth: HCI UART protocol QCA registered
[   76.065236] Bluetooth: HCI UART protocol AG6XX registered
[   76.065259] Bluetooth: HCI UART protocol Marvell registered
[   76.209240] Bluetooth: RFCOMM TTY layer initialized
[   76.209260] Bluetooth: RFCOMM socket layer initialized
[   76.209291] Bluetooth: RFCOMM ver 1.11
[   93.029258] Bluetooth: hci1: command 0x2005 tx timeout
[   95.045472] Bluetooth: hci1: command 0x200b tx timeout
[   97.061617] Bluetooth: hci1: command 0x200c tx timeout
[  240.032111] Bluetooth: hci1: command 0x2005 tx timeout
[  242.048336] Bluetooth: hci1: command 0x200b tx timeout
[  244.063908] Bluetooth: hci1: command 0x200c tx timeout
[  916.024770] Bluetooth: hci1: command 0x2005 tx timeout
[  918.040719] Bluetooth: hci1: command 0x200b tx timeout
[  920.056682] Bluetooth: hci1: command 0x200c tx timeout

調べてみるとカーネルの問題のようでパッチがでるのを待つしかないようです。

追記2

じつは諦めきれずにネットで検索して該当のFWを手当たりしだいにトライ&エラーを繰り返してやはり現状のFWが一番良いという結論に至りました。Coreelecでbcm4335a0.hcdのほかにbcm4335_V0343.0353.hcdというのがあり、こちらのほうが良さそうなので使ってみることにしました。さらに、起動スクリプトを見直してみました。

/etc/init.d/ap6255-bluetooth
    
    MAC_OPTIONS="11:22:33:44:55:66"
    PORT="ttyS1"
    echo 388 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio388/direction
    echo 1 >/sys/class/gpio/gpio388/value

    /usr/bin/timeout 20s /usr/bin/brcm_patchram_plus \
                --patchram /lib/firmware/brcm/bcm4335tx6.hcd \
                --bd_addr $MAC_OPTIONS \
                --use_baudrate_for_download --no2bytes \
                 /dev/$PORT 2>&1

    hciattach /dev/$PORT any
    hciconfig hci1 up

これでリブートしてBTを有効にしたらなんと接続ができました。

追記3

ブート時にBTを有効にするにはsystemdを使います。

/etc/systemd/system/brcmfmac_sdio-firmware.service
[Unit]
Description=Broadcom sdio firmware update
After=network.target

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/etc/init.d/ap6255-bluetooth start

[Install]
WantedBy=multi-user.target

起動スクリプトを有効にします。

systemctl enable brcmfmac_sdio-firmware.service

TV-box: wi-fiを使えるようにしてみる

demsgのログをみるとブロードコムのチップを使っているらしいことはわかるのですが、どうもファームウェアがないようで動きません。そこで近い品番のものを利用してみました。

cd /lib/firmware/brcm/
ln -s brcmfmac43362-sdio.lemaker,bananapro.txt brcmfmac4335-sdio.txt

5GとBTは使えませんが2.4GのWi-Fiは使えるようになりました。もう少し調べてみます。

iw phy0 info
...
	Supported Ciphers:
		* WEP40 (00-0f-ac:1)
		* WEP104 (00-0f-ac:5)
		* TKIP (00-0f-ac:2)
		* CCMP-128 (00-0f-ac:4)
	Available Antennas: TX 0 RX 0
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * P2P-client
		 * P2P-GO
		 * P2P-device
	Band 1:
		Capabilities: 0x1022
			HT20/HT40
			Static SM Power Save
			RX HT20 SGI
			No RX STBC
			Max AMSDU length: 3839 bytes
			DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: 16 usec (0x07)
		HT TX/RX MCS rate indexes supported: 0-23
...

HT20/HT40とあるのでieee802.11nなので150Mbpsまで行けそうです。

追記

coreelecのフォーラムで同じIT6335チップを使っているTVboxがあるのを思い出してcoreelecのイメージから該当するものを抜き出して使ってみました。これによって2.4G/5Gが使えるようになりました。

ln -s nvram_bcm4335.txt brcmfmac4335-sdio.txt
ln -s nvram_bcm4335.txt brcmfmac4335-sdio.oranth,tanix-tx6.txt
iw phy0 info
Wiphy phy0
	max # scan SSIDs: 10
	max scan IEs length: 2048 bytes
	max # sched scan SSIDs: 16
	max # match sets: 16
	max # scan plans: 1
	max scan plan interval: 508
	max scan plan iterations: 0
	Retry short limit: 7
	Retry long limit: 4
	Coverage class: 0 (up to 0m)
	Device supports roaming.
	Device supports T-DLS.
	Supported Ciphers:
		* WEP40 (00-0f-ac:1)
		* WEP104 (00-0f-ac:5)
		* TKIP (00-0f-ac:2)
		* CCMP-128 (00-0f-ac:4)
	Available Antennas: TX 0 RX 0
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * P2P-client
		 * P2P-GO
		 * P2P-device
	Band 1:
		Capabilities: 0x1022
			HT20/HT40
			Static SM Power Save
			RX HT20 SGI
			No RX STBC
			Max AMSDU length: 3839 bytes
			DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: 16 usec (0x07)
		HT TX/RX MCS rate indexes supported: 0-7
		Bitrates (non-HT):
			* 1.0 Mbps
			* 2.0 Mbps (short preamble supported)
			* 5.5 Mbps (short preamble supported)
			* 11.0 Mbps (short preamble supported)
			* 6.0 Mbps
			* 9.0 Mbps
			* 12.0 Mbps
			* 18.0 Mbps
			* 24.0 Mbps
			* 36.0 Mbps
			* 48.0 Mbps
			* 54.0 Mbps
		Frequencies:
			* 2412 MHz [1] (20.0 dBm)
			* 2417 MHz [2] (20.0 dBm)
			* 2422 MHz [3] (20.0 dBm)
			* 2427 MHz [4] (20.0 dBm)
			* 2432 MHz [5] (20.0 dBm)
			* 2437 MHz [6] (20.0 dBm)
			* 2442 MHz [7] (20.0 dBm)
			* 2447 MHz [8] (20.0 dBm)
			* 2452 MHz [9] (20.0 dBm)
			* 2457 MHz [10] (20.0 dBm)
			* 2462 MHz [11] (20.0 dBm)
			* 2467 MHz [12] (20.0 dBm)
			* 2472 MHz [13] (20.0 dBm)
			* 2484 MHz [14] (disabled)
	Band 2:
		Capabilities: 0x1062
			HT20/HT40
			Static SM Power Save
			RX HT20 SGI
			RX HT40 SGI
			No RX STBC
			Max AMSDU length: 3839 bytes
			DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: 16 usec (0x07)
		HT TX/RX MCS rate indexes supported: 0-7
		VHT Capabilities (0x00001820):
			Max MPDU length: 3895
			Supported Channel Width: neither 160 nor 80+80
			short GI (80 MHz)
			SU Beamformer
			SU Beamformee
		VHT RX MCS set:
			1 streams: MCS 0-9
			2 streams: not supported
			3 streams: not supported
			4 streams: not supported
			5 streams: not supported
			6 streams: not supported
			7 streams: not supported
			8 streams: not supported
		VHT RX highest supported: 0 Mbps
		VHT TX MCS set:
			1 streams: MCS 0-9
			2 streams: not supported
			3 streams: not supported
			4 streams: not supported
			5 streams: not supported
			6 streams: not supported
			7 streams: not supported
			8 streams: not supported
		VHT TX highest supported: 0 Mbps
		Bitrates (non-HT):
			* 6.0 Mbps
			* 9.0 Mbps
			* 12.0 Mbps
			* 18.0 Mbps
			* 24.0 Mbps
			* 36.0 Mbps
			* 48.0 Mbps
			* 54.0 Mbps
		Frequencies:
			* 5170 MHz [34] (disabled)
			* 5180 MHz [36] (20.0 dBm)
			* 5190 MHz [38] (20.0 dBm)
			* 5200 MHz [40] (20.0 dBm)
			* 5210 MHz [42] (20.0 dBm)
			* 5220 MHz [44] (20.0 dBm)
			* 5230 MHz [46] (20.0 dBm)
			* 5240 MHz [48] (20.0 dBm)
			* 5260 MHz [52] (20.0 dBm) (radar detection)
			* 5280 MHz [56] (20.0 dBm) (radar detection)
			* 5300 MHz [60] (20.0 dBm) (radar detection)
			* 5320 MHz [64] (20.0 dBm) (radar detection)
			* 5500 MHz [100] (20.0 dBm) (radar detection)
			* 5520 MHz [104] (20.0 dBm) (radar detection)
			* 5540 MHz [108] (20.0 dBm) (radar detection)
			* 5560 MHz [112] (20.0 dBm) (radar detection)
			* 5580 MHz [116] (20.0 dBm) (radar detection)
			* 5600 MHz [120] (20.0 dBm) (radar detection)
			* 5620 MHz [124] (20.0 dBm) (radar detection)
			* 5640 MHz [128] (20.0 dBm) (radar detection)
			* 5660 MHz [132] (20.0 dBm) (radar detection)
			* 5680 MHz [136] (20.0 dBm) (radar detection)
			* 5700 MHz [140] (20.0 dBm) (radar detection)
			* 5720 MHz [144] (disabled)
			* 5745 MHz [149] (disabled)
			* 5765 MHz [153] (disabled)
			* 5785 MHz [157] (disabled)
			* 5805 MHz [161] (disabled)
			* 5825 MHz [165] (disabled)
	Supported commands:
		 * new_interface
		 * set_interface
		 * new_key
		 * start_ap
		 * join_ibss
		 * set_pmksa
		 * del_pmksa
		 * flush_pmksa
		 * remain_on_channel
		 * frame
		 * set_wiphy_netns
		 * set_channel
		 * tdls_oper
		 * start_sched_scan
		 * start_p2p_device
		 * connect
		 * disconnect
		 * crit_protocol_start
		 * crit_protocol_stop
		 * update_connect_params
	Supported TX frame types:
		 * managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
		 * AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
		 * P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
		 * P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
		 * P2P-device: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
	Supported RX frame types:
		 * managed: 0x40 0xd0
		 * AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
		 * P2P-client: 0x40 0xd0
		 * P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
		 * P2P-device: 0x40 0xd0
	software interface modes (can always be added):
	valid interface combinations:
		 * #{ managed } <= 1, #{ P2P-device } <= 1, #{ P2P-client, P2P-GO } <= 1,
		   total <= 3, #channels <= 1
		 * #{ managed } <= 1, #{ AP } <= 1, #{ P2P-client } <= 1, #{ P2P-device } <= 1,
		   total <= 4, #channels <= 1
	Device supports scan flush.

150Mbpsはでるので100MbpsのLANより速くなります。

TV-box: Panfrostのインストール

Armbianのカーネルアップデートがあり、バージョンが5.4になりました。これによって今まで使えなかったPanfrostが使えるようになります。

dmesg | grep pan
 [   14.190262] panfrost 1800000.gpu: clock rate = 432000000
 [   14.190280] panfrost 1800000.gpu: bus_clock rate = 100000000
 [   14.190385] panfrost 1800000.gpu: mali-t720 id 0x720 major 0x1 minor 0x1 status 0x0
 [   14.190390] panfrost 1800000.gpu: features: 00000000,10309e40, issues: 00000000,21054400
 [   14.190396] panfrost 1800000.gpu: Features: L2:0x07110206 Shader:0x00000000 Tiler:0x00000809 Mem:0x1 MMU:0x00002821 AS:0xf JS:0x7
 [   14.190399] panfrost 1800000.gpu: shader_present=0x3 l2_present=0x1
 [   14.199852] [drm] Initialized panfrost 1.1.0 20180908 for 1800000.gpu on minor 1

このように今までのようにエラーもなく正しくモジュールがロードできています。当初、DRM、Panfrostライブラリーを/usr/local/libに入れていたのですが、やはり重複があるのでうまく動きません。そこで検索したサイトを参考にそのとおりインストールして、なんとか動くようになったのですが、まだ初期段階のためか今一つの状況です。

sudo apt build-dep mesa libdrm 

 Drm:
   git clone git clone https://gitlab.freedesktop.org/mesa/drm.git --depth=1
   cd drm
   mkdir builddir
   # meson -Dprefix=/usr builddir/
    meson builddir/
   ninja -C builddir/ install

 Mesa:
   git clone git clone https://gitlab.freedesktop.org/mesa/mesa.git --depth=1
   mkdir build
   meson build/ --libdir=lib/aarch64-linux-gnu \
   -Dgallium-drivers=panfrost,kmsro,swrast \
   -Dplatforms=x11,drm,surfaceless -Dvulkan-drivers= \
   -Dlibunwind=false -Ddri-drivers= -Dllvm=true

   ninja -C build/
   sudo ninja -C build/ install

quakeをやってみて動きがぎこちなくまだ使える状況にはありませんが今後を期待したいところです。

追記:

いろいろテストした結果、ユーザースペースのpanfrostドライバは正常に動いていないので旧方式のgl4es + mali blobに戻しました。

/etc/modprobe.d/blacklist.conf

install panfrost /bin/true
#install mali_midgard /bin/true

またカーネルのアップグレードでhdmi音声出力ができなくなりました。USBオーディオを使っているのであまり影響はありませんが。

Alsamixer:
    This sound device does not have any controls.

追記2

いろい調べた結果、コンパイル方法が間違っていました。次のサイトを参考に正確に作り直します。

sudo apt install flex bison python3-mako libwayland-egl-backend-dev \
   libxcb-dri3-dev libxcb-dri2-0-dev libxcb-glx0-dev libx11-xcb-dev  \
   libxcb-present-dev libxcb-sync-dev libxxf86vm-dev libxshmfence-dev \
   libxrandr-dev libwayland-dev libxdamage-dev libxext-dev libxfixes-dev \
   x11proto-dri2-dev x11proto-dri3-dev x11proto-present-dev x11proto-gl-dev \
   x11proto-xf86vidmode-dev libexpat1-dev libudev-dev gettext glmark2 \
   glmark2-es2 mesa-utils xutils-dev libpthread-stubs0-dev ninja-build \
   bc python-pip flex bison cmake git valgrind llvm llvm-8-dev python3-pip \
   pkg-config zlib1g-dev wayland-protocols
wget http://ftp.de.debian.org/debian/pool/main/m/meson/meson_0.52.0-2_all.deb
sudo dpkg -i meson_0.52.0-2_all.deb
git clone git://anongit.freedesktop.org/mesa/drm
cd drm
# meson build --prefix=/usr
meson build
ninja -C build
sudo -E ninja -C build install
cd ..
git clone git://anongit.freedesktop.org/mesa/mesa
cd mesa
#meson -Ddri-drivers= -Dvulkan-drivers= -Dgallium drivers=panfrost,kmsro -Dlibunwind=false -Dprefix=/usr build/
meson -Ddri-drivers= -Dvulkan-drivers= -Dgallium-drivers=panfrost,kmsro -Dlibunwind=false build/
ninja -C build/
sudo ninja -C build/ install

リブートした結果、みごとに立ち上がりませんでした。原因はpanfrostのsunxiドライバーにあるようです。そこで、一旦、そのモジュールだけを外しておきます。

cd /usr/lib/aarch64-linux-gnu/dri/
mv sun4i-drm_dri.so sun4i-drm_dri.so.orig

追記3

DTのGPUの再設定でPanfrostが動作しました。