วิธีการแยก boot.img


15

ฉันกำลังพยายามดูเนื้อหาในboot.imgไฟล์จากภาพ Android

ฉัน googled และพบบทความนี้สารสกัดแต่มันไม่ทำงานสำหรับsystem.img boot.imgเมื่อพยายามทำสิ่งนี้boot.imgมันจะแสดงสิ่งต่อไปนี้:

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

จะถูกsimg2imgนำมาใช้เฉพาะสำหรับการสกัดsystem.img?

  1. ถ้าเป็นเช่นนั้นมีวิธีอื่นที่จะแยกboot.img?
  2. ถ้าไม่มีปัญหาในการไม่แตกไฟล์boot.imgคืออะไร

โปรดระบุการแจกจ่ายลินุกซ์ที่เฉพาะเจาะจงและรุ่นเคอร์เนล
mdpc

มีคำถามที่คล้ายกันในเว็บไซต์ Android.SE: วิธีแกะและแก้ไขboot.imgสำหรับการย้าย ROM?
WhiteWinterWolf

คำตอบ:


19

boot.img เป็นไฟล์ขนาดเล็ก (ish) ที่มีสองส่วนหลัก

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

แกะ boot.img:

มันมีขั้นตอนต่อไปนี้:

  1. ดาวน์โหลดเครื่องมือโดยใช้ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-serialport-api/android_bootimg_tools.tar.gz

  2. tar xvzf android_bootimg_tools.tar.gzสารสกัดจากไฟล์โดยใช้

    มันมีtwoไบนารี:

           * unpackbootimg
           * mkbootimg
    

3. จากนั้นดำเนินการ ./unpackbootimg -i <filename.img> -o <output_path>

It will contain,

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

เราสามารถแตก ramdisk ได้เช่นกันโดยใช้คำสั่งต่อไปนี้

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

หลังจากเปลี่ยนไฟล์เราสามารถแพ็คไฟล์เหล่านั้นอีกครั้งเป็น boot.img โดยใช้ mkbootimg

มีความสุข!


1
ฉันได้รับข้อผิดพลาดที่ขั้นตอนที่สามช่วยกรุณาฉัน ... มินัลกล่าวว่าคำสั่ง unpackbootimg ไม่พบ
ราหุล Matte

1
รับข้อผิดพลาดเดียวกันสำหรับขั้นตอนที่ 3 ใน Mint 17 ที่นี่ พยายามเรียกใช้พวกเขาโดย sudo และหลังจาก chmod 755 ไม่มีประโยชน์
Nisse

ในขั้นตอนที่ 3 ตรวจสอบให้แน่ใจว่าoutput_pathมีอยู่แล้วมิฉะนั้นunpackbootimgจะ segfault
Aldaviva

2
ลิงก์สำหรับเครื่องมือนั้นตาย
Addison Crump

1
แก้ไขสำหรับ: "ไม่พบคำสั่ง unpackbootimg" คุณกำลังเรียกใช้ไบนารี 32 บิตบนเครื่อง 64 บิตโดยไม่มีการอ้างอิง 32 บิต ติดตั้งด้วย "apt-get install gcc-multilib"
2560

6

boot.imgsystem.imgไม่ได้เป็นภาพระบบแฟ้มบีบอัดเช่น มันถูกอ่านโดย bootloader และมีเพียงเล็กน้อยกว่าภาพเคอร์เนลและภาพ ramdisk

การกระจายแบบไบนารีบางส่วนจะจัดส่งอิมเมจเคอร์เนลและ ramdisk แยกต่างหาก ในกรณีที่คุณไม่จำเป็นต้องทำอะไรที่มีเพียงงอกใหม่ด้วยboot.imgmkbootimg

หากคุณต้องการดึงข้อมูลจาก a boot.imgลองsplit_bootimg(โดยWilliam Enckผ่านวิกิ Android )


ลิงก์ไปยังใช้split_bootimgไม่ได้อีกต่อไป
นาธานออสมัน

@NathanOsman ถูกแทนที่ด้วยลิงก์ไปยังสำเนาบนหน้าของ William Enck
Gilles 'หยุดความชั่วร้าย'

4

ฉันใช้ opensuse ฉันติดตั้ง abootimg แล้ว หากคุณต้องการแยก (boot | recovery) .img ให้รันเช่น:

abootimg -x (boot|recovery).img

จากนั้นคุณจะได้รับไฟล์ถัดไป: bootimg.cgf, zImage และ initrd.img หากคุณต้องการแพ็คภาพที่คุณเรียกใช้เช่น

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

จากนั้นคุณจะได้รับ (boot | recovery) .img

สนุก


1

คุณสามารถใช้เครื่องมือต่อไปนี้เพื่อแตกไฟล์อิมเมจสำหรับบูต Android ใหม่

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

คัดลอก boot.img ของคุณไปยังที่เก็บ git ที่โคลน วิ่ง:

$ ./gradlew unpack

การรันครั้งแรกจะต้องดาวน์โหลด libs ที่จำเป็นจากอินเทอร์เน็ต คุณสามารถรับเนื้อหาได้ที่ "build / unzip_boot /" เช่นนี้

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

นี่คือคำตอบเนื่องจากรหัสและโครงการนี้เป็นปัจจุบันและได้รับการปรับปรุง
Gabriel Fair
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.