Các nhân chung của AOSP (còn được gọi là các nhân chung của Android hoặc ACK) là các nhân hạ nguồn của nhân kernel.org và bao gồm các bản vá mà cộng đồng Android quan tâm nhưng chưa được hợp nhất vào các nhân chính hoặc các nhân được Hỗ trợ dài hạn (LTS). Các bản vá này có thể bao gồm:
- Backport và cherry-pick chức năng ngược dòng cần thiết cho các tính năng của Android
- Các tính năng đã sẵn sàng cho thiết bị Android nhưng vẫn đang trong quá trình phát triển ở thượng nguồn
- Các tính năng của nhà cung cấp/OEM hữu ích cho các đối tác khác trong hệ sinh thái
android-mainline
là nhánh phát triển chính cho các tính năng của Android. Linux mainline được hợp nhất vào android-mainline
bất cứ khi nào Linus Torvalds đăng một bản phát hành hoặc bản phát hành ứng cử viên. Trước năm 2019, các nhân chung của Android được tạo bằng cách sao chép nhân LTS mới được khai báo và thêm các bản vá dành riêng cho Android. Quy trình này đã thay đổi vào năm 2019 để phân nhánh nhân chung Android mới từ android-mainline
. Mô hình mới này giúp bạn không phải nỗ lực đáng kể để chuyển tiếp cổng và kiểm thử các bản vá Android bằng cách đạt được kết quả tương tự theo từng bước. android-mainline
trải qua quá trình kiểm thử liên tục và đáng kể, mô hình này bao gồm một hạt nhân chất lượng cao kể từ ngày được xuất bản.
Khi một LTS mới được khai báo ở nguồn trên, hạt nhân chung tương ứng sẽ được phân nhánh từ android-mainline
. Điều này cho phép các đối tác bắt đầu một dự án trước khi khai báo phiên bản LTS, bằng cách hợp nhất từ android-mainline
. Sau khi tạo nhánh hạt nhân chung mới, các đối tác có thể thay đổi nguồn hợp nhất sang nhánh mới một cách liền mạch.
Các nhánh kernel phổ biến khác thường xuyên được hợp nhất từ kernel LTS được liên kết.
Những hoạt động hợp nhất này thường được thực hiện ngay sau khi bản phát hành LTS được đăng. Ví dụ: khi Linux 6.1.75 được đăng, phiên bản này đã được hợp nhất vào nhân chung 6.1 (android14-6.1
). Các đối tác nên cập nhật nhân để luôn nắm bắt được các bản sửa lỗi LTS và lỗi dành riêng cho Android.
Nhánh kernel ACK KMI
Các nhân GKI có Giao diện mô-đun nhân ổn định. KMI được xác định duy nhất theo phiên bản kernel và bản phát hành nền tảng Android, vì vậy, các nhánh có tên là ANDROID_RELEASE
-KERNEL_VERSION
.
Ví dụ: nhân GKI 6.1 cho Android 14 có tên là android14-6.1
. Đối với Android 15, nhân GKI android15-6.6
đã được giới thiệu.
Kernel tính năng và kernel khởi động
Trước Android 15, bạn có thể dùng bất kỳ một trong ba nhân gần đây nhất để khởi chạy thiết bị. Kể từ Android 15, bạn có thể dùng 2 phiên bản kernel gần đây nhất để khởi chạy thiết bị. Các nhân khởi động cho Android 15 là android15-6.6
và android14-6.1
.
Vì không cần nâng cấp nhân khi cập nhật bản phát hành nền tảng, nên các nhân thiếu các tính năng mới nhất cho một bản phát hành nền tảng vẫn có thể được dùng để khởi chạy thiết bị. Do đó, các nhân được thiết kế cho Android 14, chẳng hạn như android14-6.1
, có thể được dùng trên các thiết bị ngay cả sau khi nâng cấp bản phát hành nền tảng lên Android 15.
Bản phát hành nền tảng Android | Khởi chạy nhân | Nhân tính năng |
---|---|---|
Android 16 (2025) |
android16-6.12
android15-6.6
|
android16-6.12
|
Android 15 (2024) |
android15-6.6
android14-6.1
|
android15-6.6
|
Android 14 (2023) |
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
|
android14-6.1
android14-5.15
|
Android 13 (2022) |
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
android13-5.15
android13-5.10
|
Android 12 (2021) |
android12-5.10
android12-5.4
android11-5.4
|
android12-5.10
android12-5.4
|
1 Các quy định hạn chế bổ sung có thể áp dụng nếu BSP liên kết đã được cập nhật cho bản phát hành nền tảng. Hãy xem Đối tượng giao diện nhà cung cấp – so khớp các nhánh của nhân để biết thông tin chi tiết. |
Hệ phân cấp hạt nhân chung
Phân nhánh từ android-mainline
Cấp cao nhất của hệ phân cấp hạt nhân chung được minh hoạ trong Hình 1.
Hình 1. Tạo các nhân chung từ nhân android-mainline
Xin lưu ý rằng một nhân chung Android android14-6.1
mới đã được phân nhánh từ android-mainline
vào năm 2022. Vào năm 2023, khi LTS tiếp theo được công bố, android15-6.6
đã được phân nhánh từ android-mainline
.
Như minh hoạ trong Hình 1, mỗi phiên bản nhân có thể là cơ sở cho 2 nhân GKI.
Ví dụ: hai nhân v5.15 là android13-5.15
và android14-5.15
, cả hai đều là nhân tính năng cho các bản phát hành nền tảng tương ứng. Đây cũng là trường hợp của 5.10; android12-5.10
được tạo khi LTS được khai báo và android13-5.10
phân nhánh từ android12-5.10
tại cột mốc hoàn thành tính năng của nhân vào mùa xuân năm 2021 để cho phép phát triển các tính năng cho Android 13. Kể từ Android 15 (2024), chỉ có một nhân GKI mới cho mỗi phiên bản nhân (không có nhân android15-6.1
).
Vòng đời của nhánh KMI ACK
Vòng đời của một nhánh KMI ACK được minh hoạ trong Hình 2.
Hình 2. Vòng đời của nhánh KMI 6.6 ACK
Để làm rõ quy trình phát triển và vòng đời của nhánh, Hình 2 tập trung vào các nhánh ACK KMI cho 6.6.
Mỗi nhánh KMI ACK đều trải qua 3 giai đoạn được biểu thị trong Hình 2 bằng các màu khác nhau trong mỗi nhánh. Như minh hoạ, LTS được hợp nhất thường xuyên bất kể giai đoạn nào.
Giai đoạn phát triển
Khi được tạo, một nhánh ACK KMI sẽ bước vào giai đoạn phát triển (được gắn nhãn là dev trong Hình 2) và mở để đóng góp tính năng cho bản phát hành nền tảng Android tiếp theo. Trong Hình 2, android15-6.6
được tạo khi 6.6 được khai báo là hạt nhân LTS mới ở nguồn trên.
Giai đoạn ổn định
Khi nhánh KMI ACK được khai báo là hoàn tất tính năng, nhánh này sẽ chuyển sang giai đoạn ổn định (được gắn nhãn là ổn định trong Hình 2). Chúng tôi vẫn chấp nhận các tính năng của đối tác và bản sửa lỗi, nhưng tính năng theo dõi KMI được bật để phát hiện mọi thay đổi ảnh hưởng đến giao diện. Trong giai đoạn này, các thay đổi có thể gây lỗi KMI sẽ được chấp nhận và định nghĩa KMI được cập nhật theo một nhịp điệu xác định trước (thường là hai tuần một lần). Hãy xem Tổng quan về GKI để biết thông tin chi tiết về hoạt động giám sát KMI.
Giai đoạn KMI bị treo
Trước khi một bản phát hành nền tảng mới được chuyển đến AOSP, nhánh KMI ACK sẽ được đóng băng và vẫn ở trạng thái đóng băng trong suốt thời gian tồn tại của nhánh. Điều này có nghĩa là không có thay đổi nào làm gián đoạn KMI được chấp nhận, trừ phi có một vấn đề bảo mật nghiêm trọng được xác định mà không thể giảm thiểu nếu không ảnh hưởng đến KMI ổn định. Để tránh làm gián đoạn KMI, một số bản vá được hợp nhất từ LTS có thể bị sửa đổi hoặc loại bỏ nếu bản sửa lỗi không bắt buộc đối với các thiết bị Android.
Khi một nhánh ACK KMI bị đóng băng, các bản sửa lỗi và tính năng của đối tác có thể được chấp nhận miễn là nhân chung KMI hiện có không bị hỏng. Bạn có thể mở rộng KMI bằng các biểu tượng mới được xuất miễn là các giao diện tạo nên KMI hiện tại không bị ảnh hưởng. Khi các giao diện mới được thêm vào KMI, chúng sẽ ngay lập tức trở nên ổn định và không thể bị các thay đổi trong tương lai làm hỏng.
Ví dụ: bạn không được phép thực hiện thay đổi thêm một trường vào cấu trúc mà hạt nhân chung của giao diện KMI sử dụng vì thay đổi này sẽ làm thay đổi định nghĩa giao diện:
struct foo {
int original_field1;
int original_field2;
int new_field; // Not allowed
};
int do_foo(struct foo &myarg)
{
do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);
Tuy nhiên, bạn có thể thêm một hàm mới:
struct foo2 {
struct foo orig_foo;
int new_field;
};
int do_foo2(struct foo2 &myarg)
{
do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);
Trong suốt vòng đời của nhân GKI, khả năng tương thích ngược với không gian người dùng vẫn được duy trì để nhân có thể được sử dụng một cách an toàn cho bản phát hành nền tảng Android mà thiết bị đã ra mắt. Việc kiểm thử liên tục với các bản phát hành trước đó giúp duy trì khả năng tương thích. Vì vậy, trong Hình 2, bạn có thể dùng nhân android15-6.6
cho các thiết bị Android 15 trở lên. Vì bản phát hành nền tảng Android cũng tương thích với các phiên bản trước, nên bạn có thể dùng nhân android14-6.1
cho các thiết bị Android 15 để khởi chạy hoặc nâng cấp.
Số thế hệ KMI
Nếu có một lần hợp nhất LTS trong giai đoạn ổn định hoặc một vấn đề bảo mật hoặc sự kiện khác sau đó yêu cầu chấp nhận bản vá thay đổi KMI, thì số thế hệ KMI được ghi trong build.config.common
sẽ tăng lên. Bạn có thể tìm thấy thế hệ KMI hiện tại bằng lệnh uname
:
$ uname -r
6.6.30-android15-6-g86d10b30f51f
Số sau bản phát hành nền tảng là thế hệ KMI (trong trường hợp này là 6
).
Nếu quá trình tạo KMI thay đổi, thì nhân sẽ không tương thích với các mô-đun của nhà cung cấp tuân thủ thế hệ KMI trước đó, vì vậy, các mô-đun phải được tạo lại và cập nhật đồng bộ với nhân. Sau khi KMI ngừng hoạt động, các thay đổi về việc tạo KMI dự kiến sẽ rất hiếm khi xảy ra.
Khả năng tương thích giữa các nhân
Các yêu cầu về khả năng tương thích giữa các nhân trong cùng một họ LTS đang thay đổi bắt đầu từ các nhân GKI mới.
Nhân GKI
Các nhân GKI duy trì khả năng tương thích ngược với tất cả các bản phát hành nền tảng Android hỗ trợ phiên bản nhân. Ngoài ra, các bản phát hành nền tảng Android tương thích ngược với các nhân GKI trong các bản phát hành trước. Vì vậy, bạn có thể sử dụng một cách an toàn nhân android14-6.1
được phát triển cho Android 14 (2023) trên các thiết bị chạy Android 15 (2024). Khả năng tương thích được xác minh thông qua quy trình kiểm thử VTS và CTS liên tục của các nhân GKI với tất cả các bản phát hành được hỗ trợ.
KMI ổn định để có thể cập nhật nhân mà không cần phải tạo lại các mô-đun nhân trong hình ảnh nhà cung cấp.
Khả năng tương thích KMI không được duy trì giữa các nhân GKI khác nhau. Ví dụ: bạn không thể thay thế nhân android14-6.1
bằng nhân android15-6.6
mà không cần dựng lại tất cả các mô-đun.
Các bản phát hành ban đầu và tiếp theo của nhân GKI đều được hỗ trợ.
Các phiên bản cũ hơn không được hỗ trợ. Vì vậy, nhân android15-6.6
không được hỗ trợ cho các thiết bị chạy Android 14 (2023).
Ma trận tương thích
Bảng này cho biết các phiên bản nhân được hỗ trợ và thử nghiệm với từng bản phát hành nền tảng Android.
Bản phát hành nền tảng Android | Các nhân được hỗ trợ |
---|---|
Android 16 (2025) |
android16-6.12
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
Android 15 (2024) |
android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
Android 14 (2023) |
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
Android 13 (2022) |
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
Android 12 (2021) |
android12-5.10
android12-5.4
android11-5.4
|
Thời gian hỗ trợ và bản vá bảo mật
ACK nhận các bản hợp nhất LTS từ nguồn và các bản sửa lỗi cho mã dành riêng cho Android. Các bản sửa lỗi này bao gồm tất cả các bản vá bảo mật nhân được đề cập trong Bản tin bảo mật Android hằng tháng có liên quan đến ACK.
ACK có thể được hỗ trợ lâu hơn so với kernel ổn định tương ứng ở nguồn kernel.org. Trong trường hợp này, Google sẽ cung cấp dịch vụ hỗ trợ mở rộng cho đến ngày kết thúc vòng đời (EOL) được nêu trong phần này. Khi các nhân này hết hạn, Google sẽ không còn hỗ trợ chúng nữa và các thiết bị chạy các nhân này sẽ được coi là dễ bị tấn công.
Bắt đầu từ kernel 6.6, thời gian hỗ trợ cho các kernel ổn định là 4 năm.
Bảng này cho biết thời gian tồn tại của các ACK được hỗ trợ:
Nhánh ACK | Ngày ra mắt |
Hỗ trợ trọn đời (năm) |
EOL |
---|---|---|---|
android11-5.4 | 2019-11-24 | 6 | 2026-01-01 |
android12-5.4 | 2019-11-24 | 6 | 2026-01-01 |
android12-5.10 | 2020-12-13 | 6 | 2027-07-01 |
android13-5.10 | 2020-12-13 | 6 | 2027-07-01 |
android13-5.15 | 2021-10-31 | 6 | 2028-07-01 |
android14-5.15 | 2021-10-31 | 6 | 2028-07-01 |
android14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
android15-6.6 | 2023-10-29 | 4 | 2028-07-01 |
android16-6.12 | 2024-11-17 | 4 | 2029-07-01 |
Kiểm thử hạt nhân thông thường
Các hạt nhân chung được kiểm thử bằng một số hệ thống CI ngoài việc kiểm thử hạ nguồn của các nhà cung cấp.
Kiểm thử chức năng của Kernel Linux
Các kiểm thử Kiểm thử chức năng của nhân Linux (LKFT) sẽ khởi chạy nhiều bộ kiểm thử, bao gồm kselftest, LTP, VTS và CTS trên một bộ thiết bị arm32 và arm64 thực. Bạn có thể xem các kết quả kiểm thử gần đây trên trang android-lkft.
Kiểm thử KernelCI
Các kiểm thử tạo và khởi động KernelCI sẽ được bắt đầu bất cứ khi nào một bản vá mới được cam kết cho một nhánh kernel chung. Hàng trăm cấu hình bản dựng được kiểm thử và khởi động trên nhiều bảng. Bạn có thể xem các kết quả gần đây cho nhân Android trên trang web KernelCL.
Kiểm thử trước khi gửi và sau khi gửi trên Android
Các kiểm thử trước khi gửi được dùng để ngăn lỗi xuất hiện trong các nhân chung của Android. Bạn có thể xem bản tóm tắt kết quả kiểm thử trong thẻ "Checks" (Kiểm tra) của thay đổi mã trong gerrit của nhân chung Android.
Hoạt động kiểm thử sau khi gửi của Android được thực hiện trên các bản dựng mới được xuất bản trong các nhánh kernel chung của Android khi các bản vá mới được cam kết với một nhánh kernel chung của Android trong ci.android.com. Bằng cách nhập aosp_kernel
làm tên nhánh một phần trong ci.android.com, bạn sẽ thấy danh sách các nhánh kernel có kết quả. Ví dụ: bạn có thể tìm thấy kết quả cho android-mainline
trên trang tổng quan về hoạt động tích hợp bản dựng liên tục của Android (Android CI). Nhấp vào một bản dựng cụ thể để xem trạng thái kiểm thử trong thẻ Test Results
.
Các quy trình kiểm thử do test-mapping xác định với nhóm kiểm thử kernel-presubmit
trong cây nguồn nền tảng Android được chạy dưới dạng quy trình kiểm thử trước khi gửi cho các nhánh kernel Android. Ví dụ: cấu hình sau đây trong test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING cho phép vts_kernel_proc_file_api_test
làm bài kiểm thử trước khi gửi tại quá trình kiểm tra mã kernel chung của Android.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
Thử nghiệm 0 ngày
Thử nghiệm 0 ngày thực hiện kiểm thử từng bản vá trên tất cả các nhánh kernel chung của Android khi các bản vá mới được cam kết. Nhiều kiểm thử khởi động, chức năng và hiệu suất được chạy. Tham gia nhóm công khai cros-kernel-buildreports.
Ma trận kiểm thử
Nhân chung của Android | Bản phát hành Nền tảng Android | Bộ thử nghiệm | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Trình đơn chính | 16 | 15 | 14 | 13 | 12 | LKFT | KernelCI | Trước khi gửi | Sau khi gửi | 0-day | |
android-mainline
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android16-6.12
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Đóng góp cho các nhân chung của Android
Nhìn chung, quá trình phát triển tính năng nên được thực hiện trên Linux chính chứ không phải trên các nhân chung của Android. Bạn nên phát triển ở nguồn trên và sau khi quá trình phát triển được chấp nhận ở đó, bạn có thể chuyển ngược về nhánh ACK cụ thể nếu cần. Nhóm hạt nhân Android rất vui khi hỗ trợ những nỗ lực đóng góp cho nguồn chính vì lợi ích của hệ sinh thái Android.
Gửi các bản vá cho Gerrit và tuân thủ các nguyên tắc đóng góp này.