【コラム】

塩田紳二のアンドロイドなう

43 ブートローダーとfastboot

43/137

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はロックされていますが、ユーザーがこれをアンロックすることが可能です。

Galaxy 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」というプログラムがインストールされること多いようです。

PCとUSB接続してUSBデバッグを有効にした場合「Android ADB Interface」ドライバが組み込まれる

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領域へ書き込むことでカスタムリカバリをインストールできるからです。

Fastbootモードに入ったBootloader。ボリュームキーと電源ボタンで操作する

fastbootモードの場合、Android Bootloader Interfaceドライバとなる

fastbootモードからはリカバリーモードに入ることもできる

リカバリー(モード)

リカバリーとは、アンドロイドに組み込まれているシステムで、一般的には、アンドロイド自体とは別のパーティションにインストールされていて、主にフラッシュメモリの復元やデータ領域の消去などを行います。

アンドロイドには、大きくboot、recovery、systemの3つのパーティションがあり、イメージファイルはそれぞれで別になっていてます。これはシステムを書き換える間は、通常のアンドロイドを起動できないのでrecovery領域にあるシステムを起動して、これが書き換えなどを行うようにするためです。また、boot領域を別にしているのは、リカバリーやシステム領域が壊れても最低限の起動動作ができるようにするためです。

なお、bootloaderをアンロックしたとき、リカバリー領域にも電子署名などのないカスタムのプログラムを書き込むことが可能になります。これを「カスタムリカバリー」と呼びます。カスタムリカバリーには、通常のリカバリーにはない、パーティションのバックアップなどの処理が行えるなどの機能があります。また、カスタムリカバリーは、root取得の作業を容易にできます。リカバリが起動しているときにシステム領域を書き換えることが可能だからです。

リカバリーを起動する方法はハードウェアによって違っています。メーカーによっては、特殊な方法を使わないとリカバリーを起動できないようになっています。スマートフォンやタブレットは、一般消費者向けであり、こうした機能は、メーカーが修理などで行うためのものとして一般に開放していないこともあります。

リカバリーモードは、bootloaderにコマンド受付状態がある場合、そこから起動できるようになっています。また、前述のadbコマンドからも起動が可能です。

カスタムリカバリの1つTWRP(Team Win Recovery Project)。recovery領域に書き込まれ、標準のリカバリーにはないさまざまな機能を持つ

本稿は、2013年9月6日にAndorid情報のWeb専門誌「AndroWire」に掲載した記事を再構成したものです。

43/137

インデックス

連載目次
第137回 「Android 8.0 Oreo」を試す その2
第136回 「Android 8.0 Oreo」を試す その1
第135回 「Android Wear 2.0」を探る その2
第134回 「Android Wear 2.0」を探る その1
第133回 「Android O」プレビュー
第132回 Androidのコードネームとビルド番号再び
第131回 Android Wear 2.0が出る前にちょっと復習
第130回 「Android 7.1」の新機能を見てみる その2
第129回 「Android 7.1」の新機能を見てみる その1
第128回 モトローラ「Moto Z」を試す その3
第127回 モトローラ「Moto Z」を試す その2
第126回 モトローラ「Moto Z」を試す
第125回 大陸でウワサのスマホ、ソフトウェア編
第124回 大陸でウワサのスマホ、デュアルSIM編
第123回 大陸でウワサのスマホを買ってみた
第122回 Androidでコルタナを使う
第121回 Android N、「通知」の表示形式が変更に
第120回 「Android N」の新プレビュー版、Developer Preview 4が登場
第119回 「Android N」プレビュー その3
第118回 「Android N」プレビュー その2、Nの改良点
第117回 「Android N」プレビュー その1
第116回 「ZenWatch 2」の充電動作を調べて見た
第115回 Android Wearのバッテリ関連機能を検証してみる
第114回 Android Wearを再評価してみる
第113回 Nexus 7をカーナビにしてみた(その3)
第112回 Nexus 7をカーナビにしてみた(その2)
第111回 Nexus 7をカーナビにしてみた(その1)
第110回 画面キャプチャに便利なシステムUI調整ツール
第109回 2016年の注目はタブレット
第108回 「Nexus 5X」と「USB Type-C」
第107回 「Nexus 5X」と「LTE」
第106回 Android 6.0 ストアとアプリ
第105回 Nexus 5XでみるAndroid 6.0 Marshmallow
第104回 「Nexus 5X」を買いました
第103回 「Android Mのプレビュー3」を試す(前編)
第102回 Android M プレビュー2 (準備編)
第101回 「LG G Watch」のその後
第100回 「Zenefone 2」買いました
第99回 ちいさくてかわいい「LG L20」、イギリスで買ってみました
第98回 「Google日本語入力」アップデートで何が変わった?
第97回 どのアプリで開く? 「インテント」の仕組み
第96回 「OneNote」をつかってみた
第95回 ロリポップのマテリアルデザインをまとめてみる
第94回 「Email Markup」って何?
第93回 Outlookは来たけれど
第92回 Office Previewつかってみた
第91回 Google INBOXを使ってみる
第90回 AndroidWareの文字盤を自作する
第89回 Android Ware Lollipop版
第88回 「Nexus Player」を試す - ソフトウェア編
第87回 「Nexus Player」を試す - ハードウェア編
第86回 「Nexus 9」ファーストインプレッション - ソフトウェア(Lollipop)編
第85回 「Nexus 9」ファーストインプレッション - ハードウェア編
第84回 充電しながらUSBデバイスが使えるホストケーブル
第83回 Android "L"プレビューとAndroidWareがアップデート
第82回 ちょっとイケてる「Kyocera Hydro Vibe」
第81回 Android "L" バッテリ消費を監視する
第80回 アクセスポイントの基本を知る
第79回 OneDriveとGoogleドライブ
第78回 シェルのネットワーク関連コマンド
第77回 "L"の中身
第76回 アンドロイドウェア(Android Wear)は暫定バージョン?
第75回 LGのスマートウォッチ「G Watch」
第74回 "L"がくる
第73回 次は「Lollipop」か? その前にKitKatが4.4.3に
第72回 VPNを使う その3 「VPNをアンドロイドから使う」
第71回 「Chromecast」とは?
第70回 VPNを使う その2 「VPNサーバーを立てる」
第69回 VPNを使う その1 「基礎編」
第68回 アンドロイドのストレージ
第67回 「NVIDA SHIELD」のソフトウェア
第66回 「NVIDA SHIELD」のハードウェア
第65回 HDMIとMHL、SlimPort - ディスプレイ接続端子を整理してみる
第64回 「LG L1 II」を買ってみた
第63回 アンドロイドに音楽を「聞かせる」
第62回 住所録の秘密
第61回 Outlook.comをカレンダーに表示する
第60回 ソースコードはどこにある?
第59回 AndroidのBluetoothテザリングとWindows 8.1
第58回 NFCでマニュアル参照を簡単に
第57回 あらためて「ポータブルアクセスポイント」をきちんと試してみる
第56回 「ビルド番号」ってなに?
第55回 画面キャプチャをバッチファイルで実行
第54回 adbコマンドをちょっと解説
第53回 「android 4.4 "Kit Kat"」で画面を録画する
第52回 「android 4.4 "Kit Kat"」の内部的な変更点
第51回 「android 4.4 "Kit Kat"」を解説
第50回 「Nexus 5」を買ってみた
第49回 Google Keepはリマインダーだった
第48回 android 4.2からサポートされた「ワイヤレスディスプレイ」
第47回 画面キャプチャー
第46回 ヘッドセットの秘密
第45回 Nexus 7のLTEモデル
第44回 Nexus 4買いました。アメリカで。
第43回 ブートローダーとfastboot
第42回 Jelly Beans 4.3 Returns
第41回 Chromecast、テレビに刺さる
第40回 デバイスマネージャでAndroidの位置を確認
第39回 新しいNexus 7を買ってみた
第38回 Jelly Beans 4.3
第37回 レノボ「K900」を国際版化
第36回 NFCで遊ぶ
第35回 自宅で簡単ファイル転送
第34回 レノボ「K900」のカスタマイズされたJelly Beansを見てみる
第33回 CloverTrail+のスマートフォン、レノボ「K900」を買ってみた
第32回 AndroidがBluetooth 4.0を正式サポート
第31回 ARMの次世代CPU「Cortex-A12」
第30回 SDKをインストールしよう
第29回 ウィジェットを活用
第28回 QRコードでお手軽設定
第27回 XPERIA Tipoとロンドンアンロック屋事情
第26回 diNovoキーボードを使う
第25回 キーボードをカスタマイズする
第24回 Androidキーボードのしくみ
第23回 2段階認証を使おう
第22回 いらないプリインストールアプリを削除
第21回 64bitなんて必要なのかしら?
第20回 アメリカでアンドロイドの読書端末を買ってみた
第19回 Android 4.2の新機能
第18回 Android Beamって何だ?
第17回 NFCで何ができる?
第16回 Nexus 7をアメリカで買ってみた
第15回 AndroidをPCにつなぐと
第14回 Androidの記憶領域
第13回 Google Nowを使ってみる
第12回 AndroidのUSBホスト機能
第11回 デュアルSIMを使ってみる
第10回 キーボード一体縦型Androidマシン
第9回 Androidの言語設定
第8回 アンドロイドに道を聞く
第7回 Google Playはどうやってアプリの公開を制御しているのか?
第6回 「Acer A100」がICSになった
第5回 つながっているのはACアダプタ、それともUSB端子
第4回 スマートフォンを普通の電話としてつかってみた
第3回 Androidからの通知を表示可能な腕時計
第2回 アームを誤解してませんか?
第1回 MWCで見たAndroid

もっと見る

人気記事

一覧

新着記事