Appual’s có một số hướng dẫn tuyệt vời về phát triển Android, chẳng hạn như Cách tạo 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 tới 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 sẽ vẫn 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à người dùng 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 ta sẽ đặc biệt tìm hiểu cách xây dựng hạt nhân 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
- Trên Windows 10, chuyển đến 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.
- Bây giờ, hãy đi tới Bảng điều khiển> Chương trình> Bật hoặc Tắt các tính năng của Windows> bật Hệ thống con của Windows cho Linux.
- Khởi động lại PC của bạn.
- 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à đừng làm mất mật khẩu.
- Bây giờ, hãy truy cập cửa hàng ứng dụng Windows và tải xuống Ubuntu.
- 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.
- Trong Ubuntu, khởi chạy terminal gốc và nhập lệnh sau:apt-get update
- Thao tác này sẽ tiếp tục cập nhật tất cả các kho ứng dụng và phụ thuộc.
- Tiếp theo trong loại terminal:sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2
- Để kiểm tra xem tất cả các phần phụ thuộc đã được cài đặt chính xác hay chưa, hãy nhập "gcc" vào dòng lệnh (không có dấu ngoặc kép).
- Nếu “gcc” đã được cài đặt, bạn sẽ thấy “gcc:error nghiêm trọng:không có tệp đầu vào”
- Giờ đây, bạn có thể nhập 'make' trong thiết bị đầu cuối. Nếu “make” đã được cài đặt, bạn sẽ thấy “make:*** không có mục tiêu nào được chỉ định và không tìm thấy makefile. dừng lại. ”
- Tiếp theo, nhập "git" và iff "git" đã được cài đặt, bạn sẽ thấy nhiều lệnh git cơ bản.
- Bây giờ chúng tôi cần một số loại 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 dãy công cụ khác nhau, chẳng hạn như không phải tất cả các nhân của thiết bị đều sẽ khởi động hoặc biên dịch với GCC.
Đối với thiết bị ARM
Chúng tôi sẽ sử dụng GCC 4.7 cho việc này.
- Mở terminal Linux và nhập:mkdir kernel
- Bây giờ hãy nhập:hạt nhân cd
- (nó không nhất thiết phải là "kernel", vì đơn giản, bạn có thể đặt tên cho nó bất cứ thứ gì bạn muốn.)
- Bây giờ hãy nhập:git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7
Đối với thiết bị ARM 64
Bạn cần một trình biên dịch nhân 64-bit cho các thiết bị ARM 64, ví dụ:aarch64.
Lấy tệp nguồn cho thiết bị của bạn
Đây là một phần phức tạp, vì bạn cần tìm một kho lưu trữ GitHub lưu trữ nguồn hạt nhân của bạn. Tất nhiên, bạn sẽ cần phải 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.
Đây là ví dụ về mã nguồn hạt 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ó các phiên bản khác nhau của nhân / dự án, thường được phân tách bằng “Thử nghiệm”, “Beta”, “Bản phát hành cuối cùng”, v.v.
Các thư mục nhân 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ư các thống đốc, v.v.
- / output / Arch / arm / boot / :Đây là nơi zimage sẽ được lưu trữ.
- 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 hạt nhân, do đó, việc tìm kiếm dễ dàng hơn.
Bạn sẽ cần tải xuống nguồn hạt nhân 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 nhân mà bạn đã tạo trước đó (nhân cd).
Sau đó nhập vào terminal:“git clone“ URL của nhân github ”-b“ tên của chi nhánh ”
Ví dụ:“git clone https://github.com/atxoxx/android_ke…amsung_msm8974 -b xenomTW”
Xây dựng nhân
Để dễ dàng hơn, bạn có thể điều hướng đến vị trí trong trình khám phá 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 chuỗi công cụ và nguồn hạt nhân. Vào bên trong thư mục nguồn nhân.
Đối với thiết bị ARM
Trong một thiết bị đầu cuối, hãy nhập các lệnh sau:
#! / bin / bashexport ARCH =armexport CROSS_COMPILE =mkdir outputmake -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 thực hiện, để làm cho việc 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
- xuất ARCH =arm: Xác định kiểu kiến trúc hạt nhân nào (Ví dụ:arm64, v.v.)
- xuất CROSS_COMPILE = :Xác định vị trí của chuỗi công cụ. Nó phải khớp với đường dẫn chính xác và dấu gạch ngang ở cuối là thực sự bắt buộc.
- đầu ra mkdir: Điều này tạo ra một thư mục để lưu zimage đã biên dịch
- làm cho -C $ (pwd) O =đầu ra :Định nghĩa defconfig để hướng dẫn biên dịch hạt nhân.
- make -j4 -C $ (pwd) O =đầu ra :Khi quá trình xây dựng bắt đầu, -j # cho biết tốc độ thử và biên dịch. Thông thường, bạn đặt con số này theo CPU của mình. Ví dụ:đặt trên -j32 trên một CPU ngân sách, có thể sẽ gây ra sự bất ổn định lớn.
- đầu ra cp / vòm / arm / boot / Hình ảnh $ (pwd) / Arch / arm / boot / zImage :Đây là cách chuyển hình ảnh sang đường dẫn thứ hai.
Một ví dụ khác:
#! / bin / bashexport ARCH =armexport CROSS_COMPILE =$ (pwd) /arm-cortex-linux-gnueabi-linaro_5.2-2015.11-2/bin/arm-cortex-linux-gnueabi-mkdir outputmake -C $ (pwd) O =output msm8974_sec_defconfig VARIANT_DEFCONFIG =msm8974_sec_ks01_skt_defconfig SELINUX_DEFCONFIG =selinux_defconfigmake -j4 -C $ (pwd) O =outputcp output / Arch / arm / bootpre / Image $Đối với thiết bị ARM 64
#! / bin / bashexport ARCH =arm64export 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 outputmake -C $ (pwd) O =output "tên của defconfig và biến thể nếu cần "make -j4 -C $ (pwd) O =outputĐối với thiết bị Mediatek (MTK)
#! / bin / bashexport 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 -") export ARCH =arm ARCH_MTK_PLATFORM =make "tên của defconfig và biến thể nếu cần" make - j4Khi bạn đã hoàn thành các bước cần thiết cho kiến trúc hạt nhân 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 của mình 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 hạt nhân 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 quá trình 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 “/ Output / Arch / arm / boot /” để tìm hình ảnh của bạn.
Thiết bị Mediatek
Truy cập “/ Arch / arm / boot /” để tìm hình ảnh của bạn.
Không phải tất cả các bản dựng nhân đều tạo ra tệp Zimage, đôi khi nó có thể được tạo dưới dạng 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 make clean và tạo mrproper trước khi bắt đầu lại quá trình biên dịch.
Tạo Kernel Boot
Có hai tùy chọn để bạn chọn.
Bạn có thể sử dụng phương thức anykernel (như được định nghĩa bởi XDA user @ osm0sis trong chuỗi 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:
- Đặt zImage trong thư mục gốc (dtb và / hoặc dtbo cũng nên ở đây đối với các thiết bị yêu cầu các thiết bị tùy chỉnh, mỗi thiết bị sẽ trở về bản gốc nếu không được bao gồm)
- Đặt mọi tệp đĩa ram cần thiết vào / ramdisk và mô-đun trong / mô-đun (với đường dẫn đầy đủ như / mô-đun / hệ thống / lib / mô-đun)
- Đặt bất kỳ tệp vá lỗi bắt buộc nào (thường là các tệp một phần đi kèm với các lệnh) vào / patch
- Sửa đổi anykernel.sh để thêm tên hạt nhân của bạn, vị trí phân vùng khởi động, quyền đối với các tệp đĩa ram đi kèm và sử dụng các phương pháp cho bất kỳ sửa đổi đĩa ram bắt buộc nào (tùy chọn, cũng đặt các tệp biểu ngữ và / hoặc phiên bản trong thư mục gốc để các tệp này được hiển thị trong quá trình flash)
- `zip -r9 UPDATE-AnyKernel2.zip * -x .git README.md * placeholder`
Phương pháp khác mà bạn có sẵn là giải nén boot.img từ cùng một ROM (chẳng hạn như CM, TouchWiz, EMUI, v.v.) và cùng một phiên bản Android. Sau đó, bạn sẽ hoán đổ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à:
- Giải nén.
- Sử dụng dòng lệnh “unpackimg
” hoặc chỉ cần kéo và thả hình ảnh. Thao tác này sẽ chia nhỏ hình ảnh và giải nén đĩa ram vào một thư mục con. - Thay đổi đĩa ram theo ý muốn.
- Tập lệnh lô repackimg không yêu cầu đầu vào và chỉ cần kết hợp lại zImage đã tách trước đó với đĩa ram đã 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 chia và lưu).
- Tập lệnh loạt dọn dẹp sẽ đặt lại thư mục về trạng thái ban đầu, xóa các thư mục split_img + ramdisk và mọi tệp hình ảnh hoặc đĩa ram mới được đóng gói.
Trước khi flash kernel, bạn nên tạo một bản sao lưu kho boot.img, sau đó flash kernel để xem nó có cho phép hệ thống Android của bạn khởi động hay không.
Thêm tính năng vào nhân của bạn
Thêm các tính năng vào hạt nhân của bạn là một cách tuyệt vời để thêm gia vị cho nó. Có rất nhiều thứ bạn có thể tinh chỉnh, chẳng hạn như bộ điều chỉnh CPU, bộ lập lịch IO, ép xung GPU, cải tiến âm thanh, v.v.
Ví dụ về việc thêm thống đốc có ở đâ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 “Arch / arm / configs /” “msm8974_sec_defconfig” và “cm_msm8974_sec_defconfig” đã được sửa đổi.
Giữa dòng 140 và dòng 141 của tệp này, văn bản này đã được thêm vào:“CONFIG_CPU_FREQ_GOV_INTELLIMM =y”
(Dòng này để bật Intellimm khi bạn đang biên dịch hạt nhân 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 hoặc ít tệp có thể được sửa đổi, thêm hoặc xóa.
Tóm lại, một Cam kết cho phép bạn thấy tất cả những 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 hạt nhân:
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 định nghĩa của bạnVí dụ:CONFIG_LOCALVERSION =”- 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 hạt nhân của bạn.
Thêm những dòng này:
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ế:
Truy cập scripts / mkcompile_h và thêm các dòng sau:
LINUX_COMPILE_BY ="nameofyourchoice" LINUX_COMPILE_HOST ="nameofyourchoice"Giải quyết vấn đề PATH:
Nếu bạn gặp lỗi “Đường dẫn của bạn có đúng không?”, Hãy thử cách này trong thiết bị đầu cuối Linux:
"export PATH =" pathtotoolchainlocation "/ 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 phải là:
C:\ Users ”NAME” \ AppData \ Local \ Packages \ CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc \ LocalState \ rootfs \ home
Nhưng bạn không nên chỉnh sửa tệp trực tiếp từ Windows, vì điều này thường sẽ phá vỡ quyền đối với chúng - sau đó bạn cần đặt lại quyền từ bên trong thiết bị đầu cuối Linux.