Bir sistem yanıp sönmeye çalışıyorum. İmg dd ile aldım - başarısız


16

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 ddsalt okunur systembö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 -lgerçekte 2GiB'de tam olarak boyutlandırılmış, fsck -fhiç 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 adbve fastbootkusursuz ç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.1Bu 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
...

Negatif boyut nedeniyle hata!

İ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_ext4fsaracı 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 :-)

resim açıklamasını buraya girin

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 systemklasö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.imgAsus'un herhangi bir türünün recovery.imgyokluğ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

abootimgAslında bunu ilk kez çalıştırdığımda başarısız oldu, çünkü bootimg.cfggüncellenmesi gerekiyordu - bootsizepaket şimdi daha büyük olduğu için parametrenin değiştirilmesi gerekiyordu. abootimgneye 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 ...


2
Burada yapmadığınız (ve yapmanız gereken) tek iyi şey, özel bir Kurtarma flash ve sonra bölümleri bir nandroid yedek almaktır . Bu, bu tür tuğla durumdaki cihazları kurtarmak için kurşun geçirmez yöntemlerden biridir. Over-the-air.zip (OTA zip), kurtarma ile silinebilir bir fermuardır, yani Kurtarma'ya önyükleme yapıldığında yanıp söner ve farklı bir paketleme biçimini izlerler, ancak aynı hedefe ulaşırlar. Uzun öykü kısa, özel bir Kurtarma flaş (veya stok bir önyükleme), flaş stok ROM ve sonra istediğiniz kadar deneme.
Firelord

1
@ fastbootAteş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)
ttsiodras

1
Kurtarma moduna önyükleme yapmak için Power + Vol Up + Vol Down gibi diğer düğme kombinasyonlarını deneyin. Eğer stok Kurtarma ZIP erişim varsa, o zaman fastboot yanıp veya doğrudan içine ( 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.
Firelord

1
@Firelord: Hayır, Asus bir recovery.zip sağlamaz. OTA dosyasından, .img-y hiçbir şey yoktur ( unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recoverysadece birkaç kabuk komut dosyası gösterir - bir göz atacağım, ama kesinlikle recovery.imgorada yok). Googling de yardımcı olmadı - bu tabletin hiçbir yerde kurtarma görüntüsü yok ... Sanırım ddkurtarma bölümüne bir tür ruh beklemek ve paylaşmak zorunda mıyım?
ttsiodras

Yanıtlar:


7

Bölüm 3: Kabuğun Dönüşü.

Bunu çözme şansım olsaydı, önce kabuğun neden çalışmadığını bulmak zorundaydım. adbdkendisi yanıt veriyordu, bu yüzden tablet tarafında başlatıldı - ama /sbin/shönyükleme görüntüsüne kendim yerleştirdiğim bir dosyayı ( ) çağırmak için hack eklediğimde bile kabuğunu yürütemedi -% 100 olduğundan emin olmak uygun izinler ve erişilebilir shell(id = 2000) hesabındanadbd kullanan .

Hangi sadece bir açıklama bıraktı - SELinux "kafesleri".

Bu yüzden adbdönyükleme görüntümün nasıl başladığını kontrol ettim init.rc:

# adbd is controlled via property triggers in init.<platform>.usb.rc
service adbd /sbin/adbd --root_seclabel=u:r:su:s0
    class core
    socket adbd stream 660 system system
    disabled
    seclabel u:r:adbd:s0

... ve bariz bir değişiklik denedi:

service adbd /sbin/adbd
    class core
    socket adbd stream 660 system system

Yeniden paketledim ve yoğun memnuniyetime göre gördüm ...

linuxbox# adb shell
$ 

Sonunda tablete erişim sağladım - "içeriden".

Takılı / sistemi kontrol ederek, yanıp sönen sürecin - fastboot flash system ...her şeyin Tamam olduğunu bildirmesine rağmen - muhteşem bir şekilde başarısız olduğu anlaşıldı . Bölmenin ilk etapta monte edilmesi bir harikaydı.

Bu, tabletin neden önyükleme yapmadığını açıkladı ve sorunu çözen son fikri bana verdi.

Tableti / sistem bölümünün bozulmamış kopyasını kullanması için önyüklemem gerekiyordu, ancak bu noktada kabuk erişimim olmasına rağmen kök değildim - ( yaptığım değişiklikler default.propAsus çekirdeği tarafından göz ardı ediliyor - Yakında yeniden derlemem gerekecek ... ) bu yüzden harici sdcard'ı ve ddiyi kopyamın üzerine monte edemedim .

Ama kendi önyükleme görüntüm var mıydı - yani /fstab.qcomiçeride düzenleme yapabilir ve bunu yapabilirim:

Tablete nasıl monte edileceğini / sisteme bağlanacağını söyleyen orijinal hat

/dev/block/platform/msm_sdcc.1/by-name/system  /system  ext4 ro,barrier=1 wait

Benim düzenlemem

/dev/block/mmcblk1p2  /system ext4  rw,barrier=1 wait

... ve linux kutumda dd, tabletin sistem bölümünün bozulmamış yedeklemesini harici SD kartımın 2. bölümüne bölüştüm - gpartedtam olarak 2GB olacak şekilde oluşturdum .

Bunu yaptı - tablet harici SD kartımdan başlatıldı.

EDIT : Yolculuk devam etti - sonunda kendi çekirdeğimi yamaladım ve derledim ve kök oldum .


2
Bölüm 4'e yemin ederim, eğer tüm bu bölümlerden eğlence uğruna bu cevap gönderilmezse bir ödül teklif ederdim. Sorununuzu kendi başınıza çözdüğünüzü görmek güzel. : D
Firelord

2
@Firelord: Teşekkürler dostum. Bu süreçte bence oldukça havalı bir şey yaptım - tabletime içi dokunmadan önyükleme yaptım ... önyükleme görüntüsü dışarıdan (üstünden fastboot boot ...) geliyor ve /systembölüm SD kartta, istediğim gibi ayarlanabiliyor. Bir tür USB
çubuktan

4

Sorununuza zaten bir tür çözüm buldunuz (bu sayfada okunacak çok fazla metin var), ancak bu muhtemelen çok daha basit bir şekilde çözülmüş olabilir.

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 değişkenler arasında tabletiniz bir max-download-sizedeğişken döndürdü mü? Eğer öyleyse, bu yanıp sönen sürecin böylesine büyük bir görüntü ile ilgili bazı sorunları olabileceğine dair bir uyarı verebilir. Geçerli fastboot kodu max-download-sizeçok küçük bir etrafında çalışmak için yapılır , ancak görüntü aygıtın işleyebileceğini söylediğinden daha küçük olsa bile aynı hatayı yaşadım, bu yüzden aslında nokta biraz tartışmalı, sanırım.

linux_box# fastboot flash system system.img  
error: cannot load 'system.img'

Her neyse, öyle görünüyor ki, ne sebeple olursa olsun, yanıp sönemezsiniz. Siz ve ben haklıysanız ve boyutuyla ilgili ise (tabletinizde sadece 1 GB RAM var ve sözde çoğu cihaz yanıp sönmeden önce tüm görüntüyü RAM'e okumaya çalışıyor ), bu yüzden -Sseçeneği eklemenin sadece ayarlandığı yer fastboot'a flash'ınızı benim için olduğu gibi düzeltmiş olabilir:

fastboot -S 512M flash system system.img  

Bunun yerine, 2 GB'lık görüntünüzü (1) doldurulması mümkün olmayan bir boyuta zorlamaya çalıştığınız ve (2) cihazınızın sistem bölümünün olması gerektiği boyutta olmadığı anlaşılıyor.

  • Nokta # 1 ile ilgili olarak, deneyimlerime göre, başarısız olacakları bir şey yapmalarını istiyorsan şikayet etmek için kırılgan Android oluşturma araçlarına güvenmeyeceğim ve burada olabilirler.

  • 2. nokta ile ilgili olarak, sadece bunu yapamayacağınıza inanmıyorum; farklı bir sistem bölümü boyutu kullanmak için ek adımlar gerekir.

Tablet beklemektedir seyrek görüntü dosyaları varsayarsak, ben komutu yerine denemek istedim inanmak make_ext4fs -l 1536M new_system.img /systemoldu make_ext4fs -l 2048M -s new_system.img /system. Ayarlanan komut, doğru boyuta şişen bir görüntü oluşturur, ancak büyük miktarda boş veri cebi gibi fazla yağlardan geçici olarak arındırılır: bir " seyrek görüntü dosyası" (bunlar hakkında daha fazla bilgi için daha önce bağlandığım sayfaya bakın; Bu sitede bağlantıyı tekrarlamak için yeterli saygınlığım yok).

Birinin araçlar koleksiyonu için yazdığı bu eski benioku , sürecin nasıl gittiğini anlamaya yardımcı olmalıdır.

Şerefe.


1
Cevabın için teşekkür ederim. Sorularınıza gelince, (1) hayır, max-download-çıktıda hiçbir şey yoktu getvar. (2) -SGelecekteki yanıp sönmelerimdeki seçeneği aklımda tutacağım - olduğu gibi, önyükleme yaptığımda, kök oldum (çekirdeğimi yeniden derleyerek) ve dd-senin eski sistem bölümünü aştım, böylece -S ile yanıp sönme işe yarayacak mı? benim sonraki testleri beklemek zorunda (3) Ben seyrek görüntüleri ile denedim, aynı sonucu var (yani fastbootyanıp sönen Tamam olduğunu bildirdi, ama sistem bölümü berbat).
ttsiodras

1
@ttsiodras Sorun değil. Bu süreçte bazı şeyler öğrendim. (1) Ah, tamam. En azından yüklediğim allfastboot yapısını kullanan cihazımda olduğu gibi , bu değişkenin listede ilk önce yazdırıldığından şüphelendim (teşekkürler, btw, getvar'a aktarılabileceğini göstermek için - bu yararlıdır). (2) Ohh, tamam. Eğer işe yararsa bize bildirin. (3) Hata! Fark etmedim. Çok fazla metin, üzgünüm. Gönderilerinizde bu belirtildi mi? (Make_ext4fs ben, önerilen komuta gibi oldu -sBelki tablet ve tam 2 GiB uzunluğu belirtilen?) Değil seyrek dosyaları ile uğraşmak.
naki

1
(3) evet, -smake_ext4fs'e geçtim - fastboot yazmak için 'OK' bildirdi, ancak / system dağıldı. Benim teorim, dediğin gibi, tabletin hafızasından (1GB) daha büyük bir şeyin işe yaramayacağı ve -Sdüzgün çalışabilmesi için fastboot seçeneğine ihtiyaç duymasıydı (ki bu yarı kırık durumu açıklıyor - bölüm ilk bölümden dolayı monte edildi. görüntünün belleğe sığması ve yakılmasının yanı sıra monte edilmesine izin verdi - ancak içindeki dosyalar ... sektörlerinin yanmış olup olmamasına bağlı olarak rastgele bozuldu).
ttsiodras

2

Moto GI ile yaptığınız gibi dd kullanarak bir yedek oluşturdu. Geçen gün sistem bölümümü geri yüklemem gerekiyordu, bu yüzden TWRP'yi başlattım (flaş etmedim, görüntüyü RAM'e önyükledim). Daha sonra TWRP çalışırken bağlanmak için adb'yi kullandım ve dd ile yaptığım img'yi SD kartıma ittim ve daha sonra görüntüyü sistem bölümüne yazmak için dd'yi kullandım.

Bununla ilgili yaptığım videolara buradan göz atın: https://youtu.be/BHCamV-sHx0?list=PLcUid3OP_4OVI1Rtuwxk1RjABh1PxXXQq


Ne yazık ki bu bana yardımcı olmuyor - hangi tuş kombinasyonunu denediğimden bağımsız olarak tabletimin iyileşmesine ulaşamıyorum (bunun aksine, hemen MotoG2'ime aldım - bu yüzden bu tabletin kurtarılması bir şekilde barındırılıyor). Kurtarma bölümünü (flashboot işlevsel olduğu için) yanıp sönebilirim, ancak recovery.imgAsus'tan yok ve CWM veya TWRP yok (bir ME103K için).
ttsiodras
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.