rootの取得など、アンドロイドの高度な利用で出てくる用語に「Bootloader」、「リカバリー(Recovery)」、「fastboot」というものがあります。また、「adb」という単語もあります。多くのサイトでは、何の説明もなしにつかわれていてなれないと面食らうこともあるでしょう。そういうわけで今回は、この3つの用語について解説することにしましょう。
Bootloaderとは?
Bootloader(あるいはBoot Loader)とは、アンドロイドデバイスで、システムを立ち上げるときに使われるプログラムの名称です。PCでいえばBIOSに相当する部分で、このBootloaderがフラッシュメモリ上に作られたシステムイメージを読み込んでLinuxカーネルを起動します。
通常、このBootloaderは、起動時のメーカーロゴなどを表示している間に動き、Linuxカーネルを読み込んで起動します。カーネルは、その後アンドロイドの環境を立ち上げていきます。
ARM系のデバイスでは、一般的にメモリ空間の先頭0番地にエクセプションベクターテーブルが置かれ、その先頭の4バイトを読み込んで、それをプログラムの実行開始位置としてプログラムの実行を開始します。このときに起動するのがBootloaderです。
Bootloaderは、CPUやI/Oを初期化するなどカーネルの起動に必要な環境を整備し、RAMにカーネルを読み込んでいきます。
このため、一般的にはBootloaderの画面を見るということはないのですが、特別な方法を使うとBootloaderを、カーネルの読み込み前に止め、内蔵しているユーザーインタフェースを表示させることができます。多くの場合、ここから、後述するfastbootコマンドが利用できます。
このbootloaderのプログラムは、ハードウェアメーカーが作る「ファームウェア」と呼ばれるものになり、どのように作るのかはメーカー次第になります。ただし、アンドロイドでは起動の手順やbootloaderが対応すべき機能などがルールとしてあるため、多くのメーカーのbootloaderはこれに従ったものになります。
また、Bootloaderは、状態を検出してシステムのアップデートを行う場合もあります。機種によって違いますが、SDカードのルートフォルダに特定の名前のファイルを置くと、これを認識してフラッシュメモリの書き換えなどを行うことができるようになっています。 ただし、どんなファイルでも対象になるわけではありません。一般にスマートフォンなどでは、メーカーが提供する電子署名などが行われたアップデート用ファイルだけを受け付けます。このような状態を「ロック」されているといいます。
ところが、メーカーによっては、このロックを解除できるようにしてあるところがあります。そのための操作を「Bootloaderアンロック」といいます。ただし、メーカーによっては、別の方法でシステムを保護しており、Bootloaderはロックされていない場合もあります。このあたりBootloaderがメーカー独自のものなので、メーカーにより考えが違うようです。
Googleが販売するNexus系のデバイスでは、出荷時にBootloaderはロックされていますが、ユーザーがこれをアンロックすることが可能です。
adb
adbは、「android debug bridge」の略で、アンドロイド機をPCなどとUSBで接続して実機でアプリケーションなどのデバッグを行うためのプログラムの名前です。これは、android SDKに含まれており、そのインストールで利用できるようになります。いわゆる「シェル」を起動するのもadbコマンドを使い、
adb shell
というコマンドを実行させます。PCの場合には、コマンドプロンプトから利用します。
adbを利用するためには、アンドロイド側でUSBデバッグを有効にしておき、PC側では、adb用のデバイスドライバを組み込む必要があります。このadbドライバもandroid SDKに含まれていますが、まれにメーカーのサイトからダウンロードしなければならない場合もあります。
前述のadb shellを使ってさまざまな作業を行いますが、このとき、管理者権限が必要なコマンドや処理対象があり、こうした作業を行うためには、root(Unix系のオペレーティングシステムで管理者を表すユーザー名)権限が必要とされます。通常状態のアンドロイドでは、rootとして作業することはできません。これを可能にするのが俗に「root化」や「root権限取得」と呼ばれる方法です。なお、adb shellでroot権限を取得可能なシステムに入ると「su」(super userの略)コマンドが利用でき、これを使えば誰でもroot権限でコマンドを実行することができるようになります。
root化は、システムのバグなどを使って、root権限を取得したうえ、suなどのコマンドが含まれるlinuxの管理コマンドなどをインストールします。このとき、ストレージ容量を削減するため、1つのバイナリプログラムにさまざまなコマンドを詰め込んだ「busybox」というプログラムがインストールされること多いようです。
fastboot(モード)
fastbootは、Android SDKに含まれるコマンドの名前であり、このコマンドを使ってPCとアンドロイドが通信するプロトコルの名称でもあります。また、Bootloaderがfastbootコマンドを受け付けるような状態になることをfastbootモードといいます。
fastbootコマンドは、PCとアンドロイドをUSBケーブルで接続して、PC側で実行されるコマンドで、おもにフラッシュメモリへの書き込みや、フラッシュメモリ上に作られたパーティションの管理などを行うためのコマンドです。
なお、fastbootモードで接続する場合、専用のデバイスドライバが必要になります。これは、USBデバッグモードの場合とは別のドライバでbootloaderドライバやfastbootドライバなどと呼ばれます。
前述のadbが動作していれば、fastbootモードへは「adb reboot fastboot」で入ることができるようになります。また、機種によっては、複数のキー(ボタン)を押さえながら電源オンを行うことでfastbootモード(あるいはコマンド受付状態)に入ることができます。
GoogleのNexusシリーズ、たとえばGalaxy Nexusでは、ボリュームキーのアップとダウンを同時に押さえながら、電源をオンにすることで、fastbootモードに入り、ここからシステムの起動やリカバリー(後述)の立ち上げが可能になっています。
fastbootコマンドの役割は、フラッシュメモリに関連する作業を単一のコマンドで行えるようにすることです。また、fastbootコマンドは、カスタムリカバリーの書き込みにも利用されます。カスタムリカバリーの入ったイメージファイルをfastbootコマンドでrecovery領域へ書き込むことでカスタムリカバリをインストールできるからです。
リカバリー(モード)
リカバリーとは、アンドロイドに組み込まれているシステムで、一般的には、アンドロイド自体とは別のパーティションにインストールされていて、主にフラッシュメモリの復元やデータ領域の消去などを行います。
アンドロイドには、大きくboot、recovery、systemの3つのパーティションがあり、イメージファイルはそれぞれで別になっていてます。これはシステムを書き換える間は、通常のアンドロイドを起動できないのでrecovery領域にあるシステムを起動して、これが書き換えなどを行うようにするためです。また、boot領域を別にしているのは、リカバリーやシステム領域が壊れても最低限の起動動作ができるようにするためです。
なお、bootloaderをアンロックしたとき、リカバリー領域にも電子署名などのないカスタムのプログラムを書き込むことが可能になります。これを「カスタムリカバリー」と呼びます。カスタムリカバリーには、通常のリカバリーにはない、パーティションのバックアップなどの処理が行えるなどの機能があります。また、カスタムリカバリーは、root取得の作業を容易にできます。リカバリが起動しているときにシステム領域を書き換えることが可能だからです。
リカバリーを起動する方法はハードウェアによって違っています。メーカーによっては、特殊な方法を使わないとリカバリーを起動できないようになっています。スマートフォンやタブレットは、一般消費者向けであり、こうした機能は、メーカーが修理などで行うためのものとして一般に開放していないこともあります。
リカバリーモードは、bootloaderにコマンド受付状態がある場合、そこから起動できるようになっています。また、前述のadbコマンドからも起動が可能です。