この機種は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からリリースされずフォークプロジェクトとしてリリースされるということです。