ROM焼き試験場

旧:ミ田ろぐ このブログには広告が表示されます

DSU sideloaderを使ってroot化に必要なboot.img/init_boot.imgを抜き出す方法・手順

当ブログは広告を利用しています。

中級者~上級者向け

 

 

 

DSUを使って抜き出す必要があるもの

XiaomiやPixel等の開発に寛容なメーカーはすべての機種に対してファクトリーイメージが用意されており、それを使えば簡単にMagisk導入ができるが、ほとんどのメーカーはそんなことをしておらず、Rootを取りたい場合は自分で端末からイメージを抜き出す必要が出てくる。

 

Xiaomiの場合でも、キャリア版機種はXiaomiが公開していないキャリア版独自のROMが使われており、グローバル版とは使いまわしができない。また完全なキャリア版のROMに戻すこともできなくなるのでこういう場合にも自分でファームを抜き出す必要が出てくる。

用意するもの

手順

ブートローダーアンロックする

「機種名 ブートローダーアンロック」「メーカー名 ブートローダーアンロック」等でググって方法を探し、ブートローダーアンロックする。

出てこない場合は諦めてください

AQUOS FCNT 京セラ 等日本メーカーは絶対にできないので諦めてください

 

Bootloader unlocking - Wikipedia

 

ブートローダーアンロックせずにDSUを起動させようとすると完全に文鎮化します。全て自己責任です。

現在実行中のスロットの確認

最近(Android12~)の端末は2つのスロットを持っており、アップデートごとに切り替える方式になっています。

AとBの2つに分かれているので、それぞれファイルは別のものになっており、間違ったスロットのものを抜き出して使うと文鎮化してしまうので現在のスロットを確認することはとても重要です。

A/B(シームレス)システム アップデート  |  Android オープンソース プロジェクト  |  Android Open Source Project

 

fastbootモードで起動させ以下コマンドを実行します。

fastboot getvar current-slot

画像の場合、bですね。これをよく覚えておきましょう。端末、アプデ状況によって異なるので確実に確認してください。

 

ADBデバッグの有効化

GoogleMotorola等一般的なメーカー

  • 設定→システム→ビルド番号 を連打すると開発者オプションが有効になる
  • 開発者オプションからUSBデバッグを有効化する

Xiaomi、realme(oplus)、Lenovo等中華メーカー(上で有効化できない場合)

  • OSバージョン を連打すると開発者オプションが有効になることが多い
  • 「メーカー名 開発者オプション」等で検索して方法を調べる。

 

MIUIの場合「USBデバッグ(セキュリティ設定)」、realme(oplus)の場合「認可の監視を無効化」といったような重要なadbコマンドを防ぐ設定がある場合があるが、DSU sideloaderを使う場合はそれらを有効化する必要はなさそうです。

DSU sideloaderのインストール

リリースページの[app-release.apk]をダウンロードする。なまえがわかりづらいのでDSUsideloader.apkなどに変更することをおすすめする。

 

普通のAPKファイルなので、抜き出したい端末にインストールする。

アプリを開きます。

初回起動時はストレージ設定が必要になります。「設定」を押します

ファイルマネージャーが開くので、「新規フォルダを作成」を押します。適当に、「dsu」という名前のフォルダを作ります。(名前は何でもいいです)

作成したフォルダを開き、「このフォルダを使用」を押します。許可しますか?というポップアップが出てくるので「許可」を押します。

 

ブートローダーアンロックしとけよという注意書きが出てくるので「続行する」をおします。これで初期設定は完了です。

 

右上の歯車から設定を開けます。MicroSDカードを使っている場合はインストール処理で失敗する場合があるので1をオンにしてください。

RAMが少ない機種や中華UIの機種はスリープ状態になるとタスクキルされインストールが中断されてしまうことがあるので2をオンにしておくとよいでしょう。

 

DSUのインストール①

端末にGSIのROMファイル(lineage~.img.xz)をコピーします。解凍せず、xzファイルのままで問題ないです。インストールに失敗する場合があるのでMicroSD等の外部ストレージにはコピーしないでください。内部ストレージ直下、または作成したdsuフォルダ内にコピーすることをオススメします。

 

「インストールするファイルを選択」を押します。ファイルマネージャーが開くので、コピーしたROMファイルを選びます。

ここを押すと上のフォルダ(=内部ストレージ直下)に行きます。

 

選択出来たら「userdata size」のボタンを押し、32GB程度入力します。

boot.img/init_boot.imgのみを抜き出すだけだったらデフォルトのままで問題ないですが、ファームウェア全部抜き出す場合は多めに取っておくとよいです。

 

1の「インストール」を押します。2の続けるを押し、インストールします。

プログレスバーが進みます。

DSUのインストール②

インストール準備が完了すると、「コマンドを表示」ボタンが出てきます。

 

この状態でPCとADBで接続し、コマンドプロンプトから以下のコマンドを実行します。

adb shell sh "/storage/emulated/0/Android/data/vegabobo.dsusideloader/files/install"

上記のように表示され、端末にDSUの通知が出てきているか確認する。

 

上手く導入出来ていれば破棄、「再起動」ボタンが出てくるので「再起動」を押すとLineageOSで再起動される。

 

 

LineageOSのセットアップ

上の方に日本語があるので設定します。インターネット接続やPIN設定や復元等は全部スキップで良いが、日付と時刻は近めのものを設定しておきます。

 

ホーム画面上にスワイプでドロワーが開きます。

Rootの有効化

設定アプリを開きます。

「デバイス情報」から「ビルド番号」を連打し、開発者オプションを有効化させます。

「システム」から「開発者オプション」を開き、「USBデバッグ」「ルート状態でのデバッグ」をオンにします。

 

PCとADB接続します。

Shellの操作

以下コマンドを実行します。

adb shell

su

$が#になればOKです。

 

mkdir /sdcard/backup_img/

 

cd /dev/block/by-name/

/data/dataが/dev/block/by-nameになればOKです。

 

boot.imgでRoot取る場合

ls /dev/block/by-name/ 実行時、init_bootが無い場合はboot.imgを使います。(画像は8+gen1のy700 2023です。)

 

カレントスロットがAの場合

dd if=boot_a of=/sdcard/backup_img/boot_a.img

Bの場合

dd if=boot_b of=/sdcard/backup_img/boot_b.img

init_boot.imgでRoot取る場合

ls /dev/block/by-name/ 実行時、init_bootがある場合はinit_boot.imgを使います。(画像はDimensity7200のNothing Phone (2a)です。)

 

カレントスロットがAの場合

dd if=init_boot_a of=/sdcard/backup_img/init_boot_a.img

Bの場合

dd if=init_boot_b of=/sdcard/backup_img/init_boot_b.img

 

abパーティションでない場合

dd if=boot of=/sdcard/backup_img/boot.img

ls /dev/block/by-name/ 実行時、ファイル末尾に_aや_bがない場合はABの概念が無いのでそのまま抜き出します。

boot.img/init_boot.imgのコピー

以下コマンドで抜き出したファイルがあるか確認します。

ls /sdcard/backup_img/

正常に抜き出せていればフォルダ内にimgファイルが表示されます。

 

2回exitをし、コマンドプロンプトに戻ります。

 

後は、MTPでbackup_imgフォルダをコピーするか、adb pullでPCにコピーします。

完了

PCに抜き出せたならほぼ作業完了です。

 

そのまま再起動すれば元のOSが起動します。

不要になったDSUは「破棄」ボタンを押すと消去され容量が解放されます。DSUで保存したデータは元のOSとは共有されないので注意してください。

 

あとは抜き出したimgファイルを使ってパッチを当ててインストールするだけです。お疲れ様でした。

mitanyan98.hatenablog.com

 

まとめ

難しいけど頑張ってください。できないならイメージを誰かが公開するまで大人しく待っててください。もしくは金払って依頼してください。

 

全部のファイルを抜き出す場合

Androidのイメージバックアップ (パスやファイル名は端末によって変わるため、適宜変更してください) · GitHub

 

cd /dev/block/by-name/ まで進む

ーーーー

for file in *; do
    if [[ "${file}" = cache* || "${file}" = userdata* || "${file}" = sda || "${file}" = sdb || "${file}" = sdc ]]; then continue ; else dd if="${file}" of=/sdcard/backup_img/"${file}".img ; fi
done

ーーーー


このダイアログが出るが、強制的に貼り付けを押し、実行する。

しばらく待つ。

 

ファイル整合性チェック

ーーーー

echo "" > /sdcard/backup_img/md5.txt
for file in *; do
    if [[ "${file}" = cache* || "${file}" = userdata* || "${file}" = sda || "${file}" = sdb || "${file}" = sdc ]]; then continue ; else
    if cmp -s "${file}" /sdcard/backup_img/"${file}".img; then
        echo "${file} - OK" >> /sdcard/backup_img/md5.txt
    else
        echo "${file} - NG, you have to backup again!" >> /sdcard/backup_img/md5.txt
    fi
    fi
done

ーーーー

も同様に強制的に貼り付けして実行する。問題があれば/sdcard/backup_img/md5.txtのパーテイション名にNG, you have to backup again!と表示される。

ddコマンドで個別に抜き出してまた整合性チェックをしましょう