HTC U12+にGSIを焼く

備忘録。変な色分けになってるが気にしないことにする。

前提条件

  • bootloaderアンロック状態(S-ON
  • ファームウェアバージョンがPieであること
  • PieバージョンのRUUが手元にあること、実機からSystemやVendor、Boot、vbmeta等をバックアップしてあること

注意事項

  • 必ず片方のスロットのみを使用する
    • 例えばAB双方にvbmeta.imgを焼いた際、データが誤っているとリカバリーの起動すらできなくなり詰む
    • 起動失敗によるフォールバック機能で使用中のスロットが変更されることもあるので、データを送り込む前にスロットの確認を怠らないこと
  • S-ONではfastbootでvbmeta.imgは焼けない
    • かといって恒久的なS-OFFは多分できないので、TWRPを起動してddコマンドで送り込む(つまりしくじると詰む)
    • vbmetaはブート検証を行うので、ここがおかしいとリカバリーのブートが出来ない(上記写真のようにbootloaderに戻ってくる)→S-ON環境ではリカバリーからしかvbmetaの書き換えが行えない→AとBの両方に間違ったものを焼くと詰む
  • TWRPの起動やスロット変更はbootloader mode
  • system.imgを焼くときだけdownload mode
  • ddコマンドを間違えない
    • dd if=コピー元 of=コピー先 bs=4096
    • 送り先を間違えると死ぬぞ
  • 本ページを鵜呑みにせず、一次ソースを確認する
  • 全て自己責任で実行する

超音波・感圧式ボタンでの基本操作

結構しくじるのでメモ

電源OFFから状態Bootloader Mode(充電器を繋いでいない場合 1)

  1. 電源ボタンを長押しし、バイブレーションしたら離す
  2. 即座に音量下ボタンを押し続ける

電源OFFから状態Bootloader Mode(充電器を繋いでいない場合 2)

  1. 音量下ボタンを長押ししたまま、USBケーブルを接続する

電源OFFから状態Bootloader Mode(既に充電器を繋いでいる場合)

  1. 電源ボタンを長押しし、電源ランプが消えたら離す(バイブを目安にしてないだけ)
  2. 即座に音量下ボタンを押し続ける

起動しないROMを焼いてブートループしている場合

警告画面が出るせいでやりづらいのですが、電源ボタン長押しで警告画面を抜けつつ、再度電源ボタンを長押しして強制終了し、即座に音量下ボタンを押すみたいな流れだった気がします。

ちゃんと思い出したら書く……。

前準備

  1. GSIのダウンロード(今回はViper Experience 11を使用)
  2. TWRPのダウンロード
  3. ブート検証無効化済みのvbmetaのダウンロード(vbmeta_2.55.401.1_noverity.zip)(解凍しておく)
  4. 必要に応じて各種パッチのダウンロード
  5. bootloader modeで現在使用中パーティションの確認
    1. fastboot  getvar current-slot
    2. fastboot --set-active=b(Bスロットに焼く場合)

万が一起動しなくなった場合にもう片方のスロットから起動できるので、バージョンの古い方(2.59.454.1)のパーティションを指定して焼くのを推奨。(2021年5月1日現在2.61.454.1が最新)

インストール

  1. bootloader modeで起動
  2. TWRPをブート
    1. fastboot boot twrp.img
  3. TWRPを焼く
    1. "Advanced"→"Install Recovery Ramdisk"→ダウンロードしておいたtwrp.imgを選択
  4. vbmeta_2.55.401.1_noverity.imgをddで送り込む
    1. adb push vbmeta_2.55.401.1_noverity.img /sdcard
    2. (Bスロットに焼く場合)dd if=/sdcard/vbmeta_2.55.401.1_noverity.img of=/dev/block/bootdevice/by-name/vbmeta_b bs=4096
  5. Vendorパッチ、TWRPパッチ、Kernel、Magiskのインストール(任意)
  6. ブートループの修正(Magiskを焼く場合は不要)
    1. "Advanced"→"Fix Recovery Bootloop"
  7. download modeで再起動
  8. システムとユーザーデータの消去
    1. fastboot erase userdata
    2. fastboot erase system
  9. GSIのインストール
    1. fastboot flash system system.img
  10. 再起動

GSIのインストールで止まる場合

target reported max download size of 1073600000 bytes
Invalid sparse file format at header magi

上記メッセージから進まず戻ってくる場合は、fastbootが古い可能性。

最新のSDK Platform-Toolsをダウンロードする。

SDK Platform-Tools リリースノート  |  Android デベロッパー  |  Android Developers

正常時

Invalid sparse file format at header magic
Sending sparse 'system' 1/4 (917404 KB) OKAY [ 31.668s]
Writing 'system' (bootloader) HOSD CL#1100665
(bootloader) start@1
(bootloader) system_b@100%
(bootloader) Update partition OK
(bootloader) end@Done
OKAY [ 65.382s]
~中略~
Sending sparse 'system' 4/4 (893045 KB) OKAY [ 31.054s]
Writing 'system' (bootloader) HOSD CL#1100665
(bootloader) start@1
(bootloader) system_b@100%
(bootloader) Update partition OK
(bootloader) end@Done
OKAY [ 63.713s]
Finished. Total time: 395.093s

その他(ViperExperience Beta4)

fingerprint

HTC Exodus 1として指定すると通る。

2099年12月1日

本当は2021年4月5日らしいのだが、見なかったことにする。

Edge Sense

片手モードは無し、エッジスクロールなるものが増える。

HTCカメラ

動画撮影モードで設定を変更すると落ちる模様。ボケモードもファインダーがフリーズする他、HTCカメラ自体が起動しなくなることもあるため安定感はない。HTCカメラとは別にAOSP GSI付属のカメラがある。

 

写りは多分問題ないと思われる。

HTC Uソニック・ハイレゾイヤホン

動作を確認。アナログイヤホンなのでAOSP GSIなどでは動作しない可能性があるが、ViperExperienceでは動作する。しかし設定項目は無いため、ANCは動作していないと思われる。

バッテリー

5時間のスタンバイで5%程度消費。Y!モバイルのSIMカードを使用しているが、キャリアによって電波状況が異なるので参考程度に。

ディープスリープにはちゃんと入っている様子。

使用中のバッテリー消費については、バッテリーの劣化や燃費の悪さを加味してもこんなものだろうといったところ。

発売当初のときと比べてどうだったか思い出せなかったので、自分で書いたレビュー(HTC速報)を読み直してみたところ、「(バッテリーが持たない)HTCデバイスとしてはこんなもん、正直燃費は悪い」といった感想だったので、やはりこんなもん。

最新プロセッサと大容量メモリ搭載、パフォーマンスとバッテリーを確認 ― HTC U12+レビュー(3) | HTC速報

パーティションリスト(Bスロットがメインの場合)

htc_imedugl:/dev/block/platform/soc/1d84000.ufshc/by-name # ls -l
total 0
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 abl_a -> /dev/block/sde9
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 abl_b -> /dev/block/sde30
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 aop_a -> /dev/block/sde1
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 aop_b -> /dev/block/sde22
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 apdp -> /dev/block/sde46
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 avb_rec -> /dev/block/sde56
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 bluetooth_a -> /dev/block/sde6
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 bluetooth_b -> /dev/block/sde27
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 board_info -> /dev/block/sdf1
lrwxrwxrwx 1 root root 36 2021-05-01 08:28 boot -> /dev/block/bootdevice/by-name/boot_b
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 boot_a -> /dev/block/sde13
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 boot_b -> /dev/block/sde34
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 carrier -> /dev/block/sda16
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 cdt -> /dev/block/sdd2
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cmnlib64_a -> /dev/block/sde16
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cmnlib64_b -> /dev/block/sde37
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cmnlib_a -> /dev/block/sde15
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cmnlib_b -> /dev/block/sde36
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 control -> /dev/block/sda13
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 cota -> /dev/block/sda17
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 ddr -> /dev/block/sdd3
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 devcfg_a -> /dev/block/sde17
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 devcfg_b -> /dev/block/sde38
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 devinfo -> /dev/block/sde44
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 devlog -> /dev/block/sda10
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dip -> /dev/block/sde45
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dpo -> /dev/block/sde48
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dsp_a -> /dev/block/sde10
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dsp_b -> /dev/block/sde31
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dtbo_a -> /dev/block/sde21
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 dtbo_b -> /dev/block/sde42
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 extra -> /dev/block/sda12
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 fataldevlog -> /dev/block/sda11
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 frp -> /dev/block/sda14
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 fsc -> /dev/block/sdf4
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 fsg -> /dev/block/sdf3
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 hosd_a -> /dev/block/sde14
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 hosd_b -> /dev/block/sde35
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 hvbmeta -> /dev/block/sda4
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 hyp_a -> /dev/block/sde3
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 hyp_b -> /dev/block/sde24
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 keymaster_a -> /dev/block/sde11
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 keymaster_b -> /dev/block/sde32
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 limits -> /dev/block/sde50
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 local -> /dev/block/sda15
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 lockbooter_a -> /dev/block/sde12
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 lockbooter_b -> /dev/block/sde33
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 logdump -> /dev/block/sde54
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 logfs -> /dev/block/sde52
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 mdtp_a -> /dev/block/sde8
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 mdtp_b -> /dev/block/sde29
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 mdtpsecapp_a -> /dev/block/sde7
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 mdtpsecapp_b -> /dev/block/sde28
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 mfg -> /dev/block/sdf2
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 misc -> /dev/block/sda6
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 modemst1 -> /dev/block/sdf5
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 modemst2 -> /dev/block/sdf6
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 msadp -> /dev/block/sde47
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 nfc_record -> /dev/block/sda18
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 oem_misc -> /dev/block/sda7
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 padding0 -> /dev/block/sda1
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 padding3 -> /dev/block/sdd1
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 persist -> /dev/block/sda3
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 pg1fs -> /dev/block/sda5
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 pmic_a -> /dev/block/sde4
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 pmic_b -> /dev/block/sde25
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 qupfw_a -> /dev/block/sde18
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 qupfw_b -> /dev/block/sde39
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 radio_a -> /dev/block/sde5
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 radio_b -> /dev/block/sde26
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 ramdump -> /dev/block/sda8
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 reserve0 -> /dev/block/sda22
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 reserve4 -> /dev/block/sde57
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 reserve5 -> /dev/block/sdf7
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 sec -> /dev/block/sde43
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 sp1 -> /dev/block/sde49
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 ssd -> /dev/block/sda2
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 sti -> /dev/block/sde53
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 storsec -> /dev/block/sde55
lrwxrwxrwx 1 root root 38 2021-05-01 08:28 system -> /dev/block/bootdevice/by-name/system_b
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 system_a -> /dev/block/sda19
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 system_b -> /dev/block/sda20
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 tool_diag -> /dev/block/sda9
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 toolsfv -> /dev/block/sde51
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 tz_a -> /dev/block/sde2
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 tz_b -> /dev/block/sde23
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 userdata -> /dev/block/sda21
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 vbmeta_a -> /dev/block/sde20
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 vbmeta_b -> /dev/block/sde41
lrwxrwxrwx 1 root root 38 2021-05-01 08:28 vendor -> /dev/block/bootdevice/by-name/vendor_b
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 vendor_a -> /dev/block/sde19
lrwxrwxrwx 1 root root 16 1972-10-27 07:23 vendor_b -> /dev/block/sde40
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 xbl_a -> /dev/block/sdb1
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 xbl_b -> /dev/block/sdc1
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 xbl_config_a -> /dev/block/sdb2
lrwxrwxrwx 1 root root 15 1972-10-27 07:23 xbl_config_b -> /dev/block/sdc2

12-04 – ViperExperience Beta 4 | Android 11 | April 2021 Security Patch |GSI | XDA Developers Forums

[GUIDE]*How to install a Generic System Image (GSI) on your HTC U12+ | XDA Developers Forums

ViperExperience – Browse Files at SourceForge.net

2022年現在の状況

ViperExperience Beta 13がリリースされており、2022-06-05のセキュリティパッチが適用されたAndroid 12Lが利用できるようです。(ダウンロードはSourceForgeから)

2022年12月にあった投稿によると、なんと年内にAndroid 13バージョンがリリースされる予定とのこと。AOSPからPixelExperienceにソースコードが変更されるようです。ざっと探してみた感じでは、mikalovtch氏が制作をしているHTC U12+向けのViperExperience以外は、殆ど活動が見られないか終了しているように見受けられます。

長期間使っていないのですが、Android 13になったら引っ張り出してきて動かしてみようかなと思います。こうして備忘録として手順や注意点を残していますが、久しぶり過ぎて操作が怖いな……。ブートループした際の超音波・感圧式センサーボタン操作周りがややこしいので、やり方を思い出せたら後で追記します。

Android 13をテスト

Beta14のAndroid 13がリリースされていたので焼いてみました。ユーザーデータの引き継ぎは出来ないので全消しします。fastboot erase userdataしてから焼きましょう。

指紋センサーが壊れていることや、イヤホン周りがおかしい不具合がありました。純正のDAC無しイヤホンが動くかどうかは未確認ですが、その他のDAC搭載イヤホンでノイズが入るようです。パフォーマンスもちょっともたつく気がするのですが、古いデバイスなのでなんとも言えないところです。Kernel Toolkitなどのアプリで調整すると良いのかもしれません。

エッジ・センスの設定はショートカットアプリなどを介して呼び出せば設定できました。また、背面をダブルタップする「クイックタップ」も動作するのですが、頻繁に誤作動するのでお勧めはしません。

ちょっと怪しいですが、思いのほか動いてくれる感じでした。

12-19 - ViperExperience Beta 14 | Android 13 | November 2022 Security Patch |GSI
ViperExperience 12L GSI for U12+"Choose your flavor! - The next Generation Viper ROM"Dear Community,Venom ROMs takes the next big step for your HTC, as w...

2021-05-04:利用状況を追記。
2022-12-13:ROMの開発状況を追記。
2022-12-22:Android 13を試したので追記。

タイトルとURLをコピーしました