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

Hạt nhân chung AOSP (còn gọi là hạt nhân chung Android hoặc ACK) là phần phụ thuộc của hạt 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 hạt nhân chính hoặc hạt nhân được hỗ trợ dài hạn (LTS). Các bản vá này có thể bao gồm:

  • Các bản phát hành ngược và lựa chọn kỹ lưỡng chức năng cấp trên 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
  • 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. Luồng chính của Linux đượ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 đề xuất. 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 tránh được 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 cùng một kết quả một cách gia tăng. android-mainline trải qua quá trình kiểm thử liên tục đáng kể, mô hình này đảm bảo một hạt nhân chất lượng cao ngay từ ngày phát hành.

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 nhân 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 thường xuyên được hợp nhất từ hạt nhân LTS liên kết. Việc 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 KMI ACK

Hạt nhân GKI có Giao diện mô-đun hạt nhân ổn định. KMI được xác định duy nhất bằng 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 GKI 6.1 cho Android 14 được đặt tên là android14-6.1. Đối với Android 15, android15-6.6 hạt nhân GKI đã được giới thiệu.

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

Trước Android 15, 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 để khởi chạy thiết bị. Kể từ Android 15, bạn có thể sử dụng hai phiên bản hạt nhân mới nhất để khởi chạy thiết bị. Hạt nhân khởi chạy cho Android 15 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 hạt nhân được thiết kế cho Android 14, chẳng hạn như android14-6.1, có thể được sử 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 hạt nhân Hạt nhân tính năng
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
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 Có thể áp dụng các quy định hạn chế bổ sung nếu BSP liên kết đã được cập nhật cho bản phát hành nền tảng. Nói chung, số bản phát hành Android của hạt nhân phải cao hơn hoặc bằng phiên bản FCM mục tiêu. Hãy xem phần Đối tượng giao diện nhà cung cấp – khớp các 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 nhân phổ biến được hiển thị trong Hình 1.

Tạo nhân phổ biến từ nhân android-mainline

Hình 1. Tạo nhân phổ biến từ nhân android-mainline

Xin lưu ý rằng một hạt nhân Android chung mới android14-6.1 đã đượ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ư minh hoạ trong Hình 1, mỗi phiên bản hạt nhân có thể là cơ sở cho hai hạt nhân GKI. Ví dụ: hai hạt nhân v5.15 là android13-5.15android14-5.15, cả hai đều là hạt nhân tính năng cho các bản phát hành nền tảng tương ứng. Điều này cũng xảy ra với phiên bản 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 (2024), mỗi phiên bản hạt nhân chỉ có một hạt nhân GKI mới (không có hạt 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 hiển thị dưới đây trong Hình 2.

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

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

Để làm rõ quá 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 phiên bản 6.6.

Mỗi nhánh KMI ACK luân phiên qua ba 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ư đã trình bày, LTS thường xuyên được hợp nhất bất kể giai đoạn nào.

Giai đoạn phát triển

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à dev trong Hình 2) và mở ra cho các đó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 ở thượng nguồ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 đượ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). Hãy xem bài viết Tổng quan về GKI để biết thông tin chi tiết về việc giám sát KMI.

Giai đoạn KMI bị treo

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à chúng tôi sẽ không chấp nhận bất kỳ thay đổi nào phá vỡ KMI, trừ phi phát hiện được vấn đề bảo mật nghiêm trọng không thể giảm thiểu mà không ảnh hưởng đến KMI ổn định. Để tránh các lỗi KMI, một số bản vá được hợp nhất từ LTS có thể bị sửa đổi hoặc bị 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 KMI ACK bị đóng băng, bạn có thể chấp nhận các bản sửa lỗi và tính năng của đối tác miễn là hạt nhân chung KMI hiện có không bị hỏng. Bạn có thể mở rộng KMI bằng các ký hiệu mới được xuất miễn là các giao diện bao gồm 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 này sẽ ngay lập tức trở nên ổn định và không bị hỏng do các thay đổi trong tương lai.

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

Số phiên bản KMI

Nếu có một quá trình 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 phải chấp nhận một bản vá thay đổi KMI, thì số lần tạo KMI được ghi lại trong build.config.common sẽ được tăng lên. Bạn có thể tìm thấy phiên bản 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 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ị đóng bă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 hạt nhân

Các 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 gia đình LTS sẽ thay đổi bắt đầu từ các hạt 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 hỗ trợ phiên bản hạt 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 (2024). Khả năng tương thích được xác minh thông qua việc kiểm thử liên tục VTS và CTS của 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 tạo lại các mô-đun nhân trong hình ảnh của 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í 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 tạo lại tất cả các mô-đun.

Hạt nhân GKI chỉ được hỗ trợ cho các bản phát hành ban đầu và các bản phát hành tiếp theo. Các phiên bản cũ 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 thấy các phiên bản hạt nhân được hỗ trợ và kiểm thử 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 Hạt nhân được hỗ trợ để nâng cấp Các nhân được hỗ trợ để khởi chạy
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-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ợ thời gian hoạt động và bản vá bảo mật

ACK nhận được các bản hợp nhất LTS từ nguồn cấp trên và 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 hạt nhân được trích dẫn 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 hạt nhân ổn định ở thượng nguồn tương ứng tại kernel.org. Trong trường hợp này, Google sẽ 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 hạt nhân ở trạng thái EOLed, chúng sẽ không còn được Google hỗ trợ và các thiết bị đang chạy các hạt nhân này được coi là dễ bị tấn công.

Kể 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ợ
suốt đời
(năm)
EOL
android-4.19-stable 2018-10-22 6 2025-01-01
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

Kiểm thử nhân phổ biến

Các hạt nhân phổ biến đượ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 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) bắt đầu 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

Quy trình 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 cho một nhánh nhân phổ biến. Hàng trăm cấu hình bản dựng được kiểm thử và khởi động trên nhiều bo mạch. 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ử trước khi gửi được dùng để ngăn chặn việc đưa lỗi vào 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ẻ "Kiểm tra" của sự thay đổi mã trong chương trình nhân hệ điều hành chung của Android.

Quy trình 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 phát hành trong các nhánh nhân kernel 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 kernel phổ biến của Android trong ci.android.com. Bằng cách nhập aosp_kernel làm một phần tên nhánh trong ci.android.com, bạn sẽ thấy danh sách các nhánh nhân kernel có 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 chương 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 của nền tảng Android sẽ được chạy dưới dạng trước khi gửi cho các nhánh hạt nhân 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"
    }
  ]
}

Kiểm thử 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 phổ biến của Android khi các bản vá mới được cam kết. Chạy nhiều loại kiểm thử khởi động, chức năng và hiệu suất. Tham gia nhóm công khai cros-kernel-buildreports

Ma trận kiểm thử

Nhân hệ điều hành Android chung Bản phát hành Nền tảng Android Bộ kiểm thử
Trình đơn chính 15 14 13 12 11 10 LKFT KernelCI Trước khi gửi Đăng bài 0-day
android-mainline
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

Đóng góp cho các nhân phổ biến của Android

Nhìn chung, bạn nên phát triển tính năng trên Linux chính chứ không phải trên nhân Android phổ biến. Chúng tôi rất khuyến khích bạ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 nhân kernel Android rất sẵn lòng hỗ trợ các nỗ lực chuyển lên trên để mang lại lợi ích cho 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 sau.