Nhãn

20 tháng 2, 2013

674. HTC One X: Trích xuất, Biên tập và Repack kernel trong Windows (Anh - Việt)




FREE YOUR ANDROID/ADVANCED GUIDE -- 2011-11-16 13:17:47

boot.img là gì

1 trong số những câu hỏi phổ biến nhất của những người muốn bắt đầu hack/dev ROM Android là làm cách nào để unpack, edit và repack 1 file ảnh boot.img. file ảnh boot.img là 1 file nhỏ (ish) chứa 2 phần chính, kernel (bộ não của hệ thống Android) và ramdisk (1 bộ lõi các chỉ dẫn và các mã nhị phân để bắt đầu quá trình boot và quản lý các khía cạnh cơ bản của hệ thống, như các cổng kết nối, quản lý bộ nhớ và các dịch vụ khởi động). Nếu bạn muốn thay kernel cho ROM của bạn, hoặc nếu bạn muốn tạo các thay đổi cấp thấp cho cách thức ROM của bạn hoạt động (như việc biên tập các thiết lập owmemorykiller để khống chế sao đó bộ nhớ được trống trong hệ thống), thì bạn sẽ cần khả năng biên tập [edit] file boot.img của bạn.

Bước 1

Theo phương pháp này đầu tiên là cài Cygwin cái cho phép bạn dùng 1 số công cụ phát triển GNU [GNU Project] (cơ sở linux truyền thống). Theo hướng dẫn FYA [For Your Amusement - ý nói hướng dẫn trực quan] ở đây để cài Cygwin lên computer của bạn (vì yêu cầu của hướng dẫn này, bạn sẽ cần cài perl package cùng với Cygwin).


Bước 2: Download Script Package

Package zip này chứa 1 bộ script [mã lệnh] và mã nhị phân (khởi đầu được cung cấp bởi HomerSP sau đó được sửa đổi, do đó có thể giờ đã có phiên bản khác của các tập lệnh này, nhưng đây là cái tôi dùng) được xây dựng riêng [custom-built] để làm cho các công tác unpacking và re-packing boot.img của bạn trở nên rất dễ dàng. Giải nén file zip này vào 1 folder trong computer của bạn. Theo yêu cầu của hướng dẫn này, chúng ta sẽ coi như bạn đã giải nén package này vào: “c:\android\tools\scripts\bootimg-tools”.

Bước 3: Đặt boot.img của bạn vào folder tập lệnh

Trong hướng dẫn này, tôi sẽ không nói cụ thể việc trích xuất boot.img trực tiếp từ thiết bị của bạn, thay vào đó chúng ta sẽ coi như bạn đã làm việc này (thường có thể lấy được 1 cách dễ dàng từ 1 custom ROM .zip). Lấy boot.img của bạn đặt vào  “c:\android\tools\scripts\bootimg-tools” như ở phần trên.

Bước 4: Trích xuất boot.img!

Chạy Cygwin và điều hướng đến folder này dùng lệnh:
cd /cygdrive/c/android/tools/scripts/bootimg-tools


Giờ giải nén boot.img của bạn bằng cách chạy lệnh sau:
./extractboot boot.img


Nếu trông giống hình trên là việc trích xuất đã được làm đúng! Chú ý là chuỗi lệnh đó cũng đã được đọc từ file nguồn, điều này sẽ được sử dụng sau khi bạn chuẩn bị re-pack file của bạn.

Folder chứa tập lệnh giờ sẽ trông như thế này:


boot.img-kernel là blop [Binary Large Object - Là kiểu dữ liệu của một cột trong bảng RDBMS, có thể lưu ảnh lớn hoặc dữ liệu văn bảng như những thuộc tính] của kernel được biên dịch mà nằm bên trong boot.img nguồn, nếu bạn muốn thay kernel này bằng 1 ảnh kernel được biên dịch khác, bạn có thể thay file này bằng 1 cái khác (nhưng tên file phải giống nhau).

boot.img-ramdisk.gz là ảnh của ramdisk được gzip là cái đã được tách từ boot.img, bạn nên để yên file này.

Folder “out” chứa ramdisk trích xuất ra, và đây là nơi bạn nên thực hiện các thay đổi cho ramdisk.

Chú ý quan trọng!

Nhớ rằng, khi biên tập các file trong ramdisk trong Windows, như init.rc, Windows notepad sẽ không format đúng các file này, làm chúng hầu như không thể đọc, mà ngược lại Wordpad sẽ TRÔNG như nó đang format các file này đúng cách, nếu bạn save 1 trong số các file này từ ứng dụng Wordpad thì nó sẽ BREAK file đó và nó sẽ không còn khả năng được đọc chính xác bởi Android. Để biên tập các file này bạn PHẢI sử dụng 1 trình biên tập như Notepad++ bạn có thể download free ở đây.

Bước 5: Re-pack boot.img đã được biên tập của bạn

Hướng dẫn này sẽ không đè cập làm sao thay đổi các phần cụ thể của ramdisk, nhưng khi bạn đã tiến hành thay đổi cần thiết, thì giờ bạn đã sẵn sàng để re-pack các file bạn đã biên tập trở lại thành 1 boot.img mới. Từ Cygwin, chạy lệnh này:
./packboot


1 điều lưu ý là có bạn có thể dẫn các hướng dẫn khác, là trong quá trình pack file boot.img, thường bạn sẽ phải khai báo 1 địa chỉ cơ sở, và 1 dòng lệnh trong công cụ pack. Tập lệnh này đọc dòng lệnh và địa chỉ cơ sở hiện hành từ file boot.img mà khởi đầu bạn đã cung cấp tại thời gian repack, cho nên luôn đảm bảo bạn đã cho file boot.img nguồn ban đầu vào trong folder và đừng đổi tên nó sau khi trích xuất, file boot.img được tạo mới của bạn sẽ được đặt tên boot_new.img và sẽ KHÔNG ghi đè lên file gốc.

Đã xong! Nếu màn hình của bạn trông giống như hình ở trên, thì giờ bạn sẽ có 1 file boot_new.img vừa tạo mới, sẵn sàng được flash trong Android để test, bạn luôn có thể chỉ việc thay thế boot.img hiện thời trong file zip ROM yêu thích của bạn và flash nó bình thường để test, những cách flash boot.img cao cấp hơn sẽ phải đề cập trong 1 hướng dẫn khác!

Hãy post mọi câu hỏi, các hiệu chỉnh ... vào phần comment và tôi sẽ cố hiệu chỉnh bất kỳ cái gì ngớ ngẩn mà tôi có thể làm trong hướng dẫn này. Chúc thành công!

Thanks to newbe5 for this fantastic guide!

***

What is boot.img?
One of the most common questions asked by people who want to get in to Android ROM hacking/development is how to unpack, edit and repack a devices boot.img. The boot.img is a small (ish) file that contains 2 main parts, the kernel (the brain of the Android system) and the ramdisk (a core set of instructions and binaries that begins the boot process and controls base aspects of the system, such as mountpoints, memory management and startup services). If you want to replace the kernel on your ROM, or if you want to make low-level changes to the way your ROM works (like editing Androids lowmemorykiller settings to control how memory is freed up in the system) then you will need to be able to edit your boot.img file.

Step 1
The first thing required for this method is to install Cygwin which allows you to use some (traditionally linux-based) GNU development tools. Follow the FYA guide here to get Cygwin installed on your computer (for the purposes of this guide, you will need the perl package installed with Cygwin).

Step 2: Download the Script Package
This Zip package contains a set of Cygwin scripts and binaries (kindly originally provided by HomerSP and modified, there may be other versions of these scripts available, but these are the ones I use) custom-built to make the task of unpacking and re-packing your boot.img extremely easy. Unpack this zip file to a folder on your computer. For the purposes of this guide, we will assume you have extracted this package to: “c:\android\tools\scripts\bootimg-tools”

Step 3: Get your boot.img and Place it in the Script Folder
I will not cover extracting the boot.img directly from your device in this guide, instead we will assume you already have this (this can usually be easily obtained from a custom ROM’s update.zip installer package). Get your boot.img, and place it in the same folder as your extracted scripts.

Step 4: Extract the boot.img!
Launch Cygwin and navigate to this folder using this command:
cd /cygdrive/c/android/tools/scripts/bootimg-tools

Now, unpack your boot.img by running the following command:
./extractboot boot.img

If your output looks like this, then the extraction has worked correctly! Note that the Command Line string has also been read from the source file, this will be used later when you go to re-pack your file. 

Your script folder should now look like this:

boot.img-kernel is the compiled kernel blob that was inside the source boot.img, if you want to replace the kernel with another compiled kernel image, you can replace this file with another one (but leave the file name the same)

boot.img-ramdisk.gz is the gzipped ramdisk image which has been split from the boot.img, you should leave this file alone.

The “out” folder contains the EXTRACTED ramdisk, and this is where you should make your changes to the ramdisk.

Important Note!
Remember, when editing files in the ramdisk through Windows, such as init.rc, Windows notepad will not format the files correctly, making them almost impossible to read, wheras Wordpad will LOOK like it is formatting the files correctly, if you save one of these files from the Wordpad application it will BREAK the file and it will no longer be able to be read correctly by Android. To edit these files you MUST use an editor such as Notepad++ which you can download for free from here.

Step 5: Re-pack your Edited boot.img
This guide will not cover how to change specific parts of the ramdisk, but once you have made your required change, you are now ready to re-pack your edited files back in to a new boot.img.
From Cygwin, run this command:
./packboot

One thing to note that people may mention in other guides, is that when packing boot.img files, you will usually have to declare a base address, and a command line to the packaging tool. This set of scripts reads the existing command line and base address from the boot.img file you originally provided at the time of repacking, so always make sure you leave your original source boot.img file in the folder and do not re-name it after extraction, your newly created boot.img file will be named boot_new.img and will NOT overwrite the original.

Done! If your screen looks like the image above, then you should now have a freshly created boot_new.img file, ready to be flashed to Android for testing, you can always just replace the existing boot.img in your favourite ROM installer zip and flash it as normal to test, more advanced boot.img flashing methods will have to be covered in another guide!

Please leave any questions, corrections etc in the comments and I will try to repair anything stupid I might have done in this guide. Happy packing!

Thanks to newbe5 for this fantastic guide!

6 nhận xét:

  1. sao chủ thớt ko chỉ repack bằng soft này kernel_repacker_v1

    Trả lờiXóa
    Trả lời
    1. cách này cho các bạn hack/dev mod kernel -- mình chỉ là người dùng bình thường chủ yếu để tìm hiểu thêm :-)

      Xóa
    2. có nhìu cách repack 1 kernel online/offline miễn phí dễ dàng thôi -- mình dịch bài này chủ yếu để tìm hiểu repack là làm cái gì :-)

      Xóa
  2. Nhận xét này đã bị tác giả xóa.

    Trả lờiXóa
  3. Bạn cho mình sdt để tiện lien lạc vời

    Trả lờiXóa
    Trả lời
    1. so ri bạn, mình ko fải dân IT, thích tìm hiểu thì dịch thôi ==> so ri lần nữa =))

      Xóa