Chrome OS カスタムファームウェア
目次
イントロダクション
カスタムファームウェアを書き込む理由
メリット
- 最新版の SeaBIOS が追加される。
- SeaBIOS が載ってない機種の Chromebook に coreboot の SeaBIOS ペイロードが追加される。
- 起動時間が短縮される。
- デベロッパーモード画面がなくなる。
- VMX が有効になる。
- サスペンドなどの問題が (特別な設定をしなくても) 解決する。
デメリット
- あなたのデバイスが文鎮化する危険性。
- 標準の Chrome OS を起動できない (Arnold the Bat の Chromium OS ビルド をインストールすればスクリプトを使って完全な Chrome OS にアップグレードすることはできます)。
- 問題が発生することがあります [1]。
カスタムファームウェアの書き込み
カスタムファームウェアを書き込む方法は複数あります:
- John Lewis のスクリプトを使う。適当なファームウェアを探す手間が省けます。
- Matt DeVillier の ezScript を使う (今のところ Chromebox だけがサポートされています)。
- 手動で
flashrom
を使う。この場合、自力でファームウェアを入手するか Coreboot のソース (公式 または Chromium OS のフォーク) からファームウェアをコンパイルする必要があります。
ハードウェア書き込み保護の無効化
ファームウェア書き込み保護セクションのハードウェア書き込み保護の無効化を見て下さい。
John Lewis のスクリプトを使って書き込む
スクリプトの説明
John Lewis の getnflash_johnlewis_rom.sh
スクリプトは何をするのか
flashrom
の Chromium OS の32ビット版を自動でダウンロード。- 現在のファームウェアをバックアップ。
# ./flashrom --wp-disable
を実行してソフトウェア書き込み保護を無効化。- dmidecode で Chromebook の製品名を確認して適当なカスタムファームウェアをダウンロード。
- カスタムファームウェアを書き込み。
スクリプトは何をしないのか
- あなたに確認を取りません。
- ハードウェア書き込み保護が無効化されているか確認しません。
- 特定の Chromebook の下位モデルとカスタムファームウェアの互換性を確認しません。
まとめ
- ハードウェア書き込み保護を無効化してください。
- FAQ を読みましょう。
- あなたの機種の Chromebook がサポートされているか確認してください。
- サポートされてなかったら Google+ の coreboot on Chromebook コミュニティ でアドバイスを求めましょう。
Chrome OS でスクリプトを実行
- VT-2 (
Ctrl + Alt + =>
) でコマンドプロンプトにアクセス。 - Lewis のサイトの ROM ダウンロードページ に書かれているコマンドを入力。
- スクリプトが終了したらシステムを再起動する前に外部ストレージにバックアップされたファームウェアをコピー。
以上でデバイスにカスタムファームウェアがインストールされたはずです。うまくいくように願いながら再起動しましょう。
Arch Linux のインストールの一環でファームウェアの書き込みを行ったときは、Arch Linux のインストールを続行してください。カスタムファームウェアでインストールメディアが正しく起動したら、ハードウェア書き込み保護は有効に戻してかまいません。
Arch Linux でスクリプトを実行
- 64ビット環境の Arch Linux では
pacman.conf
で Multilib リポジトリを有効にして lib32-glibc をインストールする必要があります。
# pacman -S lib32-glibc
- dmidecode をインストールしてください。
# pacman -S dmidecode
- Lewis のサイトの ROM ダウンロードページ に書かれているコマンドを入力。
- スクリプトが終了したらシステムを再起動する前に外部ストレージにバックアップされたファームウェアをコピー。
以上でデバイスにカスタムファームウェアがインストールされたはずです。神の再来を願って再起動しましょう。
カスタムファームウェアで Arch Linux が問題なく起動したらハードウェア書き込み保護は有効に戻してかまいません。ただし、John Lewis によればハードウェア書き込み保護をまた有効にするべき必要はなく、後でアップグレードするのが難しくなります [3]。再有効化しなかった場合、flashrom を使用しないように気をつけて下さい。
ezScript を使って書き込む
現在 ezScript は Intel が搭載された Chromebox だけをサポートしています。
カスタムファームウェアをインストールする前に ezScript の公式ページ に記載されている手順をよく読んで下さい。ファームウェアだけをインストールする場合、インストールオプションの #5 を使います (Install/update: custom coreboot Firmware
)。
手動で flashrom を使う
上流の flashrom パッケージの使用は非推奨です。--wp-disable
や --wp-status
などのオペレーションが存在せず、外部的にプログラムの書き込みがされていないと Chromebook の ROM に正しくファームウェアを書き込めないからです (SOIC チップによって SPI を通して他のデバイスで書き込みする必要がある)。そのため ChromiumOS の flashrom
を使用することが推奨されます。
Arch Linux 用の flashrom を入手
- 64ビットの静的リンクされた Chromium OS 版の
flashrom
をダウンロード:
# wget --no-check-certificate https://johnlewis.ie/flashrom # chmod +x flashrom
flashrom
の場所は $PATH
に入っていないので、実行するにはコマンドの前に ./
を付ける必要があることを忘れないで下さい、例: # ./flashrom
。
Chrome OS 用の flashrom を入手
Chrome OS には初めから flashrom
が入っています。
flashrom の基本的な使い方
- ファームウェアチップに書き込む前にソフトウェア書き込み保護を無効化。
# flashrom --wp-disable
- ファームウェアチップからファームウェアをバックアップ。
# flashrom -r old_firmware.bin
- ファームウェアチップにファームウェアを書き込み。
# flashrom -w new_firmware.bin
元のファームウェアを書き込む
ハードウェア書き込み保護を無効化して flashrom を使って手動でファームウェアを書き込む方法を見てオリジナルのファームウェアのバックアップを書き込んで下さい。
Chromebook の文鎮化の復旧
必要なツール
- プログラム書き込み機。Raspberry Pi と Bus Pirate が対応していると flashrom wiki に載っています。
--wp-disable
と--wp-status
フラグをサポートする Chromium OS バージョンのflashrom
が使えるので Bus Pirate の方がベター。 - SOIC クリップが推奨されています。[4] を参照。
- メスのジャンパワイヤ。
- Chromium OS の
flashrom
を使いたい場合は別の Linux マシン (32ビットまたは64ビット) が必要です。
文鎮化から復活する大まかな手順
- ジャンパワイヤをプログラム書き込み機と SOIC クリップに接続。
- SOIC クリップを ROM チップに接続。
- プログラム書き込み機で Linux が動作している場合 (Raspberry Pi)、spi モジュールを modprobe。
- プログラム書き込み機で Linux が動作していない場合、プログラム書き込み機を Linux マシンに接続。
flashrom
でファームウェアを書き込む。--wp-disable
フラグを付けてflashrom
を実行してソフトウェア書き込み保護を無効化する必要があります (Chromium OS のflashrom
が便利な理由)。
文鎮化回復について読むべき文章
- Flashrom の wiki の ISP, Bus Pirate, Raspberry Pi, SOIC8。
- Coreboot の wiki にある Chromebooks のページ。
- C720 を文鎮化から回復させる例: ガイド, 写真。
- HP Chromebox の文鎮化を修復する例: guide。
ファームウェア書き込み保護
ファームウェア (Coreboot とペイロード) は SPI チップ (通常 SOIC8) に保存されており、その記憶領域の一部は書き込み保護されています (ほとんどは Coreboot)。
書き込み保護を無効化するか保護領域を (0,0) に設定しないかぎり、ファームウェアの保護されてない領域に変更を行っても Chrome OS のリカバリメディアで修復することができます。
書き込み保護は二分されます: ハードウェアとソフトウェアです。
ハードウェア書き込み保護
ハードウェア書き込み保護は開閉したときにソフトウェア保護の特殊なレジスタへの書き込みをふせぐ電気回路で、ハードウェア書き込み保護は直接的には特殊なレジスタしか保護していませんが、間接的にはファームウェアチップのデータも保護していることになります。
ハードウェア書き込み保護を無効化するには、ネジを取り外して、スイッチを押すかジャンパをショートさせる必要があります。
ソフトウェア書き込み保護
ソフトウェア書き込み保護はファームウェアチップに保存されているデータが保護されているかどうかを決める特殊なレジスタで、保護データのアドレスの範囲も保持します。
書き込み保護を無効化する手順
書き込み保護を無効化するのに必要なことは:
- 特殊なソフトウェアレジスタのハードウェア書き込み保護を無効化する。
- 特殊なソフトウェアレジスタの値を変更してソフトウェア書き込み保護を無効化するか、保護するアドレスの範囲を変更してデータが保護されないようにする (開始と終末が0)。
結論: 一度ソフトウェア書き込み保護を無効化すると二度と有効にはなりません。たとえハードウェア書き込み保護を有効にしてもファームウェアチップの保護は行われません。
ハードウェア書き込み保護の無効化
ハードウェア書き込み保護のネジ/スイッチ/ジャンパの場所や、無効化する方法についてはあなたが使っている機種の Chromebook の ArchWiki ページを見て下さい (Chromebook を参照)。ArchWiki にデバイスに関する情報がない場合は Information for Chrome OS Devices や Coreboot の Chromebook ページ を見て下さい。
ソフトウェア書き込み保護の無効化
Chromium OS の flashrom
はソフトウェア書き込み保護の特殊なレジスタを制御することができます。
- ソフトウェア書き込み保護の特殊レジスタの状態を読み込む:
# flashrom --wp-status
- ソフトウェア書き込み保護を無効化または有効化:
# flashrom --wp-disable
- ソフトウェア書き込み保護のアドレスの範囲を変更:
# flashrom --wp-range 0 0
Chromium OS の flashrom
に関する詳細や入手方法は、手動で flashrom を使うを見て下さい。