Các nhân phổ biến của Android

Hạt nhân phổ biến AOSP (còn gọi là hạt nhân phổ biến của Android hay ACK) là hạ nguồn của hạt nhân kernel.org và bao gồm các bản vá được cộng đồng Android quan tâm chưa được hợp nhất vào hạt nhân chính hoặc hạt nhân Hỗ trợ dài hạn (LTS). Các bản vá này có thể bao gồm:

  • Điều chỉnh cho phiên bản cũ và lựa chọn chức năng ngược dòng (upstream) 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 ở cấp trên
  • Những tính năng dành cho nhà cung cấp/Nhà sản xuất thiết bị gốc 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. Dòng chính của Linux sẽ được hợp nhất vào android-mainline bất cứ khi nào Linus Tovalds đăng một bản phát hành hoặc bản phát hành dùng thử. Trước năm 2019, các hạt nhân phổ biến của Android được tạo bằng cách sao chép hạt nhân LTS được khai báo gần đây 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 hệ điều hành phổ biến mới của Android từ android-mainline. Mô hình mới này giúp bạn không phải mất nhiều công sức để chuyển tiếp cổng và kiểm thử các bản vá Android bằng cách dần hoàn thành cùng một kết quả. android-mainline trải qua quy trình kiểm thử liên tục đáng kể, mô hình này đảm bảo hạt nhân chất lượng cao ngay từ ngày xuất bản.

Khi một LTS mới được khai báo theo hướng ngược dòng (upstream), hạt nhân chung tương ứng sẽ được phân nhánh từ android-mainline. Việc 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 kernel mới, các đối tác có thể thay đổi liền mạch nguồn hợp nhất thành nhánh mới.

Các nhánh nhân phổ biến khác nhận được các hợp nhất thông thường từ nhân LTS được liên kết. Những quá trình 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 đăng Linux 6.1.75, Linux 6.1.75 đã được hợp nhất vào nhân hệ điều hành chung 6.1 (android14-6.1). Các đối tác nên cập nhật nhân của mình để luôn nắm bắt các bản sửa lỗi dành riêng cho LTS và Android.

Nhánh nhân ACK KMI

Hạt nhân GKI có Giao diện mô-đun hạt nhân ổn định. KMI được xác định riêng theo phiên bản hạt nhân và bản phát hành nền tảng Android, vì vậy, các nhánh được đặt tên là ANDROID_RELEASE-KERNEL_VERSION. Ví dụ: hạt nhân 6.1 GKI cho Android 14 có tên là android14-6.1. Đối với Android 15 (AOSP thử nghiệm), nhân GKI android15-6.6 đã được giới thiệu.

Giới thiệu và khởi chạy nhân

Trước Android 15 (thử nghiệm AOSP), bạn có thể sử dụng bất kỳ nhân hệ điều hành nào trong 3 nhân gần đây nhất để ra mắt thiết bị. Kể từ Android 15 (thử nghiệm AOSP), bạn có thể dùng 2 phiên bản nhân hệ điều hành mới nhất để khởi chạy thiết bị. Hạt nhân khởi chạy cho Android 15 (thử nghiệm AOSP) là android15-6.6android14-6.1.

Vì không bắt buộc phải nâng cấp nhân hệ điều hành khi cập nhật bản phát hành trên nền tảng, nên những nhân bị thiếu tính năng mới nhất của bản phát hành trên nền tảng vẫn có thể được dùng để 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 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 (thử nghiệm AOSP).

Bản phát hành nền tảng Android Khởi chạy hạt nhân Nhân tính năng
Android 15 (AOSP thử nghiệm) (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.101
android15-6.6
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.101
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.41
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

1 Bạn có thể phải tuân thủ thêm các quy định hạn chế khác nếu BSP liên kết đã được cập nhật cho bản phát hành trên nền tảng. Nói chung, Số bản phát hành Android của nhân phải cao hơn hoặc bằng phiên bản FCM mục tiêu. Xem Đối tượng giao diện nhà cung cấp – so khớp nhánh hạt nhân để biết thông tin chi tiết.

Hệ phân cấp hạt nhân phổ biến

Nhánh từ android-mainline

Cấp cao nhất của hệ phân cấp hạt nhân chung được thể hiện trong Hình 1.

Tạo các nhân phổ biến từ nhân hệ điều hành android-mainline

Hình 1. Tạo các nhân phổ biến từ nhân hệ điều hành android-mainline

Xin lưu ý rằng nhân android14-6.1 mới phổ biến của Android đã được phân nhánh từ android-mainline vào năm 2022. Vào năm 2023, khi LTS tiếp theo được khai báo, android15-6.6 đã được phân nhánh từ android-mainline.

Như được trình bày trong Hình 1, mỗi phiên bản hạt nhân có thể là cơ sở cho hai nhân GKI. Ví dụ: 2 hạt nhân phiên bản 5.15 là android13-5.15android14-5.15, cả hai đều là hạt nhân tính năng cho 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 được phân nhánh từ android12-5.10 tại mốc hoàn thành tính năng 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 (thử nghiệm AOSP) (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 nhánh ACK KMI

Vòng đời của nhánh ACK KMI được trình bày dưới đây trong Hình 2.

6.6 Vòng đời nhánh ACK KMI

Hình 2. 6.6 Vòng đời nhánh ACK KMI

Để 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 của ACK chuyển qua 3 giai đoạn được biểu thị trong Hình 2 theo các màu khác nhau trong mỗi nhánh. Như đã minh hoạ, LTS thường xuyên được hợp nhất bất kể giai đoạn.

Giai đoạn phát triển

Sau khi được tạo, nhánh ACK KMI sẽ chuyển sang giai đoạn phát triển (được gắn nhãn là nhà phát triển trong Hình 2) và sẽ nhận các tính năng đóng góp trong bản phát hành tiếp theo cho nền tảng Android. Trong Hình 2, android15-6.6 được tạo khi 6.6 được khai báo là nhân LTS luồng ngược (upstream) mới.

Giai đoạn ổn định

Khi nhánh ACK KMI được khai báo tính năng hoàn tất, nhánh đó sẽ chuyển sang giai đoạn ổn định (được gắn nhãn là ổn định trong Hình 2). Các tính năng dành cho đối tác và bản sửa lỗi vẫn được chấp nhận, nhưng tính năng theo dõi KMI sẽ đượ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 được chấp nhận và định nghĩa KMI được cập nhật theo một tần suất được xác định trước (thường là hai tuần một lần). Xem Tổng quan về GKI để biết thông tin chi tiết về hoạt động theo dõi KMI.

Giai đoạn đóng băng KMI

Trước khi bản phát hành mới trên nền tảng được đẩy lên AOSP, nhánh ACK KMI sẽ bị bị treo và bị treo trong suốt thời gian hoạt động của nhánh. Điều này có nghĩa là không có thay đổi nào có thể gây lỗi KMI được chấp nhận trừ phi phát hiện thấy một vấn đề bảo mật nghiêm trọng mà không thể giảm thiểu nếu không ảnh hưởng đến KMI ổn định. Để tránh lỗi KMI, một số bản vá được hợp nhất từ LTS có thể được sửa đổi hoặc xoá nếu không cần thiết phải khắc phục đối với các thiết bị Android.

Khi một nhánh ACK KMI bị treo, 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 hệ điều hành chung của 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 đã xuất mới, miễn là các giao diện chứa 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, các giao diện đó sẽ ngay lập tức trở nên ổn định và không thể bị hỏng do các thay đổi trong tương lai.

Ví dụ: bạn không được phép thực hiện thay đổi thêm trường vào cấu trúc do nhân hệ điều hành phổ biến của giao diện KMI sử dụng vì thay đổi này 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 sẽ được duy trì để có thể sử dụng nhân hệ điều hành này một cách an toàn cho bản phát hành nền tảng Android mà thiết bị được dùng để khởi chạy. Việc kiểm thử liên tục với các bản phát hành trước đó đảm bảo rằng khả năng tương thích vẫn được duy trì. Vì vậy, trong Hình 2, hạt nhân android15-6.6 có thể được sử dụng cho các thiết bị Android 15 (thử nghiệm AOSP) và các thiết bị sau này. Vì bản phát hành trên 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ể sử dụng hạt nhân android14-6.1 cho các thiết bị Android 15 (thử nghiệm AOSP) để khởi chạy hoặc nâng cấp.

Số thế hệ KMI

Nếu có sự hợp nhất LTS trong giai đoạn ổn định hoặc xảy ra vấn đề bảo mật hoặc một sự kiện khác sau đó yêu cầu phải chấp nhận bản vá thay đổi KMI, thì số tạo KMI được ghi lại trong build.config.common sẽ tăng lên. Bạn có thể tìm thấy quá trình tạo 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à số tạo KMI (trong trường hợp này là 6).

Nếu thế hệ KMI thay đổi, hạt nhân hệ điều hành sẽ không tương thích với các mô-đun của nhà cung cấp phù hợp với 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 hệ điều hành. Sau khi KMI bị treo, việc thay đổi quá trình tạo KMI sẽ rất hiếm khi xảy ra.

Khả năng tương thích giữa các hạt nhân

Yêu cầu về khả năng tương thích giữa các hạt nhân trong cùng một bộ LTS (hỗ trợ dài hạn) sẽ thay đổi để bắt đầu bằng nhân GKI mới.

Hạt nhân GKI

Hạt nhân GKI duy trì khả năng tương thích ngược với tất cả bản phát hành nền tảng Android có hỗ trợ phiên bản nhân. Ngoài ra, các bản phát hành trên nền tảng Android cũng tương thích ngược với hạt nhân GKI trong các bản phát hành trước. Vì vậy, bạn có thể yên tâm sử dụng 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 (thử nghiệm AOSP) (2024). Khả năng tương thích được xác minh thông qua việc kiểm thử VTS và CTS liên tục của các hạt nhân GKI với mọi bản phát hành được hỗ trợ.

KMI ổn định để có thể cập nhật nhân hệ điều hành mà không cần tạo lại các mô-đun nhân trong ảnh nhà cung cấp.

Khả năng tương thích với KMI không được duy trì giữa các hạt nhân GKI khác nhau. Vì vậy, ví dụ: không thể thay thế hạt nhân android14-6.1 bằng hạt nhân android15-6.6 nếu không tạo lại tất cả các mô-đun.

Hạt nhân GKI chỉ được hỗ trợ cho bản phát hành đầu tiên và các bản phát hành tiếp theo. Không hỗ trợ những tính năng này trên các bản phát hành cũ. Vì vậy, nhân android15-6.6 không được hỗ trợ cho các nhà phát triển 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 hệ điều hành được hỗ trợ và kiểm thử với mỗi 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ợ để nâng cấp Các nhân được hỗ trợ để khởi chạy
Android 15 (AOSP thử nghiệm) (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-4.19-stable
android15-6.6
android14-6.1
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-4.19-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
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
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

Hỗ trợ vòng đời và các bản vá bảo mật

Các nhân hệ điều hành phổ biến của Android sẽ được hỗ trợ cho đến khi nhân LTS được liên kết hoặc bản phát hành cho Nền tảng Android không còn được hỗ trợ nữa. Mặc dù được hỗ trợ, một nhân hệ điều hành sẽ tiếp tục nhận được các thao tác hợp nhất LTS từ luồng ngược dòng (upstream) và 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ả bản vá bảo mật nhân được trích dẫn trong Bản tin bảo mật Android hằng tháng liên quan đến các nhân hệ điều hành Android phổ biến.

Các đối tác có thể tự tin rằng bằng cách sử dụng hạt nhân GKI, họ sẽ nhận được mọi bản vá bảo mật nhân hệ điều hành có thể.

Kiểm thử nhân hệ điều hành phổ biến

Các nhân phổ biến được kiểm thử bằng một số hệ thống CI ngoài quy trình kiểm thử hạ nguồn của các nhà cung cấp.

Kiểm thử chức năng hạt nhân Linux

Các chương trình kiểm thử kiểm thử chức năng hạt nhân Linux (LKFT) khởi chạy nhiều bộ kiểm thử bao gồm kselftest, LTP, VTS và CTS trên một nhóm thiết bị arm32 và arm64 thực. Bạn có thể tìm thấy kết quả kiểm thử gần đây tại đây.

Kiểm thử KernelCI

Các hoạt động kiểm thử bản dựng và khởi động KernelCI được bắt đầu bất cứ khi nào một bản vá mới được cam kết với một nhánh kernel chung. Một số 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ể tìm thấy các kết quả gần đây cho nhân Android tại đây.

Kiểm thử trước và sau khi gửi trên Android

Kiểm thử gửi trước được dùng để ngăn lỗi được đưa vào các nhân hệ điều hành phổ biến của Android. Bạn có thể xem bản tóm tắt kết quả kiểm thử trong thẻ "Kiểm tra" của sự thay đổi mã trong chương trình hạt nhân chung của Android.

Hoạt động kiểm thử sau khi gửi trên Android được thực hiện trên các bản dựng mới phát hành trong các nhánh nhân hệ điều hành phổ biến của Android khi các bản vá mới được cam kết cho một nhánh nhân hệ điều hành Android chung tại ci.android.com. Bằng cách nhập aosp_kernel làm tên một phần của nhánh trong ci.android.com, bạn sẽ thấy danh sách các nhánh nhân hệ điều hành có sẵn kết quả. Ví dụ: bạn có thể tìm thấy các kết quả cho android-mainline tại đây. Khi nhấp vào một bản dựng cụ thể, bạn sẽ thấy trạng thái kiểm thử trong thẻ Test Results.

Các bài kiểm thử được xác định bằng tính năng ánh xạ kiểm thử với nhóm kiểm thử kernel-presubmit trong cây nguồn của nền tảng Android sẽ được chạy dưới dạng bài gửi trước cho các nhánh nhân hệ điều hành Android. Ví dụ: cấu hình sau trong test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING sẽ kích hoạt vts_kernel_proc_file_api_test làm phép kiểm thử presbumit khi kiểm tra mã nhân hệ điều hành phổ biến của Android.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

Thử nghiệm 0 ngày

Quy trình kiểm thử 0 ngày thực hiện kiểm thử từng bản vá trên tất cả các nhánh nhân hệ điều hành phổ biến của Android khi các bản vá mới được cam kết. Nhiều bài 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 hệ điều hành Android phổ biến Bản phát hành Nền tảng Android Bộ kiểm tra
Số chính 15 14 13 12 11 10 LKFT KernelCI Gửi trước Đăng bài 0 ngày
android-mainline
android5-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable

Đóng góp cho các nhân hệ điều hành phổ biến của Android

Nhìn chung, bạn nên phát triển tính năng trên Linux dòng chính chứ không phải trên các nhân phổ biến của Android. Bạn nên phát triển theo hướng ngược dòng (upstream) và sau khi chấp nhận quá trình phát triển ở đó, bạn có thể dễ dàng điều chỉnh cho phiên bản cũ về nhánh ACK cụ thể nếu cần. Nhóm Android Kernel rất hân hạnh được hỗ trợ các hoạt động phát trực tuyến vì lợi ích của hệ sinh thái Android.

Gửi bản vá cho Gerrit và tuân thủ các nguyên tắc đóng góp này.