Skocz do zawartości
morfikov

Na jakiej zasadzie działa ADB Sideload?

    Rekomendowane odpowiedzi

    Próbowałem właśnie sobie nieco inaczej przepartycjonować flash w moim smartfonie, bo ten domyślnie ma przeznaczone 4 GiB na partycję /system/. Stock'owy ROM mieści się zaś mniej więcej na połowie tej przestrzeni. Chciałem zatem sobie wykroić z 1,5 GiB zostawiając tym samym 2,5 GiB na partycję /system/ , a resztę wrzucić na partycję /data/ . Cały proces przeszedł bez większego problemu i partycje w końcu miały optymalny rozmiar.

    Podczas wgrywania systemu via ADB sideload (z pliku update.zip) via TWRP recovery, z jakiegoś powodu zabrakło wolnego miejsca, chyba na partycji /system/ , nie jestem pewien. Poniżej jest log z TWRP:

    sideload-host file size 993462838 block size 65536
    Installing zip file '/sideload/package.zip'
    I:Update binary zip
    I:Zip contains SELinux file_contexts file in its root. Extracting to /file_contexts
    I:Legacy property environment initialized.
    
    ====== Updater-Script:
    getprop("ro.product.device") == "C5" || abort("This package is for \"C5\" devices; this is a \"" + getprop("ro.product.device") + "\".");
    show_progress(0.750000, 0);
    ui_print("Patching system image unconditionally...");
    block_image_update("system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");
    show_progress(0.050000, 5);
    assert(package_extract_file("boot.img", "/tmp/boot.img"),
           write_raw_image("/tmp/boot.img", "bootimg"),
           delete("/tmp/boot.img"));
    assert(package_extract_file("mobicore.bin", "/tmp/tee1.img"),
           write_raw_image("/tmp/tee1.img", "tee1"),
           delete("/tmp/tee1.img"));
    show_progress(0.200000, 10);
    apply_sig(package_extract_file("sig/boot.sig"), "bootimg");
    
    Patching system image unconditionally...
    blockimg version is 2
      erasing 1048576 blocks
        blkdiscard failed: Invalid argument
      writing 521761 blocks of new data
    
    ioctl(): blank: Invalid argument
    write failed: No space left on device
    lseek64 failed: Invalid argument
    Updater process ended with ERROR: 1
    I:Legacy property environment disabled.
    I:Install took 274 second(s).
    I:Signaling child sideload process to exit.
    I:Waiting for child sideload process to exit.
    sideload_host finished

    No i takie pytanie się nasuwa: dlaczego mu zabrakło miejsca? Czy on ten plik update.zip jest kopiowany na flash i do tego na partycję /system/ ? To by było dziwne.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    maxprzemo
    6 godzin temu, morfikov napisał:

    Patching system image unconditionally... blockimg version is 2 erasing 1048576 blocks blkdiscard failed: Invalid argument writing 521761 blocks of new data

    Masz typową paczkę .zip z ROMem. Nie ma w niej obrazu systemu .img tylko wymyślony przez google blokowy obraz partycji system.new.dat a jego wgrywanie odbywa się przez wartości w pliku system.transfer.list gdzie pierwszymi komendami są erase czyli kasowanie poszczególnych bloków partycji i u ciebie to właśnie się wysypało. W pliku system.transfer.list masz podaną oryginalną wielkość partycji dlatego proces kasowania się nie udał. 

     

    https://source.android.com/devices/tech/ota/block.html

     

     

    https://forum.xda-developers.com/android/software-hacking/how-to-conver-lollipop-dat-files-to-t2978952

     

    W tym wątku na xda są narzędzia do rozpakowywania i pakowania system.new.dat. Sam używałem kilka razy tego skryptu pythona do rozpakowywania ale nigdy nie pakowałem z powrotem.

    • Lubię to! 2

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Tak właśnie mi się coś wydawało, że on ma zakodowany ten rozmiar partycji. Coś  pomyślę. :D

    Edytowane przez morfikov

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    maxprzemo

    @morfikov

    Najprościej było by przerobić system.transfer.list bo to zwykły plik tekstowy. Tylko ja jego składni nie rozumiem więc ci nie pomogę.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    piskorfa

    @morfikov Musisz, jak to napisał maxprzemo przepakować zipa, żeby wgrywać na /system pojedyncze pliki. Główkowałem przy tym jakiś czas temu http://forum.android.com.pl/topic/264805-cm13-funkcja-block_image_update-w-skryptach-recovery-updater-script-i-wgranie-systemnewdat-na-pomniejszoną-partycję-system/

     

    • Lubię to! 2

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Myślę, że sobie poradzę z tym. :D 

    dodana zawartość

    Udało mi się doprowadzić smartfon do porządku ale mam w sumie jedno pytanie:

    Czy te aktualizacje z poziomu systemu (OTA Update) będą miały jakiś problem ze zmienionym flash'em? No i oczywiście nie da rady wgrać takiej paczki przez stock'owy tryb recovery? :D 

    dodana zawartość

    Wyszedł mi taki artykuł w sumie. Nie wiem ja k się zachowa taki nowy układ partycji podczas aktualizacji ale raczej nie powinno być problemów. :D 

    Edytowane przez morfikov
    • Lubię to! 2

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x