Hạt nhân phổ biến của Android

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.6android14-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.

Tạo các nhân chung từ nhân android-mainline

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.15android14-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.

Vòng đời của nhánh KMI 6.6 ACK

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
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
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.