Burada uzun zamandır UNIX adam, ancak Android dünyasında nispeten yeni. Okumaya devam etmek.
BÖLÜM 1: Yeni Bir Yedekleme (Umarım)
Son zamanlarda bir Asus MemoPAD (ME103K) satın aldım; Daha sonra root oldum ve harici SD karta dd
salt okunur system
bölümün bir görüntüsünü aldım :
$ 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
Boyut (tam olarak 2GiB) biraz şüpheliydi - bunun nedeni SD karttaki FAT32 bölümü olabilir mi?
Hayır, bunun tune2fs -l
gerçekte 2GiB'de tam olarak boyutlandırılmış, fsck -f
hiç hatasız olarak geçen geçerli bir EXT4 görüntüsü olduğu ortaya çıkmadı . Vefastboot
(tablete bağlı linux makinesinden) aşağıdakilerden sonra aynı fikirde 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
Bu boyut, gerçekten 2GB:
linuxbox# python2 -c 'print 0x0000000080000000'
2147483648
Yani, her şey yolunda - Resmin bir yedeği var. Şimdi geri yüklemeyi test etmek için.
Emin değilim (herhangi bir şey biz Unix dünyasında yapmak kurşun geçirmez yedekleme tür kurtarabilirsiniz yapmak - Ben tablete system.img geri flaş deneyin örneğin üzerinden bir sürücünün içeriğini geridd if=backup.image of=/dev/sdXXX
.
İle ilgili her şey adb
ve fastboot
kusursuz çalışıyor - bu yüzden deniyorum ...
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. android-tools-5.1.1
Bu hatayı görmek için dağıtımımı kaynaklardan indirip hata ayıklama bilgileri ekledim ve hata ayıklayıcıya adım attım:
linuxbox# gdb --args fastboot flash system system.img
...
İlginç - 64bit makinede olmama rağmen, görünüşe göre dosya boyutunu "negatif" (32bit dünyasında, resmimin dosya boyutu 2 ^ 31) gerçekten olumsuz olarak kabul eden - kesin olarak -2147483648
.
Tamam, iyi - Android'deki büyük görüntü dosyalarını nasıl flaş ediyorlar?
Google'da arama, arama - bu make_ext4fs
aracı kullandıkları anlaşılır , bu da flashable görüntüler oluşturur. Aslında bu sadece derlediğim bir parçasıdır, bu yüzden de kullanabilirsiniz:
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
Harika - görünüşe göre düz eski klasörlerden sistem görüntüleri oluşturabilirim. Gökyüzü benim sınırım olacak - bu görüntüye istediğim her şeyi ekleyebiliyorum.
Yakalım ...
linuxbox# fastboot flash system new_system.img
erasing 'system'...
OKAY [ 0.064s]
sending 'system' (2088960 KB)...
^C
O Ctrl-C'ye basmadan önce 1 saat bekledim. Ve fastboot modunda yeniden başlatılan tableti kapatıp açmak zorunda kaldı.
Bu iyi görünmüyor.
Daha küçük bir resim oluşturursam ne olur? Belki 2GB bir şekilde bir konudur ve bu bölüm tam kapasiteye kullanılmaz - boş alana sahiptir:
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
Tamam, bu çok umut verici görünüyor (ve sadece 5 dakika sürdü). Sanırım şimdi yeniden başlayabilirim ve her şey normal olmalı, değil mi?
Hayır :-)
Ben sürece ben gibi bir geçici tuğla cihazı umursamıyorum do ben ustası değilim ben çalışmasına umurumda değil makinelerdir ki (sonunda makineleri kontrol etmek olsun ;-)
Neyi yanlış yaptığım ve bunu düzeltmek için neler yapabileceğim hakkında bir fikrin var mı?
Şimdiden teşekkürler.
Not: Tabletim için Asus destek sayfasını kontrol ettim - sadece çekirdek ve Havadan .zip dosyası için kaynakları sağlıyorlar. Bu da kökten bir dosya sistemi düzeyinde yedekleme içeriyor - yani system
klasör orada sadece bir klasör olarak var, bir görüntü değil system.img
, yanıp sönebileceğim bir şey değil - bu yüzden bana gerçekten yardımcı olmuyor.
BÖLÜM 2: Özel Çizmelerin Saldırısı
recovery.img
Asus'un herhangi bir türünün recovery.img
yokluğunda (bir üretici neden bir fastboot-flashable yayınlamak için rahatsız ediyor ? Neden gerçekten ...) ve CWM ve TWRP sitelerinden kurtarma görüntülerinde benzer bir eksiklik var ... tek başına.
Neyse ki, Asus'un Havadan Güncelleme dosyası içinde bulunuyor ...
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
... tabletimin önyükleme görüntüsü. Şimdi belki - sadece belki - bununla bir şeyler yapabilirim.
linuxbox$ mkdir rootfs
linuxbox$ cd rootfs
linuxbox$ abootimg -x /path/to/boot.img
linuxbox$ ls -l
bootimg.cfg
initrd.img
zImage
Ramdisk genişletiliyor ...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
default.prop
Çekirdek açıldığında kök olacak şekilde ayarladım :
ro.secure=0
ro.debuggable=1
ro.adb.secure=0
androidboot.selinux=disabled
Ayrıca /system/bin/sh
( havadan Asus .zip dosyasından ) kopyaladım /sbin/sh
. Aynı şeyi busybox ile de yaptım - oldukça kullanışlı bir araç.
Ve boot.img'yi yeniden paketledim ...
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
Aslında bunu ilk kez çalıştırdığımda başarısız oldu, çünkü bootimg.cfg
güncellenmesi gerekiyordu - bootsize
paket şimdi daha büyük olduğu için parametrenin değiştirilmesi gerekiyordu. abootimg
neye ihtiyaç duyduğunu rapor eder, bu yüzden bu yeterince kolaydır.
Şimdi özel resmimi açıyorum ...
linuxbox# fastboot boot new_boot_busybox.img
... ve aşağıdakilere tanık olun ...
linuxbox# adb logcat
- exec '/system/bin/sh' failed: Permission denied (13) -
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
Hmm ... Belki de adbd kök olarak çalıştırılmaz?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
İyi ... Ben hexedit adbd, ve patch / system / bin / sh / sbin / sh olacak (/ system / bin / sh'yi OTA görüntüsünden initrd köklerine kopyaladım): Yeniden başlat, fastboot ...
linuxbox# adb shell
- exec '/sbin/sh' failed: Permission denied (13) -
Lanet. Bu şey herhangi bir şey yapabilir mi?
linuxbox# adb pull /proc/partitions
15 KB/s (1272 bytes in 0.079s)
Bu ... bir bakalım:
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
Tamam, / sistem olup monte edilir. İçinde ne olduğunu görebilir miyim?
linuxbox# adb pull /system
remote object '/system' does not exist
Ne ... Belki ne / proc / kmsg içeriyor kontrol edebilirsiniz (ne "dmesg" çıktı)
linuxbox# adb pull /proc/kmsg
failed to copy '/proc/kmsg' to './kmsg': Operation not permitted
Hayır, bunu yapmak için kök olmalıyım.
linuxbox# adb push /sbin/sh /system/bin/sh
failed to copy '/sbin/sh' to '/system/bin/sh': Permission denied
Ve bu da.
Bu oldukça bulmaca gibi görünüyor ...
fastboot
Ateşle bahsettiğiniz "jenerik" bir tane var mı? (b) Kapatmak, güç düğmesine + ses kısma düğmesine basmak kurtarma görüntüsünü getirmez - Hala hızlı açılış durumuna geçiyorum. Mo fikir neden. Aslında kurtarma sürecini hiç görmedim (görmek merak ediyorum)
fastboot boot <FILE>.img
), sonra tüm stok ZIP dosyasını flaş bir yerde stok Kurtarma görüntü dosyası olabilir . Alternatif olarak, fastboot kullanılarak yanıp sönebilen stok ROM dosyalarının (web üzerinde) olup olmadığına bakın.
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
sadece birkaç kabuk komut dosyası gösterir - bir göz atacağım, ama kesinlikle recovery.img
orada yok). Googling de yardımcı olmadı - bu tabletin hiçbir yerde kurtarma görüntüsü yok ... Sanırım dd
kurtarma bölümüne bir tür ruh beklemek ve paylaşmak zorunda mıyım?