Tinker Board SのeMMCのリカバリ方法


しまった、やってしまった!
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」のポジションに設定します。

TinkerBoardS-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から抜き、ジャンパーピンを元の位置に戻しましょう。

TinkerBoardS-normal

(10)Tinker Board Sを起動する

Tinker Board Sに、キーボード、マウス、ディスプレイ、microUSB電源をつなぎ、スイッチを入れれば、無事、TinkerOSが立ち上がります。

 

 

2. アドバンストコース

文鎮化したTinker Board Sが手に入ったので、色々試してみましょう。

 

2.1 なぜ文鎮化するか?

はじめてTinker Board SをPCに接続したときには、eMMCは次のように見えていました。

emmc-partition

すでに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をカスタマイズするとできるかもしれません。

今後取組みたい課題です。

 

 

 

 

 

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です