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
- Các 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 nhân bản 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 chung Android mới 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 ở thượng nguồ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 nhân mới chung, 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.
Các lần hợp nhất này thường được thực hiện ngay sau khi phát hành bản phát hành LTS. Ví dụ: khi Linux 6.1.75 được đăng, phiên bản này đã được hợp nhất vào nhân phổ biến 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 bản sửa lỗi LTS và dành riêng cho 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.
Tính năng và hạt nhân khởi chạy
Trước Android 15, bạn có thể sử dụng bất kỳ nhân nào trong số 3 nhân mới 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 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.6
và android14-6.1
.
Vì không bắt buộc phải 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 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 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
|
android12-5.10
android12-5.4
|
Android 11 (2020) |
android11-5.4
|
android11-5.4
|
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 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.
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.15
và android14-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 thể hiện trong Hình 2 dưới đây.
Hình 2. 6.6 ACK Vòng đời của nhánh 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 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 sẽ được chấp nhận và định nghĩa KMI sẽ được cập nhật theo tần suất xác định trước (thường là 2 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 nền tảng mới được đẩy vào AOSP, nhánh ACK KMI sẽ được đóng băng và vẫn bị đóng băng 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 một 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ị các thay đổi trong tương lai làm hỏng.
Ví dụ: không được phép thay đổi thêm 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 đượ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 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 nhân android14-6.1
cho các thiết bị Android 15 để khởi chạy hoặc nâng cấp.
Số lần tạo 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 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 hạt nhân. 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 kể 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 nền tảng Android còn tương thích ngược với các hạt nhân GKI từ các bản phát hành trước. Vì vậy, bạn có thể sử dụng hạt nhân android14-6.1
được phát triển cho Android 14 (2023) một cách an toàn 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 của 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 | Hạt nhân được hỗ trợ để khởi chạy |
---|---|---|
Android 15 (2024) |
android15-6.6
|
android15-6.6
|
Android 14 (2023) |
android14-6.1
|
android14-6.1
|
Android 13 (2022) |
android13-5.15
|
android13-5.15
|
Android 12 (2021) |
android12-5.10
|
android11-5.4
|
Android 11 (2020) |
android11-5.4
|
android11-5.4
|
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 của 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 đạt đến EOL, các nhân này sẽ không còn được Google hỗ trợ và các thiết bị chạy các nhân đó sẽ đượ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 |
---|---|---|---|
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 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 kiểm thử Kiểm thử chức năng của 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ể xem 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ể xem 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ể tìm thấy bản tóm tắt kết quả kiểm thử trong thẻ "Kiểm tra" của thay đổi mã trong gerrit hạt nhân phổ biến 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ể xem 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ẽ bật vts_kernel_proc_file_api_test làm kiểm thử trước khi gửi tại điểm kiểm tra mã nhân kernel phổ biến của Android.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
Kiểm thử 0 ngày
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. Nhiều quy trình kiểm thử khởi động, chức năng và hiệu suất sẽ được chạy. Tham gia nhóm công khai cros-kernel-buildreports
Ma trận kiểm thử
Hạt nhân chung của Android | 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 | Gửi bài đăng | 0 ngày | |
android-mainline
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
Đó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. Bạn nên phát triển ngược dòng và sau khi phát triển được chấp nhận ở đó, bạn có thể dễ dàng điều chỉnh cho phù hợp với 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.