Chrome OS カスタムファームウェア

提供: ArchWiki
2022年8月19日 (金) 10:52時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (カテゴリを追加)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

警告: この記事ではサードパーティ製のスクリプトなどを使用するため、ハードウェアやデータに修復不可能なダメージを与える可能性があります。自己責任で使用してください。

イントロダクション

カスタムファームウェアを書き込む理由

メリット

  • 最新版の 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 のフォーク) からファームウェアをコンパイルする必要があります。
ノート: 4.4 よりも新しい Linux カーネルでは、新しいカーネルセキュリティ設定である CONFIG_IO_STRICT_DEVMEM によって flashrom が動作しないことがあります。そのような場合はカーネルパラメータiomem=relaxed を追加してみてください [2]

ハードウェア書き込み保護の無効化

ファームウェア書き込み保護セクションのハードウェア書き込み保護の無効化を見て下さい。

John Lewis のスクリプトを使って書き込む

警告: スクリプトを実行する前にハードウェア書き込み保護を無効化してください。

スクリプトの説明

John Lewis の getnflash_johnlewis_rom.sh スクリプトは何をするのか
  • flashrom の Chromium OS の32ビット版を自動でダウンロード。
  • 現在のファームウェアをバックアップ。
  • # ./flashrom --wp-disable を実行してソフトウェア書き込み保護を無効化。
  • dmidecode で Chromebook の製品名を確認して適当なカスタムファームウェアをダウンロード。
  • カスタムファームウェアを書き込み。
スクリプトは何をしないのか
  • あなたに確認を取りません。
  • ハードウェア書き込み保護が無効化されているか確認しません。
  • 特定の Chromebook の下位モデルとカスタムファームウェアの互換性を確認しません。
まとめ
警告: カスタムファームウェアを書き込むときは、デバイスが文鎮化するかもしれないということを覚悟してください。そして文鎮化の対処法を見ておいて下さい。

Chrome OS でスクリプトを実行

ノート: ここにコマンドを記述しないのは、実際に実行する前にサイトにサクセスして実際にページを読んで欲しいからです。
  • スクリプトが終了したらシステムを再起動する前に外部ストレージにバックアップされたファームウェアをコピー。

以上でデバイスにカスタムファームウェアがインストールされたはずです。うまくいくように願いながら再起動しましょう。

Arch Linux のインストールの一環でファームウェアの書き込みを行ったときは、Arch Linux のインストールを続行してください。カスタムファームウェアでインストールメディアが正しく起動したら、ハードウェア書き込み保護は有効に戻してかまいません。

Arch Linux でスクリプトを実行

  • 64ビット環境の Arch Linux では pacman.conf で Multilib リポジトリを有効にして lib32-glibc をインストールする必要があります。
# pacman -S lib32-glibc
  • dmidecode をインストールしてください。
# pacman -S dmidecode
ノート: ここにコマンドを記述しないのは、実際に実行する前にサイトにサクセスして実際にページを読んで欲しいからです。
  • スクリプトが終了したらシステムを再起動する前に外部ストレージにバックアップされたファームウェアをコピー。

以上でデバイスにカスタムファームウェアがインストールされたはずです。神の再来を願って再起動しましょう。

カスタムファームウェアで 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 -V|grep 'Found' |grep 'flash chip'

元のファームウェアを書き込む

ノート: 以下はデバイスが文鎮になっていないのが前提です。文鎮化してる場合は Chromebook の文鎮化の復旧を見て下さい。

ハードウェア書き込み保護を無効化して flashrom を使って手動でファームウェアを書き込む方法を見てオリジナルのファームウェアのバックアップを書き込んで下さい。

Chromebook の文鎮化の復旧

ノート: このセクションでは文鎮化した Chromebook にファームウェアを書き込む手順の基本的な知識を紹介するに留めます。ArchWiki はハードウェアのハックを載せるところではないので詳細は語りません。

必要なツール

  • プログラム書き込み機。Raspberry PiBus 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 が便利な理由)。

文鎮化回復について読むべき文章

ファームウェア書き込み保護

ノート: このセクションでは Chromebook における書き込み保護の基本的な知識を紹介するに留めます。ArchWiki はハードウェアのハックを載せるところではないので詳細は語りません。

ファームウェア (Coreboot とペイロード) は SPI チップ (通常 SOIC8) に保存されており、その記憶領域の一部は書き込み保護されています (ほとんどは Coreboot)。

書き込み保護を無効化するか保護領域を (0,0) に設定しないかぎり、ファームウェアの保護されてない領域に変更を行っても Chrome OS のリカバリメディアで修復することができます。

書き込み保護は二分されます: ハードウェアとソフトウェアです。

ハードウェア書き込み保護

ハードウェア書き込み保護は開閉したときにソフトウェア保護の特殊なレジスタへの書き込みをふせぐ電気回路で、ハードウェア書き込み保護は直接的には特殊なレジスタしか保護していませんが、間接的にはファームウェアチップのデータも保護していることになります。

ハードウェア書き込み保護を無効化するには、ネジを取り外して、スイッチを押すかジャンパをショートさせる必要があります。

ソフトウェア書き込み保護

ソフトウェア書き込み保護はファームウェアチップに保存されているデータが保護されているかどうかを決める特殊なレジスタで、保護データのアドレスの範囲も保持します。

書き込み保護を無効化する手順

書き込み保護を無効化するのに必要なことは:

  • 特殊なソフトウェアレジスタのハードウェア書き込み保護を無効化する。
  • 特殊なソフトウェアレジスタの値を変更してソフトウェア書き込み保護を無効化するか、保護するアドレスの範囲を変更してデータが保護されないようにする (開始と終末が0)。

結論: 一度ソフトウェア書き込み保護を無効化すると二度と有効にはなりません。たとえハードウェア書き込み保護を有効にしてもファームウェアチップの保護は行われません。

ハードウェア書き込み保護の無効化

ハードウェア書き込み保護のネジ/スイッチ/ジャンパの場所や、無効化する方法についてはあなたが使っている機種の Chromebook の ArchWiki ページを見て下さい (Chromebook を参照)。ArchWiki にデバイスに関する情報がない場合は Information for Chrome OS DevicesCoreboot の Chromebook ページ を見て下さい。

ソフトウェア書き込み保護の無効化

Chromium OS の flashrom はソフトウェア書き込み保護の特殊なレジスタを制御することができます。

  • ソフトウェア書き込み保護の特殊レジスタの状態を読み込む:
# flashrom --wp-status
  • ソフトウェア書き込み保護を無効化または有効化:
# flashrom --wp-disable
  • ソフトウェア書き込み保護のアドレスの範囲を変更:
# flashrom --wp-range 0 0

Chromium OS の flashrom に関する詳細や入手方法は、手動で flashrom を使うを見て下さい。