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 ...
sumber
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 tidakrecovery.img
ada di sana). Googling juga tidak membantu - tidak ada gambar pemulihan tablet ini di mana pun ... Tebak saya harus menunggu beberapa jenis jiwa untukdd
partisi pemulihan mereka dan berbagi?Jawaban:
Episode 3: Kembalinya Shell.
Jika saya pernah memiliki kesempatan untuk menyelesaikan ini, pertama-tama saya harus mencari tahu mengapa shell tidak berfungsi.
adbd
itu sendiri merespons, jadi itu dimulai pada sisi tablet - tetapi tidak dapat menjalankan shell, bahkan ketika saya hack-patched untuk memohon file (/sbin/sh
) yang saya sendiri ditempatkan di gambar boot - menjadi 100% yakin bahwa itu memiliki izin yang tepat dan dapat diakses darishell
akun (id = 2000) yangadbd
menggunakan.Yang tersisa hanya satu penjelasan - SELinux "kandang".
Jadi saya memeriksa bagaimana
adbd
memulai dari image boot sayainit.rc
:... dan mencoba perubahan yang jelas:
Saya dikemas ulang, dan untuk kepuasan saya, melihat ...
Saya akhirnya mendapat akses ke tablet - dari "di dalam".
Memeriksa mount / sistem, menjadi jelas bahwa proses flashing - meskipun
fastboot flash system ...
melaporkan bahwa semuanya OK - telah gagal secara spektakuler . Sungguh mengherankan bahwa partisi itu dipasang di tempat pertama.Itu menjelaskan mengapa tablet tidak bisa boot, dan memberi saya ide terakhir yang menyelesaikan masalah.
Saya perlu mem-boot tablet agar menggunakan salinan asli partisi sistem saya, tetapi pada titik ini, walaupun saya memiliki akses shell, saya tidak root - ( perubahan yang saya lakukan
default.prop
tampaknya diabaikan oleh kernel Asus - Saya harus mengkompilasi ulang segera ... ) jadi saya tidak bisa memasang sdcard eksternal dandd
salinan saya yang baik.Tetapi saya memang memiliki image boot saya sendiri - yang berarti saya dapat mengedit bagian
/fstab.qcom
dalamnya, dan melakukan ini:Baris asli yang memberi tahu tablet cara memasang / sistem
Hasil edit saya
... dan kembali ke kotak linux saya, saya
dd
mencadangkan cadangan asli dari partisi sistem tablet ke partisi ke-2 kartu SD eksternal saya - yang saya buatgparted
dengan persis 2GB.Itu berhasil - tablet boot dari kartu SD eksternal saya.
EDIT : Perjalanan berlanjut - Saya akhirnya menambal dan mengkompilasi kernel saya sendiri dan menjadi root .
sumber
fastboot boot ...
) dan/system
partisi ada di kartu SD, dapat disesuaikan dengan apa pun yang saya inginkan.Tampaknya Anda sudah menemukan semacam solusi untuk masalah Anda (ada banyak teks untuk dibaca di halaman ini), tetapi sepertinya ini mungkin bisa diselesaikan dengan lebih sederhana.
Di antara variabel-variabel ini, apakah tablet Anda mengembalikan
max-download-size
variabel? Jika demikian, itu mungkin telah memberikan peringatan, langsung, bahwa proses flashing mungkin memiliki beberapa masalah dengan gambar sebesar itu. Kode fastboot saat ini dibuat untuk mengatasi masalahmax-download-size
yang terlalu kecil, tapi saya sudah mengalami kesalahan yang sama bahkan ketika gambar lebih kecil dari apa yang bisa ditangani oleh perangkat, jadi sebenarnya intinya adalah jenis moot, saya kira.Jadi, bagaimanapun, tampaknya di sini, bahwa untuk alasan apa pun, Anda tidak dapat melakukan flash. Jika Anda dan saya benar, dan ini tentang ukuran (tablet Anda hanya memiliki 1 GB RAM, dan konon sebagian besar perangkat mencoba membaca seluruh gambar menjadi RAM sebelum mem-flash ), ini adalah tempat saya pikir penyesuaian penyesuaian hanya menambahkan
-S
opsi untuk fastboot mungkin telah memperbaiki flash Anda seperti untuk saya:Namun, sebaliknya, Anda mencoba memaksakan gambar 2 GB Anda ke ukuran yang (1) tidak memungkinkan untuk dimasukkan ke dalamnya dan (2) bukan ukuran partisi sistem perangkat Anda seharusnya.
Mengenai poin # 1, dalam pengalaman saya, saya tidak akan mengandalkan alat build Android rapuh untuk mengeluh jika Anda meminta mereka untuk melakukan sesuatu yang mereka akan gagal, dan mungkin saja mereka ada di sini.
Mengenai poin # 2, saya tidak percaya Anda tidak bisa melakukan itu; langkah tambahan akan diperlukan untuk menggunakan ukuran partisi sistem yang berbeda.
Dengan asumsi tablet mengharapkan Anda jarang file gambar, saya percaya perintah Anda ingin mencoba bukan
make_ext4fs -l 1536M new_system.img /system
itumake_ext4fs -l 2048M -s new_system.img /system
. Perintah yang disesuaikan akan membuat gambar yang mengembang ke ukuran yang benar, tetapi disimpan sementara dihapus dari kelebihan lemak seperti kantong besar data kosong: " file gambar jarang " (lihat halaman saya tautkan sebelumnya untuk info lebih lanjut tentang mereka; Saya tidak memiliki reputasi yang cukup di situs ini untuk mengulangi tautannya).Readme lama ini yang ditulis seseorang untuk koleksi alat harus membantu memahami bagaimana prosesnya.
Bersulang.
sumber
max-download-
output apa pun darigetvar
. (2) Saya akan mengingat-S
opsi di flashings masa depan saya - seperti itu, setelah saya boot, saya menjadi root (melalui kompilasi ulang kernel saya) dandd
-ed di atas partisi sistem yang lama, jadi apakah flashing dengan -S akan bekerja akan harus menunggu tes saya berikutnya (3) Saya memang mencoba dengan gambar jarang, mendapat hasil yang sama (yaitufastboot
melaporkan bahwa flashing itu OK, tetapi partisi sistem kacau).all
dapat diteruskan ke getvar - itu membantu). (2) Ohh, baiklah. Jika berhasil, beri tahu kami. (3) Aduh! Saya tidak memperhatikan itu. Ini banyak teks, maaf. Apakah itu disebutkan dalam posting Anda? (Apakah itu seperti perintah make_ext4fs yang saya sarankan, dengan-s
dan panjang penuh 2 GiB yang ditentukan?) Mungkin tablet tidak berurusan dengan file jarang.-s
ke make_ext4fs - fastboot melaporkan 'OK' untuk pembakaran, tetapi / sistem kacau. Teori saya adalah bahwa, seperti yang Anda katakan, apa pun yang lebih besar dari memori tablet (1GB) tidak akan berfungsi, dan memerlukan-S
opsi di fastboot untuk berfungsi dengan baik (yang menjelaskan keadaan setengah rusak - partisi dipasang karena bagian pertama dari gambar yang pas di memori dan benar-benar dibakar, memungkinkan untuk dipasang - tetapi file di dalamnya ... rusak secara acak, tergantung pada apakah sektor mereka dibakar atau tidak).Dengan Moto saya, GI membuat cadangan menggunakan dd seperti yang Anda lakukan. Saya perlu memulihkan partisi sistem saya beberapa hari yang lalu, jadi saya mem-boot TWRP (saya tidak mem-flash-nya, saya hanya mem-boot image ke RAM). Saya kemudian menggunakan adb untuk terhubung ketika TWRP berjalan dan saya hanya mendorong img yang saya buat dengan dd ke kartu SD saya dan kemudian menggunakan dd untuk menulis gambar ke partisi sistem.
Lihat video yang saya buat tentang ini di sini: https://youtu.be/BHCamV-sHx0?list=PLcUid3OP_4OVI1Rtuwxk1RjABh1PxXXQq
sumber
recovery.img
dari Asus, dan tidak ada CWM atau TWRP (untuk ME103K) juga.