Fire TV Stick (第3世代)にLineageOS 18.1 (Android 11)を焼いて純粋なAndroid TVとして使う
はじめに
Fire TV Stick (第3世代)に搭載されるSoCである、MediaTek MT8695の脆弱性をついてブートローダーをアンロックし、TWRPを起動することが出来るエクスプロイトがXDAで公開された
- これにより、TWRPでシステム領域の書き換えが可能になった
バージョン7.2.7.3未満のファーム(FireOS)がインストールされている個体が前提となる
- 以降のアップデートで脆弱性が塞がれ、通用しなくなった
基本的にはXDAに記載された通りの内容になる
- 一部、フロントのスクリプトの書き換えが必要な部分がある
大まかな手順
- 母艦からエクスプロイトを実行してブートローダーをアンロックする
- fastbootでTWRPを起動する
- 母艦からLineageOS 18.1とGAppsを内蔵ストレージへ転送する
- TWRPでストックのファームウェアをワイプする
- TWRPでLineageOSとGAppsをインストールする
TWRP起動後の操作は、母艦からadb shellでデバイスに入り、CLIのtwrpコマンドで操作する方法が一番楽。
準備するもの
1. エクスプロイト本体
- スレッド1番目の投稿のAttachments内、"kamakiri-sheldon-1.0.zip"
- TWRPもこちらに含まれている
2. Fire TV Stick (第3世代)用のLineageOS 18.1ビルド
3. Open GApps
4. 母艦となる適当なLinux
- 無難で楽なのは、Ubuntu 21.10のLive USB辺り
- USB3.0ポート(5V0.9Aのバスパワー)があれば、Fire TV Stickをバスパワーで起動しつつ母艦になれるので楽
- VM環境だと失敗の報告が挙がっているので、物理で1台用意するのが無難
5. その他諸々
- Fire TV Stick本体 (バージョン7.2.7.3未満)
- microUSB-to-USB Type-Aケーブル (Fire TV Stick付属のもので十分)
- HDMIを入力できる何か
1. 環境構築
1-1. 必要なライブラリやツールのインストール
- XDAでオススメされている通り、Ubuntuでuniverseのリポジトリを追加し、そちらで必要な物をインストールする
- 試していないが、Python系はpipで入れつつ、別途adb fastboot辺りを準備しても問題無いとは思う
> sudo add-apt repository universe > sudo apt install python3-serial python3-usb adb fastboot dos2unix
1-2. ModemManagerの無効化
- エクスプロイトの実行にあたり、ModemManagerを無効化しておく必要がある
- stopだけしておけば問題無さそうだが、念の為disableも入れておく
> sudo systemctl stop ModemManager > sudo systemctl disable ModemManager
1-3. 必要な物のダウンロード
- エクスプロイト本体・LineageOS・GAppsをダウンロードしておく
- エクスプロイト本体のみ解凍しておく
- TWRPを用いてインストールする後者2つについては、解凍しない
2. ブートローダのアンロック
sudo ./bootrom-step.sh
- 以下のメッセージが表示されたことを確認する
[(実行時刻)] Waiting for device
- Fire TV Stickを母艦に接続すると、自動でアンロックが開始される
- なお、
RuntimeError: downgrade failure, giving up
が発生する場合は一部の処理をスキップするようフロントのスクリプトの書き換えが必要- 今回試した個体はこちらの書き換えが必要だった
vi modules/main.py
- こちらのファイルの、73行目から76行目をコメントアウトする
rpmb = dev.rpmb_read() if rpmb != b"\x00" * 0x100: dev.reboot() raise RuntimeError("downgrade failure, giving up")
3. TWRPの起動
- 以下のシェルスクリプトを実行すると、fastboot boot recoveryとしてTWRPを送り込んで起動する
> ./fastboot-step.sh
- TWRPの操作は母艦からadb shellでデバイスに入り、twrpコマンドで実施する
2. LineageOSのインストール
先にLineageOSとGAppsをadb pushでデバイスに送り込みTWRPでそちらをインストールする
adb devicesで認識されていることを確認したのち、内蔵ストレージへadb pushで送り込む
- adb shellでデバイスに入り、twrpコマンドでワイプを実施
- 引き続き、twrp installで先程送り込んだ2つのファイルをインストールする
- HDMIの方でも、TWRPのログを確認することが可能
- 完了したら、adb shellの方でrebootを実施する
3. LineageOSの起動
- 初回起動時はブートロゴで暫く掛かるが、起動を待つ
- 付属のリモコンをペアリングし、後はAndroid TVとして使うことが可能
- Android TVでも、デフォルトでホームに広告が出るらしい