Làm thế nào để giải nén boot.img?


15

Tôi đang cố gắng xem nội dung trong một boot.imgtệp từ hình ảnh Android.

Tôi đã googled và tìm thấy bài viết này để trích xuất system.img, nhưng nó không hoạt động boot.img. Khi cố gắng làm điều này cho boot.img, nó hiển thị như sau:

Invalid sparse file format at header magi
Failed to read sparse file

Chỉ simg2imgđược sử dụng để giải nén system.img?

  1. Nếu vậy, có phương pháp nào khác để giải nén boot.imgkhông?
  2. Nếu không, vấn đề không giải nén là boot.imggì?

vui lòng xác định phân phối linux cụ thể và phiên bản kernel.
mdpc

Có một câu hỏi tương tự trên trang web Android.SE: Làm cách nào để giải nén và chỉnh sửa boot.imgđể chuyển ROM?
WhiteWinterWolf

Câu trả lời:


19

boot.img là một tệp nhỏ (ish) chứa hai phần chính.

          * kernel(important for android)
          * ramdisk( a core set of instruction & binaries)

Giải nén boot.img:

Nó chứa các bước sau:

  1. Tải xuống công cụ bằng cách sử dụng wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz

  2. Giải nén tập tin bằng cách sử dụng tar xvzf android_bootimg_tools.tar.gz.

    Nó chứa twonhị phân:

           * unpackbootimg
           * mkbootimg
    

3. Sau đó thực hiện ./unpackbootimg -i <filename.img> -o <output_path>

It will contain,

           * boot.img-zImage     ----> kernel
           * boot.img-ramdisk.gz ----> ramdisk

Chúng ta cũng có thể trích xuất ramdisk, sử dụng lệnh sau

gunzip -c boot.img-ramdisk.gz | cpio -i

Sau khi thay đổi các tệp, chúng ta lại có thể đóng gói các tệp đó dưới dạng boot.img bằng cách sử dụng mkbootimg

Chúc vui vẻ!


Tôi đang gặp lỗi ở bước thứ ba, xin hãy giúp tôi ... thiết bị đầu cuối nói rằng lệnh unpackbootimg không được tìm thấy
Rahul Matte

Nhận lỗi tương tự cho bước 3 trên Mint 17 tại đây. Đã thử chạy chúng bằng sudo và sau chmod 755 không có kết quả.
Nisse

Trong bước 3, đảm bảo output_pathđã tồn tại, nếu không unpackbootimgsẽ segfault.
Aldaviva

2
Liên kết cho công cụ đã chết.
Addison Crump

Chỉ cần sao chép mã từ github: github.com/osm0sis/mkbootimg
Albus Dumbledore

6

boot.imgkhông phải là một hình ảnh hệ thống tập tin nén như system.img. Nó được đọc bởi bộ nạp khởi động và chứa ít hơn một hình ảnh kernel và hình ảnh ramdisk.

Một số phân phối nhị phân gửi riêng các hình ảnh kernel và ramdisk. Trong trường hợp đó, bạn không cần phải làm gì với nó boot.img, chỉ cần tạo lại một cái mới với mkbootimg.

Nếu bạn cần trích xuất thông tin từ a boot.img, hãy thử split_bootimg(bởi William Enck , thông qua wiki Android ).


Liên kết đến split_bootimgkhông còn hiệu lực.
Nathan Osman

@NathanOsman Được thay thế bởi một liên kết đến bản sao trên trang của William Enck.
Gilles 'SO- ngừng trở nên xấu xa'

4

Tôi sử dụng openuse. Tôi đã cài đặt abootimg. Nếu bạn muốn giải nén (boot | recovery) .img hãy chạy như sau:

abootimg -x (boot|recovery).img

Sau đó, bạn nhận được các tệp tiếp theo: bootimg.cgf, zImage và initrd.img Nếu bạn muốn đóng gói hình ảnh bạn chạy như vậy

abootimg --create (boot|recovery).img -f bootimg.cfg -k zImage -r initrd.img

Sau đó, bạn sẽ nhận được (boot | recovery) .img

Thưởng thức


1

Bạn có thể sử dụng công cụ sau để trích xuất và đóng gói lại hình ảnh khởi động Android

$ git clone https://github.com/cfig/Android_boot_image_editor.git

sao chép boot.img của bạn vào kho git nhân bản. Chạy:

$ ./gradlew unpack

Lần chạy đầu tiên sẽ cần tải xuống libs cần thiết từ internet, hãy kiên nhẫn. Bạn có thể lấy nội dung tại "build / unzip_boot /", như thế này:

build/unzip_boot/
├── bootimg.json (boot image info)
├── kernel
├── second (2nd bootloader, if exists)
├── boot.img.avb.json (AVB only)
└── root

Đây là câu trả lời, vì mã và dự án này là hiện tại và được duy trì.
Hội chợ Gabriel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.