Cách xây dựng nhân Android trên Windows 10

Appual có một vài hướng dẫn tuyệt vời về phát triển Android, như Cách xây dựng ROM tùy chỉnh từ Dự án nguồn mở Android - nhưng những hướng dẫn này thường hướng đến môi trường xây dựng Linux thuần túy.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách xây dựng nhân Android trên Windows 10 - vâng, chúng tôi vẫn sẽ sử dụng môi trường xây dựng Linux, nhưng nó sẽ là một hệ thống con Linux trong Windows 10. Vì vậy, nếu bạn là Windows 10 Người dùng quan tâm đến việc phát triển cho Android, hãy làm theo hướng dẫn của chúng tôi một cách cẩn thận.

Trong hướng dẫn này, chúng tôi sẽ đặc biệt học cách xây dựng kernel cho các thiết bị ARM và MediaTek, thêm các tính năng và tổng quan cơ bản về việc sử dụng Git.

Yêu cầu

  • Windows 10 x64 (với bản cập nhật của Fall Creator)

Thiết lập môi trường Linux

  1. Trên Windows 10, đi tới Cài đặt> Cập nhật và bảo mật> Dành cho nhà phát triển> bật Chế độ nhà phát triển.
  2. Bây giờ, hãy vào Bảng điều khiển> Chương trình> Bật hoặc Tắt tính năng của Windows> bật Hệ thống con Windows cho Linux.
  3. Khởi động lại PC của bạn.
  4. Khởi chạy hệ thống con Linux và cho phép nó trải qua quá trình tải xuống. Đặt mật khẩu và không mất nó.
  5. Bây giờ hãy vào cửa hàng ứng dụng Windows và tải xuống Ubuntu.
  6. Khởi chạy Ubuntu trên máy tính để bàn Windows 10 và nó sẽ yêu cầu tên người dùng và mật khẩu.
  7. Trong Ubuntu, khởi chạy thiết bị đầu cuối gốc và gõ lệnh sau: apt-get update
  8. Điều này sẽ tiến hành cập nhật tất cả các repos cho các ứng dụng và phụ thuộc.
  9. Tiếp theo trong loại thiết bị đầu cuối: sudo apt-get install -y build-Essential kernel-gói libncurses5-dev bzip2
  10. Để kiểm tra xem tất cả các phụ thuộc đã được cài đặt đúng chưa, hãy nhập 'gcc' trong thiết bị đầu cuối (không có dấu ngoặc kép).
  11. Nếu đã cài đặt gvvvvvvvvv, bạn sẽ thấy tập tin gcc: lỗi nghiêm trọng: không có tập tin đầu vào
  12. Bây giờ bạn có thể nhập 'make' trong thiết bị đầu cuối. Nếu đã thực hiện cài đặt trên hệ thống, thì bạn sẽ thấy, Make make: *** không có mục tiêu nào được chỉ định và không tìm thấy tệp thực hiện. dừng lại."
  13. Kiểu tiếp theo 'git' và iff trực git đã được cài đặt, bạn sẽ thấy một loạt các lệnh git cơ bản.
  14. Bây giờ chúng tôi cần một số công cụ (có một số loại, bao gồm GCC, Linaro và một số loại tùy chỉnh). Một số thiết bị có thể yêu cầu các bộ công cụ khác nhau, ví dụ, không phải tất cả các hạt nhân thiết bị sẽ khởi động hoặc biên dịch với GCC.

Dành cho thiết bị ARM

Chúng tôi sẽ sử dụng GCC 4.7 cho việc này.

  1. Mở terminal Linux và gõ: kernel mkdir
  2. Bây giờ gõ: cd kernel
  3. (nó không phải là 'kernel', đây là vì đơn giản, bạn có thể đặt tên cho nó theo bất cứ điều gì bạn muốn.)
  4. Bây giờ hãy nhập: git clone //android.googlesource.com/pl platform / prebuilts / gcc / linux-x86 / arm / ar-eabi-4, 7

Dành cho thiết bị ARM 64

Bạn cần một trình biên dịch kernel 64 bit cho các thiết bị ARM 64, ví dụ aarch64.

Lấy tập tin nguồn cho thiết bị của bạn

Đây là một phần khó khăn, vì bạn cần tìm một repo GitHub lưu trữ nguồn kernel của bạn. Tất nhiên bạn sẽ cần tìm kiếm nó, rất có thể nó có thể được tìm thấy trên các diễn đàn XDA.

Dưới đây là một ví dụ về nguồn nhân Git.

Ở phía trên bên trái, bạn sẽ thấy Chi nhánh: Hoàn thành bởi xxxx.

Có nhiều phiên bản khác nhau của kernel / dự án, thường được phân tách bằng cách dùng thử Thử nghiệm, Chế độ Beta Beta, Phiên bản phát hành cuối cùng, v.v.

Các thư mục kernel thường như sau:

  • / arch / arm / configs : Phần này chứa các tệp cấu hình khác nhau cho thiết bị, chẳng hạn như thống đốc, v.v.
  • / output / arch / arm / boot / : Đây là nơi lưu trữ zimage.
  • build.sh : Một tập lệnh sẽ đơn giản hóa quá trình xây dựng.
  • /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2 : Đây thường là một chuỗi công cụ được đặt trong nguồn kernel, do đó giúp tìm kiếm dễ dàng hơn.

Bạn sẽ cần phải tải về nguồn kernel của mình.

Mở thiết bị đầu cuối Linux và đảm bảo rằng bạn đang ở trong thư mục kernel mà bạn đã tạo trước đó (kernel cd).

Sau đó nhập vào thiết bị đầu cuối: URL git clone URL của hạt nhân github tên -b tên của nhánh nhánh

Ví dụ: Quảng cáo git clone //github.com/atxoxx/android_ke Chuyệnamsung_msm8974 -b xenomTW Riên

Xây dựng hạt nhân

Để dễ dàng hơn, bạn có thể điều hướng đến vị trí trong trình duyệt tệp. Nó phải là / home / user ID / kernel (hoặc bất cứ thứ gì bạn đặt tên cho thư mục kernel).

Bạn sẽ thấy hai thư mục bên trong, cho toolchain và nguồn kernel. Đi vào bên trong thư mục nguồn kernel.

Dành cho thiết bị ARM

Trong một thiết bị đầu cuối, nhập các lệnh sau:

 #! / bin / bash export ARCH = arm export CROSS_COMPILE = mkdir output make -C $ (pwd) O = output "tên của defconfig và biến thể nếu cần" make -j4 -C $ (pwd) O = output 

Dưới đây là tổng quan về những gì các lệnh này làm, để làm cho điều này dễ dàng hơn trong tương lai.

  • #! / bin / bash: Yêu cầu tập lệnh chạy trong lệnh shell
  • export ARCH = arm: Xác định loại kiến ​​trúc kernel nào (Ví dụ arm64, v.v.)
  • export CROSS_COMPILE = : Xác định vị trí của chuỗi công cụ. Nó phải phù hợp với đường dẫn chính xác và dấu gạch ngang cuối cùng là thực sự bắt buộc.
  • mkdir output: Điều này tạo ra một thư mục để lưu zimage đã biên dịch
  • make -C $ (pwd) O = output : Xác định defconfig để biên dịch kernel.
  • make -j4 -C $ (pwd) O = output : Khi quá trình xây dựng bắt đầu, -j # sẽ cho nó biết cách thử và biên dịch nhanh như thế nào. Thông thường, bạn đặt số này theo CPU của bạn. Chẳng hạn, cài đặt -j32 trên CPU ngân sách, có thể sẽ gây mất ổn định lớn.
  • cp output / arch / arm / boot / Image $ (pwd) / arch / arm / boot / zImage : Đây là để di chuyển hình ảnh sang đường dẫn thứ hai.

Một vi dụ khac:

 #! / bin / bash export ARCH = arm export CROSS_COMPILE = $ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi- mkdir output -C (pwd) I 

Dành cho thiết bị ARM 64

 #! / bin / bash export ARCH = arm64 export CROSS_COMPILE = "đường dẫn đến chuỗi công cụ của bạn" (nó phải kết thúc bằng một cái gì đó như "nameofarch-Something-") mkdir output make -C $ (pwd) O = output "tên của defconfig và biến thể nếu cần "make -j4 -C $ (pwd) O = output 

Dành cho thiết bị Mediatek (MTK)

 #! / bin / bash export CROSS_COMPILE = "đường dẫn đến chuỗi công cụ của bạn" (nó phải kết thúc bằng một cái gì đó như "nameofarch-Something-") xuất ARCH = arm ARCH_MTK_PLATFORM = tạo "tên của defconfig và biến thể nếu cần" make -j4 

Khi bạn đã hoàn thành các bước cần thiết cho kiến ​​trúc kernel của mình, bạn có thể nhập vào terminal: sudo bash build.sh

Sau đó, bạn sẽ nhập mật khẩu người dùng và quá trình biên dịch sẽ bắt đầu.

Có thể mất một lúc nhưng thường không lâu lắm, việc biên dịch kernel không giống như biên dịch toàn bộ ROM Android. Điều này thực sự phụ thuộc vào CPU - ví dụ, AMD Phenom X4 3, 4GHz với 8GB RAM sẽ mất khoảng 10 phút để biên dịch từ đầu đến cuối.

Khi kết thúc, nó sẽ thông báo cho bạn bằng một thông báo như zimage đã sẵn sàng.

Thiết bị ARM và ARM64

Truy cập vào ứng dụng / đầu ra / vòm / cánh tay / khởi động / khóa để tìm zimage của bạn.

Thiết bị Mediatek

Truy cập vào ứng dụng / vòm / cánh tay / khởi động / khóa để tìm zimage của bạn.

Không phải tất cả các bản dựng kernel sẽ dẫn đến một tệp Zimage, đôi khi nó có thể được xây dựng như các định dạng hình ảnh khác.

Quan trọng: Nếu bạn định biên dịch lại, bạn nên nhập các lệnh làm sạch và tạo mrproper trước khi bạn bắt đầu lại quá trình biên dịch.

Tạo Kernel Boot

Có hai lựa chọn để bạn lựa chọn.

Bạn có thể sử dụng phương thức anykernel (như được xác định bởi người dùng XDA @ osm0sis trong luồng XDA này). Bạn nên đọc toàn bộ hướng dẫn, nhưng tóm tắt các bước như sau:

  1. Đặt zImage trong thư mục gốc (dtb và / hoặc dtbo cũng nên vào đây cho các thiết bị yêu cầu tùy chỉnh, mỗi thiết bị sẽ chuyển về bản gốc nếu không bao gồm)
  2. Đặt bất kỳ tệp ramdisk cần thiết nào trong / ramdisk và mô-đun trong / mô-đun (với đường dẫn đầy đủ như / mô-đun / hệ thống / lib / mô-đun)
  3. Đặt bất kỳ tệp vá yêu cầu nào (thường là một phần tệp đi kèm với lệnh) trong / patch
  4. Sửa đổi anykernel.sh để thêm tên kernel, vị trí phân vùng khởi động, quyền cho các tệp ramdisk được bao gồm và sử dụng các phương thức cho bất kỳ sửa đổi ramdisk nào được yêu cầu (tùy chọn, cũng đặt các tệp banner và / hoặc phiên bản trong thư mục gốc để hiển thị các tệp này trong flash)
  5. `zip -r9 CẬP NHẬT -AnyKernel2.zip * -x .git README.md * giữ chỗ`

Phương pháp khác bạn có sẵn là giải nén boot.img từ cùng một ROM (như CM, TouchWiz, EMUI, v.v.) và cùng một phiên bản Android. Sau đó, bạn sẽ trao đổi Zimage. Một lần nữa, đây là một quá trình thực sự phức tạp và bạn nên đọc hướng dẫn chính xác, nhưng tóm tắt các bước là:

  1. Giải nén.
  2. Hoặc sử dụng dòng lệnh unpackimg, hoặc chỉ cần kéo và thả hình ảnh. Điều này sẽ phân chia hình ảnh và giải nén ramdisk sang thư mục con.
  3. Thay đổi ramdisk như bạn muốn.
  4. Tập lệnh bó repackimg không yêu cầu nhập liệu và chỉ cần kết hợp lại zImage đã phân tách trước đó với ramdisk được sửa đổi mới được đóng gói bằng cách sử dụng tất cả thông tin hình ảnh gốc (cũng được phân tách và lưu).
  5. Tập lệnh bó dọn dẹp đặt lại thư mục về trạng thái ban đầu, loại bỏ các thư mục split_img + ramdisk và bất kỳ tệp ramdisk hoặc hình ảnh đóng gói mới nào.

Trước khi flash kernel, bạn nên tạo một bản sao lưu stock stock.img và sau đó flash kernel của bạn để xem nó có cho phép hệ thống Android của bạn khởi động hay không.

Thêm các tính năng cho kernel của bạn

Thêm các tính năng vào kernel của bạn là một cách tuyệt vời để thêm gia vị. Có rất nhiều thứ bạn có thể điều chỉnh, chẳng hạn như bộ điều khiển CPU, bộ lập lịch IO, ép xung GPU, cải tiến âm thanh, v.v.

Một ví dụ để thêm một thống đốc là ở đây (thống đốc này có tên mã là Intellimm).

Chúng ta có thể thấy trong 2 hộp văn bản đầu tiên, trong vòm arch / arm / configs / mật Thời gian msm8974_sec_defconfig và và cm_msm8974_sec_defconfig tựa đã được sửa đổi.

Giữa các dòng 140 và 141 của tệp này, văn bản này đã được thêm vào: BẠC CONFIG_CPU_FREQ_GOV_INTELLIMM = y phạm

(Dòng này là để bật Intellimm khi bạn biên dịch kernel của mình)

Kỹ thuật tương tự áp dụng cho các hộp văn bản khác (những gì đã được thêm và xóa và vị trí của nó)

Tùy thuộc vào các tính năng bạn thêm, nhiều hay ít tệp có thể được sửa đổi, thêm hoặc xóa.

Vì vậy, để tóm tắt, một Cam kết cho phép bạn xem tất cả các thay đổi đã được thực hiện và mọi thứ khác!

Mẹo và thủ thuật chung

Cách thay đổi tên và phiên bản kernel:

Phương pháp đơn giản:

Chỉnh sửa dòng này trong tệp defconfig của bạn:

 "CONFIG_LOCALVERSION =" - "sau - trong defconfig của bạn 

Ví dụ: CONFIG_LOCALVERSION = Hay - XenomTW-3.2.6

Các phương pháp nâng cao:

Điều hướng đến Makefile trong thư mục gốc của nguồn kernel của bạn.

Thêm các dòng sau:

 CONFIG_LOCALVERSION = "nameofyourkernel" LOCALVERSION = "versionofyourkernel" 

KHÔNG sửa đổi các dòng Phiên bản, PatchLevel, Sublevel hoặc Extraversion.

Phương pháp thay thế:

Chuyển đến scripts / mkcompile_h và thêm các dòng sau:

 LINUX_COMPILE_BY = "nameofyourchoice" LINUX_COMPILE_HOST = "nameofyourchoice" 

Giải quyết các vấn đề về PATH:

Nếu bạn gặp phải lỗi, đường dẫn của bạn có đúng không?, Hãy thử điều này trong thiết bị đầu cuối Linux:

 "xuất PATH =" định vị đường dẫn "/ bin: $ PATH" 

Truy cập các thư mục Ubuntu của bạn từ Windows 10

Đường dẫn đến Ubuntu của bạn thường là:

C: \ Người dùng TÊN TÊN ĐỔI TÊN \ AppData \ Local \ Gói \ CanonicalgroupLiated.UbfoxonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home

Nhưng bạn không nên chỉnh sửa các tệp trực tiếp từ Windows, vì điều này thường sẽ phá vỡ các quyền trên chúng - khi đó bạn sẽ cần phải đặt lại các quyền từ bên trong thiết bị đầu cuối Linux.

Bài ViếT Thú Vị