Hướng dẫn compile kernel cho Zenfone 2 từ source code

Thảo luận trong 'Thay đổi, nâng cấp Firmware' bắt đầu bởi tinh_tang, 14/08/2015.

  1. Offline

    tinh_tang Active Member

    Số bài viết:
    75
    Đã được thích:
    0
    Bài viết này dành cho những bạn đam mê vọc vạch điện thoại , yêu thích Android và đang sở hữu một chiếc Zenfone 2. Bạn đã nghe nhiều đến “kernel” và cũng đang muốn mod kernel nhưng chưa biết bắt đầu từ đâu thì đây là hướng dẫn cách thức compile một kernel chi tiết và dể hiểu cho tất cả mọi người.

    Kernel là gì?

    Có thể hiểu là phần cốt lõi của hệ điều hành Android, nó là cầu nối liên lạc giữa phần cứng và phần mềm. Mỗi khi bạn thực hiện bất cứ một thao tác nào trên điện thoại của bạn đều phải thông qua kernel từ việc nhận biết ngón tay bạn đang chạm vào màn hình đến việc thực hiện một cuộc gọi thoại.

    Chính vì đảm nhiệm nhiệm vụ quan trọng trong hệ thống mà việc can thiệp (mod) vào kernel sẽ mang lại nhiều tính năng chuyên sâu hơn mà mod ROM có thể làm được. Một số tính năng hấp dẫn và “bá đạo” mà mod kernel đã mang lại cho zenfone 2:

    -Hỗ trợ cài đặt Windows 7.
    -Hỗ trợ port ROM CyanogenMod, SlimLP… lên Zenfone 2.
    -Tính năng chỉnh màu màn hình theo thông số RED,GREEN, BLUE.
    -Điều khiển hoạt động, xung nhịp CPU, GPU.
    -.....

    [IMG]

    Tuy nhiên trước khi nghĩ đến việc mod, thêm tính năng vào kernel bạn phải thành thạo trong việc compile kernel trước. Việc này sẽ có đôi chút khó khăn đối với một số bạn mới tiếp xúc, chưa có nhiều kiến thức trong việc vọc vạch hệ thống. Mong rằng bài viết cung cấp đủ thông tin để các bạn có thể thực hiện một cách dễ dàng.

    Làm thế nào để compile kernel Zenfone 2.

    Nói sơ qua về compile kernel. Khi nói đến việc compile một kernel chính là nói đến việc biên dịch source code (mã nguồn) gồm hàng chục ngàn file code thành một file duy nhất để hệ thống sử dụng. Một file kernel (boot.img) bao gồm các thành phần chính là zimage, ramdisk ,ngoài ra còn có các module hỗ trợ nằm trong /lib/module. Trong bài mình sẽ hướng dẫn các bạn biên dịch source code kernel thành zimage sau đó nén vào file boot.img và cuối cùng là flash vào Zenfone 2.

    Tải kernel source code cho zenfone 2 ở đâu?

    Có 2 nguồn source code bạn cần quan tâm đó là từ chính chủ ASUS và từ cộng đồng phát triển (dev)

    Nguồn 1: kernel stock ASUS.

    Để tải kernel source code chính chủ từ ASUS bạn truy cập vào link này: http://www.asus.com/Phones/ZenFone_2_ZE551ML/HelpDesk_Download/

    [IMG]
    ASUS đã release kernel source code Zenfone 2.

    Và thực hiện như hình hướng dẫn bên trên. Tất nhiên là bạn nên tải kernel mới nhất. Hiện tại, ngày viết bài này, ASUS đã release đủ các bản kernel từ 2.12 đến 2.19 tuy nhiên một số bản về sau như 2.19, 2.18 đều bị lỗi thiếu file nên các bạn tải cả bản 2.12 và bản mới nhất. Sau đó chép đè file từ 2.19 vào 2.12 để khắc phục lỗi.

    Nguồn 2: Kernel từ cộng đồng phát triển (dev).

    Nguồn thứ 2 mà mình muốn nhắc đến là từ các nhà phát triển (dev). Vì tính mở của Linux(Android) nên các nhà phát triển cá nhân không phải kiểu tự viết code rồi dấu nhẹm đi mà thường release lên một số trang web gọi là cộng đồng (hub). Các trang web này vừa là nơi lưu trữ source code cho các nhà phát triển, vừa là nơi chia sẻ cho mọi người cùng vào xem và có thể cùng góp phần phát triển một dự án nào đó.

    Github là website lưu trữ và chia sẻ, phát triển source code cực lớn cho các nhà phát triển.

    [IMG]
    Zenfone 2 đã bắt đầu có cộng đồng phát triển.

    Bước 1: Thiết lập môi trường Linux

    Việc đầu tiên nhất bạn cần làm là thiết lập một môi trường linux hoàn chỉnh. Bởi Android phát triển từ Linux nên có một hệ thống Linux sẽ tốt hơn rất nhiều so với việc làm việc trên windows hay mac os.

    Bạn có thể sử dụng bất kì một distro Linux nào nhưng mình khuyên là sử dụng Ubuntu vì nó có cộng đồng sử dụng lớn nhất hệ sinh thái Linux và cũng dễ sử dụng nhất, có bất kì vấn đề gì trong quá trình build kernel thì bạn có thể search trên google để tìm cách khắc phục. Hầu hết các dev mình biết đều sử dụng Ubuntu hoặc một bản phân phối của nó để phát triển.

    Bài hướng dẫn sử dụng Xubuntu, một bản phân phối cực nhẹ nhàng và ổn định của Ubuntu, nếu bạn không có nhu cầu nào khác có thể dùng luôn distro này cho tiện. Tất nhiên, như đã nói, bạn có thể sử dụng bất kì hệ điều hành nào khác miễn là Linux, tuy nhiên một số dòng lệnh sẽ có đôi chút khác với những gì mình sẽ hướng dẫn bên dưới, đòi hỏi bạn phải có chút kiến thức về hệ điều hành mình muốn sử dụng.

    Nếu bạn đã quen sử dụng và cũng đang cài đặt một distro Linux bất kì trên máy tính của mình thì hãy bỏ qua bước này.

    Tóm lại là mình sẽ setup một hệ thống thế này:
    HĐH: Xubuntu 64bit
    Ram >1GB
    Phân vùng ổ cứng >45GB
    Tên tài khoản “sal358” và password là “ “ (1 ký tự space để dễ thao tác)

    [IMG]
    Các thao tác bên dưới chỗ nào liên quan đến “sal358” thì thay bằng tên mà bạn thiết lập.

    Có 2 cách để vừa sử dụng Windows vừa có một hệ điều hành Linux để compile kernel:

    1- Cài đặt Xunbuntu song song với Windows: Cách này tận dụng được toàn bộ phần cứng máy tính, tối ưu nhất và hạn chế lỗi. Tuy nhiên khá bất tiện với những người chưa quen sài Linux nói chung và Ubuntu nói riêng.
    2- Cài đặt Xubuntu lên máy ảo trên Windows: Phần cứng máy tính dành cho Linux bị giới hạn tuy nhiên bạn có thể cùng lúc sử dụng windows thuận tiện hơn cho các bạn.

    Cách 1: Cài đặt Xunbuntu song song với Windows

    Có rất nhiều bài hướng dẫn trên mạng về vấn đề này rồi nên tốt nhất là các bạn search google mình sẽ không đề cập trong bài viết này đỡ dài dòng.

    Điểm qua một số bước mình đã làm:
    -Tải file iso Xubuntu 64bit trên trang chủ.
    -Dùng Unetbootin đưa file iso vào usb và tạo boot.
    -Boot usb, chia một phân vùng mới 60GB định dạng 4ext, một phân vùng 2GB làm swap.

    [IMG]
    Dual boot tận dụng được tối đa phần cứng máy tính.

    Cách 2: Cài đặt Xubuntu lên máy ảo trên Windows

    -Có 2 trình máy ảo mạnh mẽ trên windows là VMware và Vbox.
    -Cách này cũng có hướng dẫn đầy đủ trên mạng rồi nên mình không nhắc lại. Lưu ý nên để CPU execution cap lên cao tầm 80% đến 90% để tối ưu tốc độ xử lý trong Xubuntu.

    [IMG]
    Máy ảo Vbox thuận tiện thao tác cùng lúc Windows và Linux.
    Bước 2: Compile file zimage

    Cài đặt một số tập lệnh cơ bản:


    Sau khi cài đặt Xubuntu hoàn tất và boot vào hệ điều hành này đầu tiên bạn cần cài đặt một số tập lệnh cần thiết.

    Mở Terminal Emulator
    Thực hiện lần lượt các lệnh sau: (copy và paste lần lượt vào terminal)

    Cài đặt repo và tải bộ source code AOSP 5.0.

    Để compile được kernel cho Zenfone 2 bạn bắt buộc phải tải cả bộ source code của rom AOSP 5.0 (rom gốc từ Google) để làm nền, mình đã thử dùng toolchain để compile nhưng không thành công.

    Tương tự cách làm ở trên, bạn thực hiện lần lượt các lệnh sau để cài đặt repo, chương trình hỗ trợ tải (đồng bộ) source code từ Google:

    Để kiểm chứng repo cài đặt thành công hãy bật tính năng xem file ẩn.
    Sau đó xem trong thư mục “ker” nếu thấy thư mục .repo là cài đặt thành công.

    [IMG]
    Tải bộ source code AOSP 5.0.0_r7 bằng repo từ Google.

    Giải thích: Từ trên xuống dưới tạo một folder tên “ker” (hoặc tên gì bạn thích), nhảy vào folder này, gán đường dẫn tải android 5.0.0_r7 vào folder.

    [IMG]
    Có thông báo lỗi 404 là do server google không hỗ trợ clone.bundle không sao cả.


    Tiếp tục nhập tên và email để đăng ký, tên tùy ý, email phải có thực.

    Bắt đầu tải source code về:

    Lưu ý: 8 là bằng số nhân x số luồng của cpu.

    [IMG]
    Quá trình tải source code AOSP 5.0


    Bước này cực lâu các bạn chuẩn bị tinh thần nhé. Tùy vào cấu hình máy bạn và tốc độ mạng mà quá trình này sẽ nhanh hay chậm, sau khi tải và giải nén folder “ker” sẽ tăng dung lượng lên gần 37GB. Máy mình tốn gần 4 tiếng cho bước này.

    Folder “ker” xuất hiện thêm nhiều thư mục mới như thế này là tải về thành công.

    [IMG]
    Sau khi sync thành công.

    Cài đặt tool-chain và build module “minigzip”, “openssl”.

    Bước cuối cùng để chuẩn bị cho tiến trình compile đó là thiết lập công cụ biên dịch tool-chain và các module hỗ trợ minigzip, openssl.

    Tải checkout tool-chain 2.22 ở đây: https://goo.gl/WCd864

    Giải nén file checkout ở trên vào đường dẫn sau là xong việc thiết lập tool-chain:
    /ker/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8/

    Build module minigzip và openssl bằng các lệnh:

    [IMG]
    Hiện thông báo make completed successfully là build thành công module.

    Ở bước này nếu xuất hiện thông báo lỗi hãy thực hiện lệnh:

    Và làm lại từ source build/envsetup.sh …….

    Compile zimage và các file module.

    Khi đã build được minigzip và openssl là đã xong quá trình chuẩn bị, từ nay các bạn không cần thao tác lại các bước trên nữa. Mỗi lần chỉnh sử xong các source code chỉ cần thực hiện từ bước này trở xuống.

    Thực hiện lệnh sau trong terminal lần lượt compile zimage và các file module, đây là các file module dành cho hệ thống Android chứ không phải module hỗ trợ compile bên trên nhé.

    Lưu ý cần sửa đổi dòng lệnh trên một chút theo nhu cầu của bạn:

    TARGET_DEVICE=fhd cho bản ZE551ML
    TARGET_DEVICE=hd cho bản ZE550ML

    Compile xong bạn sẽ tìm thấy file bzimage trong đường dẫn:

    /ker/out/target/product/fhd/linux/kernel/arch/x86/boot – đối với ZE551ML
    /ker/out/target/product/hd/linux/kernel/arch/x86/boot – đối với ZE550ML

    [IMG]
    bzimage đã được compile xong.

    Bạn cần đổi tên bzimage thành zimage để thực hiện bước tiếp theo.

    Unpack và repack boot.img

    Như đã nói ở trên zimage chỉ là một phần của kernel, sau khi compile zimage thành công, công việc cuối cùng để build hoàn chỉnh một kernel là đưa file zimage này vào boot.img.

    Tải zenfone 2 boot tool tại đây: https://goo.gl/MwLVXU
    File boot.img 2.19 tại đây: https://goo.gl/OHb4sb

    Lưu ý mình đang thực hiện compile kernel stock(rom gốc ASUS) nên sử dụng file boot.img stock còn nếu bạn muốn compile kernel của hệ thống Rom CM, MIUI… phải sử dụng file boot.img của hệ thống đó.

    Thứ tự thực hiện như sau:

    1. Unpack file boot.img.

    Tạo một folder “boot-tool”.
    Copy file boot.img vào folder “boot-tool”.
    Chạy lệnh trong Terminal:

    Sau đó kéo file extract_boot thả vào terminal và Enter. Boot.img đã được unpack ra folder “boot”.

    [IMG]
    Folder boot được tạo.

    2. Thay thế file zimage gốc bằng zimage vừa compile xong.
    -File bzimage đổi tên thành zimage rồi copy paste vào folder “boot”

    3. Repack lại boot.img.
    -Tương tự dùng lệnh nhảy vào thư mục boot-tool trước:

    -Kéo file make_boot thả vào terminal và Enter
    -File boot.img được tạo và build kernel đã thành công.

    [IMG]
    Không có thông báo gì nhưng hiện như thế này là hoàn thành.

    Làm thế nào để đưa up kernel đã build vào zenfone 2

    Đầu tiên phải chắc chắn Zenfone 2 của bạn đã được unlock bootloader (màn hình khởi động màu trắng). Sau đó dùng fastboot hoặc recovery để flash file boot.img vào hệ thống. Cả 2 cách đều dùng windows để thực hiện.

    1.Sử dụng fastboot:
    -Copy file boot.img vào thư mục cài adb
    -Mở CMD ở thư mục cài adb, và thực hiện lệnh:

    -Khi Zenfone 2 đã vào bootloader thực hiện tiếp:

    -Flash thành công thì reboot lại máy:

    2.Flash qua recovery TWRP:
    -Copy file boot.img vào bộ nhớ trong của máy hoặc thẻ nhớ.
    -Vào recovery chọn chức năng Install:
    -Nhấn vào nút “Image…” như hình bên dưới và chọn file boot.img.

    [IMG]

    Cuối cùng là chọn “boot” và Swipe để flash.

    [IMG]


    Trên đây là hướng dẫn chi tiết tất cả những bước cần thực hiện để tự bạn có thể compile hoàn chỉnh một file kernel, việc đầu tiên bạn cần thành thạo để chuẩn bị cho chỉnh sửa kernel, mang những tính năng độc và lạ lên chiếc Zenfone 2 của mình. Mong rằng bài viết đủ chi tiết, đủ dể hiểu để tất cả các bạn có niềm đam mê, dù chưa có nhiều kiến thức và kinh nghiệm đều có thể làm được. Từ đó làm tiền đề cho các bạn phát triển cộng đồng Zenfone 2 lớn mạnh hơn. Chúc các bạn thành công.


Chia sẻ trang này