Android5.0の更新パッケージのsystem.new.datファイルの解包


Android 5.0からdm-verityをサポートし、blockによるパーティション更新をサポートする必要があります.make otapackageを使用するときに--block-basedパラメータで得られたzipファイルを指定し、内容を表示します.
boot.img file_contexts META-INF system.new.dat system.patch.dat system.transfer.list
明らかにimgは提供されず、3つのファイルを提供し、この3つのファイルのスクリプトを使用して/META-INF/com/google/android/updater-scriptファイルに次のようにします.
block_image_update("/dev/block/platform/msm_sdcc.1/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");

関数は次のように定義されます.
bootable/recovery/updater/blockimg.c:BlockImageUpdateFn()にあります.
コードにはtransfer listファイルの内容を記述するコメントがあり、次のコマンドをサポートします.
1)ファイルの最初の行はバージョン番号で、現在は1です.
2)ファイルの2行目は、合計で書き込むブロック数である(後のnewコマンドのrangeを合わせるとこの値に等しいはずである).
3)erase[rangeset]:ターゲットパーティションのrangeをクリアする;
4)zero[rangeset]:ターゲットパーティションのrangeを0で埋め込む.
5)new[rangeset]:ターゲットパーティションのrangeをnew_dataファイルの埋め込み;
例えば次のようなシステムです.transfer.リストファイル:
1
90270
erase 2,0,262144
new 28,0,32767,32768,32770,32833,32835,33347,65535,65536,65538,98304,98306,98369,98371,98883,124176,131072,131074,163840,163842,163905,163907,196608,196610,229376,229378,229441,229443
第1行1は、transferファイルのバージョンが1であることを示す.
2行目はnewコマンドが合計90270個のblockに書き込まれることを示す.
3行目は削除されたrangeが0から262144、2はrangeの区間記述数が2つの数値、すなわち0と262144であることを示す.
4行目はsystemから示す.new.datファイルにblockを読み出し、以下の14区間を順次書き込む:[0,32767],[322768,32770)...この区間のblock総数は、前述した90270個である.
このようなやり方は実際にはupdateを低減するために疎配列の区間記述である.zipファイルのサイズと書き込みデータ量.
添付ファイル1はLinuxの解析transferファイルでsystem.new.dat解包はext 4フォーマットsystemである.imgのバイナリ実行ファイルは、バージョン1のsystemを処理することができる.transfer.list.
ダウンロード先:http://download.csdn.net/detail/howellzhu/8267569
または、sdat 2 img、すなわちsparse data file to image fileを検索する.
添付ファイル2
Linuxの解析transferファイルでsystem.new.dat解包はext 4フォーマットsystemである.imgのバイナリ実行ファイルは、バージョン3のsystemを処理することができる.transfer.list.
ダウンロード先:http://download.csdn.net/download/howellzhu/9898281
添付資料3
Linuxの解析transferファイルでsystem.new.dat解包はext 4フォーマットsystemである.imgのバイナリ実行ファイルは、バージョン4のsystemを処理することができる.transfer.list.
ダウンロード先:http://download.csdn.net/download/howellzhu/9991187