Orang UNIX lama di sini, tetapi relatif baru ke dunia Android. Baca terus.
EPISODE 1: Cadangan Baru (saya berharap)
Saya baru saja membeli Asus MemoPAD (ME103K); Saya kemudian menjadi root, dan mengambil dd
gambar dari system
partisi read-only ke kartu SD eksternal:
$ 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
Ukurannya (tepatnya 2GiB) agak mencurigakan - mungkinkah ini karena partisi FAT32 pada kartu SD?
Tidak, tidak - tune2fs -l
terungkap bahwa ini memang, gambar EXT4 yang valid, berukuran persis 2GiB, yang berlalu fsck -f
tanpa kesalahan sama sekali. Dan fastboot
(dari mesin linux yang terpasang pada tablet) menyetujui, setelah 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
Ukuran itu, memang 2GB:
linuxbox# python2 -c 'print 0x0000000080000000'
2147483648
Jadi, semuanya baik - saya punya cadangan gambar. Sekarang untuk menguji memulihkannya.
Saya mencoba mem-flash sistem. Img kembali ke tablet - untuk memastikan saya dapat pulih dari apa pun, jenis cadangan anti peluru yang kami lakukan di dunia Unix ( mis. Pulihkan isi drive melaluidd if=backup.image of=/dev/sdXXX
).
Segala sesuatu yang terkait adb
dan fastboot
bekerja dengan sempurna - jadi saya mencoba ...
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'
Hmm. Saya mengunduh dan membangun android-tools-5.1.1
distribusi saya dari sumber, menambahkan informasi debug - dan melangkah dalam debugger, untuk melihat kegagalan ini:
linuxbox# gdb --args fastboot flash system system.img
...
Menarik - walaupun saya berada di mesin 64bit, ternyata ada masalah yang mengubah ukuran file "negatif" (di dunia 32bit, ukuran file gambar saya, 2 ^ 31, memang dianggap negatif - tepatnya -2147483648
,.
OK, baik - bagaimana mereka mem-flash file gambar besar di Android?
Googling, cari - ternyata mereka menggunakan make_ext4fs
alat ini , yang menciptakan gambar yang dapat di-flash. Sebenarnya itu adalah bagian dari apa yang baru saja saya kompilasi, jadi saya sebaiknya menggunakannya:
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
Keren - jadi saya bisa membangun gambar sistem dari folder lama. Langit akan menjadi batas saya - saya akan dapat menambahkan apa pun yang saya inginkan ke gambar ini.
Ayo bakar saja ...
linuxbox# fastboot flash system new_system.img
erasing 'system'...
OKAY [ 0.064s]
sending 'system' (2088960 KB)...
^C
Saya menunggu 1 jam sebelum menekan Ctrl-C itu. Dan harus menghidupkan siklus tablet, yang melakukan boot kembali dalam mode fastboot.
Ini tidak terlihat bagus.
Bagaimana jika saya membuat gambar yang lebih kecil? Mungkin 2GB entah bagaimana merupakan masalah, dan partisi ini tidak digunakan untuk kapasitas penuh - ia memiliki ruang kosong:
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, ini terlihat sangat menjanjikan (dan hanya butuh 5 menit). Saya kira saya sekarang bisa reboot dan semuanya harus normal, ya?
Tidak :-)
Saya tidak keberatan perangkat sementara bata, selama saya tidak bisa mengontrolnya pada akhirnya (mesin yang saya bukan master, adalah mesin aku tidak peduli untuk beroperasi ;-)
Adakah ide tentang kesalahan saya dan apa yang dapat saya lakukan untuk memperbaikinya?
Terima kasih sebelumnya.
PS Saya memeriksa halaman dukungan Asus untuk tablet saya - mereka hanya menyediakan sumber untuk kernel, dan file .zip Over-the-air. Yang pada gilirannya berisi cadangan tingkat sistem file dari root - yaitu system
folder ada di sana hanya sebagai folder, bukan gambar, bukan system.img
yang bisa saya flash - sehingga tidak benar-benar membantu saya.
EPISODE 2: Serangan Boots Kustom
Dengan tidak adanya apapun recovery.img
dari Asus (mengapa produsen repot-repot menerbitkan fastboot-flashable recovery.img
? Mengapa memang ...) dan ketidakhadiran yang serupa pada gambar pemulihan dari situs CWM dan TWRP ... Saya dibiarkan berperang semua sendirian.
Untungnya, file pembaruan Over-the-air dari Asus termasuk di dalamnya ...
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
... gambar boot tablet saya. Sekarang mungkin - mungkin saja - saya bisa melakukan sesuatu dengan ini.
linuxbox$ mkdir rootfs
linuxbox$ cd rootfs
linuxbox$ abootimg -x /path/to/boot.img
linuxbox$ ls -l
bootimg.cfg
initrd.img
zImage
Memperluas ramdisk ...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
Saya mengatur default.prop
untuk menjadi root ketika kernel melakukan boot:
ro.secure=0
ro.debuggable=1
ro.adb.secure=0
androidboot.selinux=disabled
Saya juga menyalin /system/bin/sh
( dari file .zip Asus over-the-air ) ke /sbin/sh
. Saya melakukan hal yang sama dengan busybox - alat yang cukup berguna.
Dan mengemas ulang 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
sebenarnya gagal saat pertama kali saya menjalankan ini, karena bootimg.cfg
harus diperbarui - bootsize
parameternya harus diubah, karena paketnya lebih besar sekarang. abootimg
melaporkan apa yang dibutuhkan, jadi itu cukup mudah.
Dan sekarang, saya mem-boot gambar khusus saya ...
linuxbox# fastboot boot new_boot_busybox.img
... dan saksikan yang berikut ...
linuxbox# adb logcat
- exec '/system/bin/sh' failed: Permission denied (13) -
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Hmm ... Mungkin adbd tidak dijalankan sebagai root?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Baik ... Saya hexedit adbd, dan patch / system / bin / sh menjadi / sbin / sh (saya menyalin / system / bin / sh dari gambar OTA ke rootfs dari initrd): Reboot, fastboot ...
linuxbox# adb shell
- exec '/sbin/sh' failed: Permission denied (13) -
Menisik. Apakah hal ini dapat melakukan apa saja?
linuxbox# adb pull /proc/partitions
15 KB/s (1272 bytes in 0.079s)
Ini adalah ... mari kita lihat:
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, jadi / sistem sudah terpasang. Bisakah saya melihat apa yang ada di dalamnya?
linuxbox# adb pull /system
remote object '/system' does not exist
Apa ... Mungkin saya dapat memeriksa isi / proc / kmsg (apa yang akan dihasilkan "dmesg")
linuxbox# adb pull /proc/kmsg
failed to copy '/proc/kmsg' to './kmsg': Operation not permitted
Nah, saya harus menjadi root untuk melakukan itu.
linuxbox# adb push /sbin/sh /system/bin/sh
failed to copy '/sbin/sh' to '/system/bin/sh': Permission denied
Dan itu juga.
Ini ternyata menjadi teka-teki yang cukup ...
fastboot
masih operasional (menanggapi permintaan dengan baik) dan karena itu saya dapat membakar gambar pemulihan, (a) Saya mencari dan tidak menemukan gambar pemulihan CWM atau TWRP untuk ME103K - Saya tidak mengira ada "generik" yang Anda maksudkan, bukan? (B) Mematikan, menekan tombol power + volume turun tidak memunculkan gambar pemulihan - Saya masih saja bisa fastboot state. Mo tahu kenapa. Sebenarnya saya belum pernah melihat proses pemulihan (agak penasaran melihatnya) ...
fastboot boot <FILE>.img
), lalu mem- flash seluruh file ZIP stock. Atau, lihat apakah ada (di web) file-file stock ROM yang dapat di-flash menggunakan fastboot.
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
hanya menampilkan beberapa skrip shell - Saya akan melihat-lihat, tapi pasti tidak recovery.img
ada di sana). Googling juga tidak membantu - tidak ada gambar pemulihan tablet ini di mana pun ... Tebak saya harus menunggu beberapa jenis jiwa untuk dd
partisi pemulihan mereka dan berbagi?