Note to Self by notekunst

ただの備忘録です

Unihertz Atom L への LineageOS のインストール

Unihertz Atom L に LineageOS を入れてみました。

私の場合、最初は、フラッシュした Lineage リカバリがうまく起動しませんでした(画面上部に緑色の線が表示されて、Atom L がフリーズしました)。試しに、Atom L の Stock Rom を初期のものにダウングレードしてから Lineage リカバリをフラッシュしたら、Lineage リカバリがうまく動作しました。XDA の投稿をみると、緑線フリーズが発生する場合と発生しない場合とがあるようです。初期の Stock Rom をフラッシュしなくても、設定の工夫によって、Lineage リカバリが動作するのかもしれません。

また、自分で LineageOS をビルドしてみました。ビルドした LineageOS を Atom L に入れたら、うまく動作しました。

本記事は、これらの作業のメモです。

Stock Rom のフラッシュ

Stock Rom の URL を、Unihertz の公式ウェブサイトのフォーラムの投稿の中に見つけました。
https://www.unihertz.com/unihertz-form.html/rom--development/firmware-for-atom
この投稿の「unihertz's google drive」のリンク先から、Stock Romをダウンロードできました。
このURLが公式なのか否かは未確認なので、ご利用は自己責任で・・・

私は、Software_firmware/Atom_L/None_EEAから、最も古いと思われる "2020052615_g63v71c2k_dfl_tee.zip" をダウンロードしました。そして、SP Flash Tool を使って Atom L に Stock Rom をフラッシュしました。
SP Flash Tool を、XDA の記事等々を参考にして、入手しました。
https://forum.xda-developers.com/t/tut-mtk-android-sp-flash-tool-tutorial.1982587/
このツールはMediatek社の公式ツールではなさそうなので、普段使いの PC 上ではなく、仮想マシンVirtualBoxUbuntu)で SP Flash Tool を動かしました。

LineageOSのビルド

参考にした記事

以下の3つの記事を参考にしました。

・PeterCxy氏の記事(Atom L 用のデバイスツリーを公開しています)
https://forum.xda-developers.com/t/rom-unofficial-lineageos-17-1-for-unihertz-atom-l-20200828.4139423/

・a-dead-trousers氏の記事(Atom XL 用のデバイスツリーとビルドの手順などをまとめています)
https://forum.xda-developers.com/t/rom-10-0-unofficial-lineageos-17-1-for-unihertz-atom-xl-alpha-2021-01-24.4171407/

・dirtylimerick0氏のリポジトリAtom L 用のデバイスツリーとビルドの手順などをまとめています)
https://github.com/dirtylimerick0/Atom_L

私は、LineageOS 17.1のリポジトリにdirtylimerick0氏のデバイスツリーを追加してLineageOSをビルドしました。

lineageOSリポジトリの初期化

ディレクトリを作って、リポジトリを初期化します。

mkdir -p ~/android/lineage_atoml
cd ~/android/lineage_atoml
repo init -u https://github.com/LineageOS/android.git -b lineage-17.1
local_manifestsの作成

dirtylimerick0氏のデバイスツリーを用いるためのmanifestを作成します。

mkdir -p .repo/local_manifests
vi .repo/local_manifests/unihertzatoml.xml

ファイル名は、任意です。内容を、以下のように書いてみました。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project name="dirtylimerick0/Atom_L" path="device/Unihertz/Atom_L" remote="github" revision="master" />
</manifest>
ソースコードの同期

manifestを作成したら、ソースコードを同期します。

cd ~/android/lineage_atoml
repo sync --force-sync
blobの準備

私は、現時点で最新と思われる Stock Rom のzipデータ "2020110318_g63v71c2k_dfl_tee.zip"から blob を抽出しました。
まず、このzipファイルから「super.img」を取り出します(例えば、~/blobにコピーします)。
super.imgからイメージデータを抽出します。抽出方法については、 a-dead-trousers氏の以下の記事が参考になります。
https://github.com/ADeadTrousers/android_device_Unihertz_Atom_XL/blob/master/docs/HOW-TO-EXTRACT_FILES.md

ツール「imjtool」を用いて product.img、system.img、vendor.img を抽出します。

cd ~/blob
imjtool super.img extract (image.imgが抽出され、ディレクトリextractedの下の保存されます)
imjtool extracted/image.img extract (product.img、system.img、vendor.imgが抽出され、ディレクトリextractedの下の保存されます)

抽出したイメージをマウントします。

mkdir system
sudo mount extracted/system.img system/
sudo mount extracted/vendor.img system/vendor/
sudo mount extracted/product.img system/product/

Atom L のデバイスツリー(ここでは、device/Unihertz/Atom_L)に移動して、blob 抽出コマンドを実行します。

./extract-files.sh ~/blob

blob の抽出が終了したら、img ファイルをアンマウントします。

sudo umount -R ~/blob/system/

以上で、blob の抽出作業は終了です。

ビルド

ビルドの準備の行います。

cd ~/android/lineage_atoml
source build/envsetup.sh
breakfast Atom_L

準備が整ったら、ビルドを開始します。

croot
brunch Atom_L > brunch.log 2>&1 &

ビルドに成功した場合、出力用のディレクトリ(~/android/lineage_atoml/out/target/product/Atom_L/)に、インストールパッケージファイル等が生成されます。

lineage-17.1-2021XXXX-UNOFFICIAL-Atom_L.zip
recovery.img
vbmeta.img

LineageOSのインストール

以下の順に作業を進めます。
ブートローダのアンロック
・AVB (Android Verified Boot)の無効化
Lineage recovery のインストール
・LineageOS のインストール

以下の記事を参考にしました。

・PeterCxy氏の記事
https://forum.xda-developers.com/t/rom-unofficial-lineageos-17-1-for-unihertz-atom-l-20200828.4139423/

・a-dead-trousers氏の記事
https://github.com/ADeadTrousers/android_device_Unihertz_Atom_XL/blob/master/docs/HOW-TO-INSTALL.md

a-dead-trousers氏の記事は Atom XL 用のものですが、インストールの手順は、Atom L でも同様です。

ブートローダのアンロック

自分がどのようにアンロックしたのか忘れましたが、PeterCxy氏の記事によると、アンロックの手順は以下の通りです。なお、アンロックを行うと、メーカー保証を受けられない可能性があります。試したい人は、自己責任で・・・

・Settings(設定)->About phone(端末情報)->Build number(ビルド番号)を複数回タップして、Developer options(開発者向けオプション)を有効化します。
・Settings(設定)->System(システム)->Developer options(開発者向けオプション)->OEM unlocking(OEM ロック解除)を有効化します。
・Atom L を PC に繋ぎ、PC 上で adb reboot bootloader を実行して、bootloader を起動します。
「Volume down を押しながら電源をオン」を行っても、bootloader は起動しません(代わりに、テストモードが起動します)
・PC 上で、fastboot flashing unlock を実行します。
AVB (Android Verified Boot)の無効化

bootloader を起動し、vbmetaのイメージをフラッシュします。

fastboot flash --disable-verification --disable-verity vbmeta vbmeta.img
fastboot flash --disable-verification --disable-verity vbmeta_system vbmeta_system.img
fastboot flash --disable-verification --disable-verity vbmeta_vendor vbmeta_vendor.img

私は、最初、PeterCxy氏の記事の vbmeta.img、vbmeta_system.img、vbmeta_vendor.img を用いました。その後、LineageOS のビルドで生成された vbmeta.img を3つの領域にフラッシュしてみました。この後も、 LineageOS と Lineage リカバリは、うまく動作しました。

Lineage recovery のインストール

vbmetaのイメージのフラッシュに続いて、Lineage recovery をフラッシュします。

fastboot flash recovery recovery.img

私は、最初、PeterCxy氏の記事の recovery.img を用いました。その後、LineageOS のビルドで生成された recovery.img をフラッシュしてみましたが、このリカバリもうまく動作しました。

LineageOS のインストール

リカバリを起動して、LineageOS を sideload します。
リカバリを起動すると、ボリュームボタンにより選択肢を変更でき、電源ボタンにより選択(確定)できます。
なお、メニューの一番上の「戻る」の選択肢が表示されませんが、見えないだけで選択可能です。

Atom L を PC に繋き、リカバリを起動します。PC 上で「adb reboot recovery」を実行してもよく、Volume Up を押しながら電源ONでもよいです。
・初めて LineageOS をインストールする場合、データを消去するとよいと思います (Factory reset, Format data/factory reset)
・「Apply update」を選択し、「Apply from ADB」を選択します。
・PC 上で「adb sideload lineage-17.1-2021XXXX-UNOFFICIAL-Atom_L.zip」を実行します。

sideload が完了したら、リブートします (Reboot system now)。これで、LineageOS が起動しました。

Hotspot & tethering の設定メニューについて

上記のデバイスツリーを利用する場合、「Setting(設定)」の「Network & internet」のメニューに「Hotspot & tethering」が表示されません。
a-dead-trousers氏は、Atom XL 用に、この設定メニューのためのコードを書いてます。
https://github.com/ADeadTrousers/android_device_Unihertz_Atom_XL/commit/24ad9ff230a7a50213128b589405a421a663c65d
私はコードに詳しくありませんが、「 overlay/frameworks/base/core/res/res/values/config.xml」の修正部分と、「 sepolicy/private/hal_graphics_allocator.te」とを、デバイスツリーに適用してみました。すると、「Hotspot & tethering」 の設定メニューが表示されました。
なお、「 app/Intercom/Android.mk」は、トランシーバのためのコードと思われるので省略しました。