しまった、やってしまった!
Tinker Board S が 「文鎮化」 してしまいました。 orz…
LibreELECをeMMCにインストールしたら、電源入れても起動しないし、Windows PCに接続しても認識しない。
eMMCにアクセスできなくなり、八方塞がりです。
Tinker Board Sは、重さ100gもないので、文鎮化しても文鎮としては使えません。
こんなとき役に立つのが、Tinker Board Sの2×2ピンヘッダーの「eMMC Recovery」ポジションです。
内容
1. エクスプレスコース
「詳しいことは後にして、とにかく元に戻したい」という方のために、手順をまとめます。
1. 1 必要となる機材
(1) microSDカード (TinkerOSを書き込んでよいもの)
(2) Windows PC (USB2.0有りで、microSDカードアクセス可のもの)
(3) microUSBケーブル (データ通信可能なもの)
(4) Tinker Board S付属のジャンパーピン (なくさないように)
(5) 文鎮化したTinker Board S
1.2 手順
(1)OSイメージをダウンロードする
TinkerOS Debian v2.0.4(もしくはそれ以上)のイメージファイルをダウンロードします。
TinkerOS ダウンロードはこちら:
https://www.asus.com/Single-Board-Computer/Tinker-Board-S/HelpDesk_Download/
イメージファイルは圧縮されているので解凍しておきましょう。
(2)Win32DiskImagerをダウンロード&インストールする
PCにWin32DiskImagerがインストールされていない場合には、下記URLよりダウンロードし、インストールしてください。
https://sourceforge.net/projects/win32diskimager/files/latest/download
(3)microSDにOSイメージを書き込む
microSDカードをWindows PCに挿し、Win32DiskImagerを起動してダウンロードしたTinkerOS Debianイメージを書き込みます。
(4)OSインストールしたmicroSDをTinker Board Sに挿す
Windowsから「安全に取り外す」操作をして、TinkerOS Debianを書き込んだmicroSDカードをPCから抜き、文鎮化したTinker Board Sに挿します。
(5)ジャンパーピンを設定する
文鎮化したTinker Board Sのジャンパーピンを「eMMC Recovery」のポジションに設定します。
(6)Tinker Board SをPCに接続する
Tinker Board SのmicroUSBコネクタにmicroUSBケーブルを挿し、ケーブルのもう一方をWindows PCに挿します。
(7)認識されたeMMCにOSを書き込む
Tinker Board SのeMMCが、Windows PCから認識できているはずです。
Win32DiskImagerを使って、認識したドライブにTinkerOSを書き込んでください。
(8)PCからTinker Board Sを外す
書き込み終わったら、Windowsから「安全に取り外す」操作をして、Tinker Board SのmicroUSBコネクタを外します。
(9)microSDカードを抜きジャンパーピンを戻す
microSDカードをTinker Board Sから抜き、ジャンパーピンを元の位置に戻しましょう。
(10)Tinker Board Sを起動する
Tinker Board Sに、キーボード、マウス、ディスプレイ、microUSB電源をつなぎ、スイッチを入れれば、無事、TinkerOSが立ち上がります。
2. アドバンストコース
文鎮化したTinker Board Sが手に入ったので、色々試してみましょう。
2.1 なぜ文鎮化するか?
はじめてTinker Board SをPCに接続したときには、eMMCは次のように見えていました。
すでに64Mと2Gのパーティションが切られています。
そして、ここでは良く見えませんが、64Mのパーティションの前に、わずかな未割り当ての領域があります。
この領域には、ブートローダのプログラムが存在しています。
Tinker Board Sのブートローダの役割は、
(1) 本来のブートローダの動作
RAMの初期化などLinuxカーネルを実行するための設定を行い、eMMCもしくはmicroSDからカーネルを読み込んでRAM上の特定の場所にコピーし、カーネルを起動する
(2) OS書き込みモードの実現
PCにつながっていることを検知した場合、eMMCをドライブとしてPCに見せる動作を行う
です。
このため、64Mのパーティションの前にあるわずかな未割り当て領域のデータに上書きしてブートローダが起動できなくなると、OSもブートできなくなり、PCからも見えなくなってしまいます(文鎮化)。
また、Tinker Board Sが登場する前は、eMMCがなかったため、ブートローダの役割は、
(1)本来のブートローダの動作
RAMの初期化などLinuxカーネルを実行するための設定を行い、eMMCもしくはmicroSDからカーネルを読み込んでRAM上の特定の場所にコピーし、カーネルを起動する
(2)OS書き込みモードの実現
PCにつながっていることを検知した場合、eMMCをドライブとしてPCに見せる動作を行う
でした。取り消し線の箇所の機能は入っていないのです。
Tinker Board Sに対応できていないOSをTinker Board SのeMMCにインストールしてしまうと、このブートローダが起動するため、eMMCにあるOSはブートできず、PCからドライブとして見ることもできません(文鎮化)。
冒頭で失敗したLibreELECも、microSDカードにインストールすれば動きますので、おそらくブートローダがTinker Board Sに対応していなかったので文鎮化してしまったのでしょう。
Tinker Board Sは、2018年に入ってリリースされたので、有志が作成されたOSには、まだ未対応のリスクが伴います。
極力、ASUSのサイトから提供されるTinker Board Sに対応したTinkerOSのバージョンを使うのが無難です。
また、各種OSのTInker Board Sへの対応状況 (eMMC起動可否情報) は、試した範囲で随時、別ページにまとめていく予定です。
2.2 「eMMC Recovery」とは?
Tinker Board S は、通常、eMMCにインストールされているブートローダやOSを「優先」(eMMCを優先)して起動します。
ジャンパーを「eMMC Recovery」の位置に設定すると、microSDにインストールされているブートローダやOS「のみ」(microSDのみ)を起動するようになります。
試しに、eMMCに起動可能なTinkerOSがインストールされている状態で、microSDカード未挿入もしくはブランクのmicroSDを挿入してみたところ、待ち続けてもeMMCから起動することはありませんでした。
これは、「eMMC Recovery」が、起動デバイスをmicroSDのみに固定する設定ポジションのためです。
2.3 「eMMC Revovery」にしないでOS入りmicroSDを挿すとどうなる?
ブートローダ、OSとも、eMMC、microSDの順にチェックして起動するのですが、OSの種類の組み合わせなど条件が絡み合って、少々複雑です。
Tinker Board Sの起動の流れは、次の通りです。
(1)電源投入後、ジャンパーをチェックする
(1-a)「eMMC Recovery」が設定されている場合、microSDのブートローダをチェックする
(1-a-a)microSDに有効なブートローダがあるなら、それを実行する
(1-a-b)microSDに有効なブートローダがないなら、ブート失敗(停止)
(1-b)「eMMC Recovery」が設定されていない場合、eMMC、microSDの順にブートローダをチェックする
(1-b-a)まず、eMMCに有効なブートローダがあるなら、それを実行する
(1-b-b)eMMCに有効なブートローダがない場合には、次にmicroSDのブートローダをチェックする
(1-b-b-a)microSDに有効なブートローダがあるなら、それを実行する
(1-b-b-b)microSDにも有効なブートローダがないなら、ブート失敗(停止)
(2)ブートローダ実行後、再度ジャンパーをチェックする
(2-a)「eMMC Recovery」が設定されている場合、microSDのOSを起動する
(2-b)「eMMC Recovery」が設定されていない場合、eMMC、microSDの順にOSをチェックする
(2-b-a)まず、eMMCにOSがあるなら、それを起動する
(2-b-b)eMMCにOSがない場合には、次にmicroSDのOSをチェックする
(2-b-b-a)microSDにOSがあるなら、それを起動する
(2-b-b-b)microSDにもOSがないなら、OS起動失敗(停止)
例えば、Tinker Board Sに対応していない古いTinkerOS DebianをeMMCにインストールした場合、そのままでは起動しませんが、TinkerOS Debian v2.0.4をインストールしたmicroSDを挿すと、ジャンパを「eMMC Recovery」に設定しなくともmicroSDのブートローダを使って起動し始めます。ただし、OSは、eMMCにある古いバージョンのOSを起動してしまい、Kernel Panicで停止しました。
そこで、ジャンパを「eMMC Recovery」に設定すると、ブートローダもOSもTinker Board S対応バージョンとなるため、正常に起動します。
2.4 PCを使わずに文鎮化したTinker Board Sを復旧することはできるか?
PCを使わずにイメージファイルをeMMCに書き込みたい場合には、TinkerOS Debian v2.0.4以上をインストールしたmicroSDカードから起動し、
イメージファイルをコピーしたUSBメモリをTinker Board Sに挿して、
sudo dd if=フルパスのイメージファイル名 of=/dev/mmcblk1
とします。
この方法で、TinkerOS Debian v2.0.4のイメージをeMMCに書き込む時間を実測したところ、USBメモリにもよりますが、3分30秒かかりました。
もし、3分も待てないので ブートローダだけを戻したい、という場合は、
sudo dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=1M count=4
として、TinkerOS Debianの microSDカード(mmcblk0)の先頭の4Mbyteを、eMMC(mmcblk1)の先頭に書き戻してやれば、元通りPCから認識できるようにはなります。
ただし、この後、OSをインストールするためにPCに接続するのだとしたら、それは前出のリカバリの手順とほぼ変わりないので、ブートローダだけを戻した手順が無駄になります。
2.5 eMMCにフォーマットを行ったらどうなるか?
OSが起動しなくなったTinker Board S(PCから認識はできる状態) あるいは OSが起動できる状態のTinker Board S のeMMCを、とりあえず、まっさらの状態にしようと、PCからフォーマットをかけると、文鎮化してしまうでしょうか?
windowsのフォーマットは、パーティションとして割り当てられた領域に対してのみ行われるので、ブートローダが書き込まれている領域は、ただの空き領域でパーティションにはなっていないので、文鎮化の恐れはありません。
しかし、SDFormatterなどを使って、パーティション設定をクリアしてディスク全体をまっさらにフォーマットすると、ブートローダ領域も壊されてしまう可能性があります。
いずれにしても、フォーマットをした後でOSをインストールするのなら、OSイメージを書き込むときにフォーマットした情報は上書きされてしまうので、eMMCをフォーマットする必要性はあまりないと思います。
フォーマットが必要なケースとしては、eMMCをデータ領域として使おうとするなど、特別なケースに限られると思います。
3. マルチブートは可能か?
3.1 eMMCとmicroSDとのマルチブート
「eMMC Recovery」のジャンパ設定は、起動デバイスをmicroSDのみに固定する設定ポジションです。
eMMCのOSを起動したい場合には、ジャンパ設定を「default」のポジションにし、microSDのOSを起動したい場合には、「eMMC Recovery」のポジションにすることで、ブートを切り替えることが出来ます。
3.2 eMMC内のマルチブート?
eMMC内のパーティションを切って、ブートメニューでOSを選択して起動できると便利です。
/boot/extlinuxにあるextlinux.confをカスタマイズするとできるかもしれません。
今後取組みたい課題です。