ここでは長年UNIXをやっていますが、Androidの世界では比較的新しいです。読む。
エピソード1:新しいバックアップ(希望)
最近、Asus MemoPAD(ME103K)を購入しました。その後、ルートになりdd
、読み取り専用system
パーティションのイメージを外部SDカードに取り込みました。
$ su
# dd if=/dev/block/platform/msm_sdcc.1/by-name/system \
of=/storage/MicroSD/system.img bs=1M
# ls -l /storage/MicroSD/system.img
-rw-r--r-- 1 root root 2147483648 Sep 27 13:15 system.img
サイズ(正確には2GiB)は少し疑わしかった-これはSDカードのFAT32パーティションが原因だったのでしょうか?
いいえ、そうではありませんでした- tune2fs -l
これは実際に、正確に2GiBのサイズの有効なEXT4イメージであり、fsck -f
エラーなしで合格したことが明らかになりました。そしてfastboot
(タブレットに接続されたLinuxマシンから)同意した後、adb reboot bootloader
:
linuxbox# fastboot getvar all
(bootloader) version-bootloader: 3.03
(bootloader) version-hardware: rev_c
(bootloader) variant: LEOPARDCAT 16G
(bootloader) version-baseband: H00_0.16.F_0521
(bootloader) serialno: 0a3dXXXX
...
(bootloader) partition-type:system: ext4
(bootloader) partition-size:system: 0x0000000080000000
そのサイズは、実際には2GBです。
linuxbox# python2 -c 'print 0x0000000080000000'
2147483648
だから、すべてが良いです-私はイメージのバックアップを持っています。次に、復元をテストします。
system.imgをフラッシュしてタブレットに戻してみます。Unixの世界で行われている防弾バックアップのようなもの(たとえば、を介してドライブのコンテンツを復元dd if=backup.image of=/dev/sdXXX
するなど)から回復できるようにします。
すべてに関連adb
し、fastboot
完璧に仕事-私がしようとして...
linux_box# fastboot devices
0a3dXXXX fastboot
linux_box# mount /dev/sdcard /mnt/sdcard
linux_box# cp /mnt/sdcard/system.img .
linux_box# fastboot flash system system.img
error: cannot load 'system.img'
うーん。android-tools-5.1.1
ソースからディストリビューションをダウンロードしてビルドし、デバッグ情報を追加し、デバッガーにステップして、このエラーを確認します。
linuxbox# gdb --args fastboot flash system system.img
...
おもしろい-私は64ビットマシンにいるにもかかわらず、明らかにファイルサイズを「ネガティブ」にする問題があります(32ビットの世界では、画像のファイルサイズ2 ^ 31は実際にネガティブと見なされ-2147483648
ます)
OK、大丈夫-Androidで大きな画像ファイルをどのようにフラッシュしますか?
グーグル、検索- make_ext4fs
フラッシュ可能な画像を作成するこのツールを使用していることが判明しました。実際、それは私がちょうどコンパイルしたものの一部ですので、私はそれを使用することもできます:
linuxbox# mkdir /system
linuxbox# mount -o loop,ro system.img /system
linuxbox# ls -l /system
total 208
drwxr-xr-x 106 root root 8192 Sep 17 22:24 app
drwxr-xr-x 3 root 2000 8192 Sep 26 21:08 bin
-rw-r--r-- 1 root root 6847 Sep 12 16:59 build.prop
drwxr-xr-x 19 root root 4096 Sep 26 21:08 etc
drwxr-xr-x 2 root root 4096 Aug 11 22:27 fonts
drwxr-xr-x 4 root root 4096 Sep 12 16:56 framework
drwxr-xr-x 10 root root 16384 Sep 12 16:59 lib
drwxr-xr-x 2 root root 4096 Jan 1 1970 lost+found
drwxr-xr-x 3 root root 4096 Aug 11 22:18 media
drwxr-xr-x 59 root root 4096 Aug 11 22:29 priv-app
-rw-r--r-- 1 root root 126951 Aug 1 2008 recovery-from-boot.p
drwxr-xr-x 3 root root 4096 Aug 11 21:02 scripts
drwxr-xr-x 3 root root 4096 Aug 11 21:02 tts
drwxr-xr-x 11 root root 4096 Sep 26 21:08 usr
drwxr-xr-x 8 root 2000 4096 Aug 11 22:29 vendor
drwxr-xr-x 2 root 2000 4096 Sep 26 21:09 xbin
linuxbox# ../extras/source/extras/ext4_utils/make_ext4fs \
-l 2048M new_system.img /system
Creating filesystem with parameters:
Size: 2147483648
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 8192
Label:
Blocks: 524288
Block groups: 16
Reserved block group size: 127
Created filesystem with 2666/131072 inodes and 375014/524288 blocks
クール-だから、どうやら普通の古いフォルダからシステムイメージを構築できるようになりました。空は私の限界です-私はこの画像に好きなものを追加することができます。
燃やそう...
linuxbox# fastboot flash system new_system.img
erasing 'system'...
OKAY [ 0.064s]
sending 'system' (2088960 KB)...
^C
Ctrl-Cを押す前に1時間待機しました。また、タブレットの電源を入れ直し、fastbootモードで再起動する必要がありました。
これは見栄えがよくありません。
より小さなイメージを作成したらどうなりますか?おそらく2GBが問題であり、このパーティションは全容量まで使用されていない-空き容量があります:
linuxbox# ../extras/source/extras/ext4_utils/make_ext4fs \
-l 1536M new_system.img /system
linuxbox# ./fastboot flash system system.img
erasing 'system'...
OKAY [ 0.065s]
sending 'system' (1572864 KB)...
OKAY [ 51.039s]
writing 'system'...
OKAY [235.080s]
finished. total time: 286.183s
OK、これは非常に有望に見えます(5分しかかかりませんでした)。これで再起動できるようになり、すべてが正常になります。
番号 :-)
最終的にそれを制御することができる限り、一時的にブリックされたデバイスを気にしません(私がマスターではないマシンは、私が操作することを気にしないマシンです;-)
私が間違ったことや、これを修正するためにできることについてのアイデアはありますか?
前もって感謝します。
PSタブレットのAsusサポートページを確認しました。カーネルのソースとOver-the-air .zipファイルのみが提供されています。これには、ルートからのファイルシステムレベルのバックアップが含まれています。つまり、system
フォルダは、イメージではなく、system.img
フラッシュできるフォルダとしてのみ存在します。
エピソード2:カスタムブーツの攻撃
recovery.img
Asusのあらゆる種類の不在(なぜ、メーカーがfastboot-flashableを公開するのをわざわざするのrecovery.img
でしょうか?確かに...)と、CWMおよびTWRPサイトからのリカバリイメージに同様の不在があります...一人で。
ありがたいことに、AsusのOver-the-air更新ファイルにはその中に含まれています...
linuxbox# unzip -l /opt/Asus/firmware/UL-K01E-WW-12.16.1.12-user.zip |\
grep boot.img$
7368704 2011-03-22 11:21 boot.img
...タブレットのブートイメージ。多分-たぶん-これで何かできる。
linuxbox$ mkdir rootfs
linuxbox$ cd rootfs
linuxbox$ abootimg -x /path/to/boot.img
linuxbox$ ls -l
bootimg.cfg
initrd.img
zImage
RAMディスクを展開しています...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
私は、セットアップdefault.prop
時にカーネルが起動rootになります:
ro.secure=0
ro.debuggable=1
ro.adb.secure=0
androidboot.selinux=disabled
私もコピー/system/bin/sh
(空中Asusの.zipファイルからに)/sbin/sh
。busyboxでも同じことをしました -非常に便利なツールです。
そして、boot.imgを再パックしました...
busybox$ find . | cpio --create --format='newc' | gzip -9 > ../initrd.custom.gz
busybox$ cd ..
busybox$ abootimg --create ../new_boot_busybox.img \
-f bootimg.cfg -k zImage -r initrd.custom.gz
abootimg
bootimg.cfg
更新する必要があるため、これを最初に実行したときに実際に失敗しました- bootsize
パッケージが大きくなったため、パラメータを変更する必要がありました。abootimg
必要なものをレポートするので、それは十分簡単です。
そして今、カスタムイメージを起動します...
linuxbox# fastboot boot new_boot_busybox.img
...そして次のことを目撃します...
linuxbox# adb logcat
- exec '/system/bin/sh' failed: Permission denied (13) -
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
うーん...たぶんadbdはrootとして実行されていないのでしょうか?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
ファイン... adbdを16進編集し、/ system / bin / shを/ sbin / shにパッチします(OTAイメージからinitrdのrootfsに/ system / bin / shをコピーしました):再起動、高速起動...
linuxbox# adb shell
- exec '/sbin/sh' failed: Permission denied (13) -
くそー これで何かできるのでしょうか?
linuxbox# adb pull /proc/partitions
15 KB/s (1272 bytes in 0.079s)
それは...見てみましょう:
linuxbox# adb pull /proc/mounts
16 KB/s (1358 bytes in 0.079s)
linuxbox# grep system mounts
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
OK、それで/ system がマウントされます。中身を見ることができますか?
linuxbox# adb pull /system
remote object '/system' does not exist
何が...たぶん/ proc / kmsgに何が含まれているかを確認できます(「dmesg」が出力するもの)
linuxbox# adb pull /proc/kmsg
failed to copy '/proc/kmsg' to './kmsg': Operation not permitted
いや、私はそれをするためにルートになる必要があります。
linuxbox# adb push /sbin/sh /system/bin/sh
failed to copy '/sbin/sh' to '/system/bin/sh': Permission denied
そして、それも。
これは非常にパズルであることが判明しています...
fastboot
まだ動作しているにも関わらず(リクエストに正常に応答します)、したがってリカバリイメージを書き込むことができます。あなたが言及している「一般的な」ものはありますか?(b)電源をオフにし、電源ボタンを押して音量を下げても、リカバリイメージは表示されません-まだfastboot状態になります。Moの理由。実際、私は回復プロセスを見たことがありません(それを見ることに興味があります)
fastboot boot <FILE>.img
)、ストックZIPファイル全体をフラッシュできます。または、fastbootを使用してフラッシュできるストックROMファイルが(Web上に)存在するかどうかを確認します。
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
シェルスクリプトを2、3だけ示しています-見ていきますが、間違いなくrecovery.img
ありません)。グーグルも助けにならなかった-このタブレットの回復画像はどこにもありません... dd
回復パーティションと共有に何らかの親切な魂を待たなければならないと思いますか?