Hạt nhân chung AOSP (còn được gọi là hạt nhân chung của Android hoặc ACK ) nằm ở hạ nguồn 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 chưa được hợp nhất vào dòng chính hoặc hạt nhân Được hỗ trợ dài hạn (LTS). Những bản vá này có thể bao gồm:
- Backports và cherry-picks của 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 các thiết bị Android nhưng vẫn đang được phát triển ngược dòng (ví dụ: tối ưu hóa vị trí tác vụ của Trình lập lịch biểu nhận biết năng lượng).
- Các tính năng của nhà cung cấp/OEM hữu ích cho các đối tác hệ sinh thái khác (ví dụ: sdcardfs).
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 Linux được sáp nhập vào android-mainline
bất cứ khi nào Linus Torvalds đăng bản phát hành hoặc ứng cử viên phát hành. Trước năm 2019, các nhân chung của Android được xây dựng bằng cách sao chép nhân LTS được khai báo gần đây và thêm các bản vá dành riêng cho Android. Quá trình này đã thay đổi vào năm 2019 để phân nhánh Android common kernel mới từ android-mainline
. Mô hình mới này tránh được nỗ lực đáng kể để chuyển tiếp cổng và kiểm tra các bản vá Android bằng cách hoàn thành cùng một kết quả tăng dần. android-mainline
trải qua thử nghiệm liên tục đáng kể, mô hình này đảm bảo 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 ngược dòng, hạt nhân chung tương ứng được phân nhánh từ android-mainline
. Điều này cho phép các đối tác bắt đầu 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 nhánh hạt nhân chung mới được tạo, các đối tác có thể thay đổi liền mạch nguồn hợp nhất sang nhánh mới.
Các nhánh hạt nhân phổ biến khác nhận được các hợp nhất thường xuyên từ hạt nhân LTS được liên kết của chúng. 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 Linux 4.19.64 được đăng, nó đã được hợp nhất vào các nhân chung 4.19 (ví dụ: android-4.19-q
). Các đối tác được khuyến khích thường xuyên hợp nhất từ các nhân chung vào nhân sản phẩm của họ để luôn cập nhật các bản sửa lỗi dành riêng cho LTS và Android.
Nhánh hạt 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 duy nhất bởi 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 tên <androidRelease>-<kernel version>
. Ví dụ: kernel 5.4 GKI cho Android 11 có tên là android11-5.4.
Đối với Android 12, có hai nhân GKI bổ sung, android12-5.4
và android12-5.10
.
Cành nhân món tráng miệng kế thừa
Nhân món tráng miệng kế thừa được tạo ra để đảm bảo rằng quá trình phát triển tính năng mới không ảnh hưởng đến việc hợp nhất từ nhân chung của Android. Các nhánh đã được tạo trước khi phát hành món tráng miệng có liên quan và nhận được các hợp nhất thường xuyên từ LTS, nhưng không có tính năng mới. Ví dụ: android-4.9-q
nhận hợp nhất từ nhánh LTS 4.9.y.
Nếu phiên bản nhân không phải là nhân khởi chạy, thì sẽ không có nhân tráng miệng nào được tạo, nhưng nhân được liên kết với bản phát hành nền tảng gần đây nhất sẽ hợp lệ để nâng cấp lên các bản phát hành nền tảng Android trong tương lai. Ví dụ: android-4.9-q
là nhánh cuối cùng của nhánh tráng miệng android-4.9*
, vì vậy, nó được hỗ trợ và thử nghiệm với bản phát hành nền tảng ban đầu, Android 10. Nó cũng được hỗ trợ và thử nghiệm với các bản phát hành nền tảng hỗ trợ nâng cấp thiết bị chạy 4.9 hạt nhân: Android 11 và Android 12.
Vì sơ đồ đặt tên món tráng miệng cho các bản phát hành nền tảng Android đã bị loại bỏ với Android 10, nên các bản phát hành món tráng miệng cuối cùng có tên là android-4.14-r
và android-4.19-r
thay vào đó được gọi là android-4.14-stable
và android-4.19-stable
.
Nhân món tráng miệng được thay thế bằng nhân GKI bắt đầu từ Android 11, vì vậy, danh sách đầy đủ các nhân món tráng miệng được hỗ trợ nằm trong bảng này.
phát hành nền tảng Android | hạt nhân | được hỗ trợ cho đến khi |
---|---|---|
Android 10 | android-4.9-q android-4.14-q android-4.19-q | Tháng Giêng 2023 |
Android 11 | android-4.14-stable android-4.19-stable | Tháng Giêng 2024 |
Các nhánh hạt nhân phát hành kế thừa
Các hạt nhân phát hành được duy trì để cung cấp các bản vá lỗi được trích dẫn trong Bản tin bảo mật Android hàng tháng . Chúng được tạo cho mỗi nhân khởi chạy khi có một bản phát hành nền tảng Android mới. Chúng không được dùng nữa khi bản phát hành nền tảng hoặc hạt nhân được liên kết không được dùng nữa như được mô tả trong Thời gian hỗ trợ và các bản vá bảo mật .
Mỗi tháng khi Bản tin bảo mật Android được xuất bản, các nhân này được cập nhật với các bản sao lưu của các bản vá được trích dẫn trong bản tin có liên quan đến các nhân thượng nguồn và nhân thông thường của Android. Họ không nhận được các bản vá LTS, vì vậy số phiên bản phụ không bao giờ thay đổi. Chúng không chứa backport cho các bản vá dành riêng cho nhà cung cấp.
Trong các bản phát hành nền tảng Android 11 trở lên, các đối tác phải hợp nhất từ các nhân GKI tráng miệng hoặc nhân GKI để áp dụng các bản vá được trích dẫn trong Bản tin bảo mật Android. Sẽ không có kernel phát hành nào được tạo cho các bản phát hành nền tảng Android 11 trở lên.
Do đó, danh sách đầy đủ của 14 hạt nhân phát hành được hiển thị trong bảng này và không hạt nhân nào sẽ được thêm vào.
phát hành nền tảng Android | hạt nhân | được hỗ trợ cho đến khi |
---|---|---|
Android 10 | android-4.9-q-release android-4.14-q-release android-4.19-q-release | Tháng Giêng 2023 |
Tính năng và khởi chạy hạt nhân
Mỗi bản phát hành nền tảng Android đều hỗ trợ khởi chạy các thiết bị mới dựa trên bất kỳ phiên bản nào trong ba phiên bản nhân Linux. Như được hiển thị trong bảng bên dưới, các hạt nhân khởi chạy cho Android 11 là android-4.14-stable
, android-4.19-stable
và android11-5.4
.
Do nâng cấp nhân thường không bắt buộc 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 sử dụng để khởi chạy thiết bị. Do đó, các nhân được thiết kế cho Android 10, chẳng hạn như android-4.19-q
, 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 11. Bắt đầu với Android 12, sẽ có ít nhân tính năng hơn nhân khởi chạy để giới hạn số lượng KMI ổn định phải được hỗ trợ.
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 10 (2019) | android-4.9-q android-4.14-q android-4.19-q | android-4.9-q android-4.14-q android-4.19-q |
Android 11 (2020) | android-4.14-stable android-4.19-stable android11-5.4 | android-4.14-stable android-4.19-stable android11-5.4 |
Android 12 (2021) | android-4.19-stable android11-5.4 1 android12-5.4 android12-5.10 | android12-5.4 android12-5.10 |
Android 13 (2022) | android12-5.4 1 android12-5.10 1 android13-5.10 android13-5.15 | android13-5.10 android13-5.15 |
1 Các hạn chế bổ sung có thể áp dụng nếu BSP được liên kết đã được cập nhật cho bản phát hành nền tảng. Nói một cách tổng quát hơn, 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 đích . Xem Đối tượng giao diện nhà cung cấp - khớp các nhánh hạt nhân để biết chi tiết. |
Hệ thống phân cấp hạt nhân chung
Phân nhánh từ android-mainline
Mức cao nhất của hệ thống phân cấp hạt nhân chung được thể hiện trong Hình 1.
Hình 1. Tạo kernel chung từ android-mainline kernel
Lưu ý rằng kernel Android common mới android12-5.10
đã được phân nhánh từ android-mainline
vào năm 2020. Vào năm 2021, khi LTS tiếp theo được khai báo, android13-5.15
đã được phân nhánh từ android-mainline
.
Như thể hiện trong Hình 1, mỗi phiên bản nhân là cơ sở cho hai nhân GKI. Ví dụ: hai nhân v5.4 là android11-5.4
và android12-5.4
, 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 của chúng. Đây cũng sẽ 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
sẽ phân nhánh từ android12-5.10
tại mốc hoàn thành tính năng kernel 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.
Vòng đời chi nhánh ACK KMI
Vòng đời của nhánh ACK KMI được hiển thị bên dưới trong Hình 2.
Hình 2. 5.10 Vòng đời nhánh ACK KMI
Để làm rõ quá trình phát triển và vòng đời nhánh, Hình 2 tập trung vào các nhánh ACK KMI cho 5.10.
Mỗi nhánh ACK KMI quay vòng qua ba giai đoạn được chỉ ra trong Hình 2 bằng các màu khác nhau trong mỗi nhánh. Như được hiển thị, 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 nó được tạo ra, một nhánh ACK KMI sẽ bước vào giai đoạn phát triển ( dev trong Hình 2), và sẵn sàng đóng góp các tính năng cho bản phát hành nền tảng Android tiếp theo. Trong Hình 2, android12-5.10
được tạo khi 5.10 được khai báo là nhân LTS ngược dòng mới. Nhánh ACK KMI thứ hai cho phiên bản kernel có thể được tạo trước đó để cho phép phát triển bản phát hành tiếp theo. Trong Hình 2, android13-5.10
được tạo khi android12-5.10
chuyển ra khỏi giai đoạn phát triển.
giai đoạn ổn định
Khi nhánh ACK KMI được tuyên bố là hoàn tất tính năng, nó sẽ chuyển sang giai đoạn ổn định , được gắn nhãn là đâm trong Hình 2. Các tính năng của đố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 được bật để phát hiện bất kỳ thay đổi nào ảnh hưởng đến giao diện. Trong giai đoạn này, các thay đổi phá vỡ KMI được chấp nhận, nhưng định nghĩa KMI phải được cập nhật khi cần thiết. Xem tổng quan về GKI để biết chi tiết về giám sát KMI.
Giai đoạn đóng băng KMI
Trước khi một bản phát hành nền tảng mới được đẩy lên AOSP, nhánh ACK KMI bị đóng băng và vẫn bị đó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 phá vỡ KMI nào được chấp nhận trừ khi xác định được vấn đề bảo mật nghiêm trọng mà không thể giảm thiểu mà không ảnh hưởng đến KMI ổn định. Để tránh sự cố KMI, một số bản vá được hợp nhất từ LTS có thể được 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 thiết bị Android.
Khi nhánh ACK KMI bị đóng băng, các bản sửa lỗi và tính năng đố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. KMI có thể được mở rộng với các biểu tượng được xuất mới 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, chúng ngay lập tức trở nên ổn định và không thể bị phá vỡ bởi những 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 được sử dụng bởi nhân chung của giao diện KMI vì nó 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, thêm một chức năng mới là tốt:
struct foo2 {
struct foo orig_foo;
int new_field;
};
int do_foo2(struct foo2 &myarg)
{
do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);
Đối với thời gian tồn tạ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ì để 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ị được khởi chạy cùng. Thử nghiệm 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 được duy trì. Vì vậy, trong Hình 2, nhân android12-5.10
có thể được sử dụng cho thiết bị Android 12 và thiết bị Android 13. Do 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 nhân android12-5.4
có thể được sử dụng cho các thiết bị Android 13 để khởi chạy hoặc nâng cấp.
Khi bước vào giai đoạn đóng băng, nhánh được gắn thẻ git với chuỗi phiên bản KMI chứa số thế hệ KMI. Ví dụ: khi android11-5.4
bị treo, nó được gắn thẻ phiên bản KMI chuỗi 5.4-android11-0
trong đó 0
ở cuối là số thế hệ KMI. Nếu có sự cố bảo mật hoặc sự kiện khác yêu cầu chấp nhận bản vá thay đổi KMI, thì số lượng tạo KMI sẽ tăng lên và nhánh được gắn thẻ lại. Ví dụ: nếu một thay đổi như vậy được chấp nhận vào android11-5.4
, nhánh sẽ được gắn thẻ với phiên bản KMI mới, 5.4-android11-1
. Có thể tìm thấy thế hệ KMI hiện tại bằng cách sử dụng uname
:
$ uname -r
5.4.61-android11-0-00153-ga972f59040e4
Con số sau khi phát hành nền tảng là thế hệ KMI (0 trong trường hợp này).
Nếu thế hệ KMI thay đổi, nhân 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 đó, do đó, các mô-đun phải được xây dựng lại và cập nhật đồng bộ với nhân. Thay đổi thế hệ KMI dự kiến sẽ rất hiếm.
Khả năng tương thích giữa các kernel
Các yêu cầu về khả năng tương thích giữa các nhân trong cùng họ LTS đang thay đổi bắt đầu với các 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ả cá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 tương thích ngược với các nhân GKI từ 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 android12-5.4
được phát triển cho Android 12 trên các thiết bị chạy Android 13. Khả năng tương thích được xác minh thông qua thử nghiệm VTS và CTS liên tục 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 yêu cầu xây dựng 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ì vậy, ví dụ: không thể thay thế android12-5.10
bằng nhân android13-5.10
mà không xây dựng 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 đầu tiên và tiếp theo của chúng. Chúng không được hỗ trợ cho các bản phát hành cũ hơn. Vì vậy, nhân android13-5.10
không được hỗ trợ trên thiết bị Android 12.
Hạt nhân kế thừa
Các nhân món tráng miệng kế thừa ( *-q
và *-stable
) không tương thích ngược trên các bản phát hành nền tảng Android, nhưng các nhân từ hai bản phát hành nền tảng Android trước đó được hỗ trợ để nâng cấp. Do đó, thiết bị khởi chạy với Android 10 sử dụng nhân dựa trên android-4.19-q
có thể tiếp tục sử dụng nhân android-4.19-q
khi nâng cấp lên Android 2020 hoặc cập nhật mã dành riêng cho nhà cung cấp để hỗ trợ android-4.19-stable
.
ma trận tương thích
Bảng này hiển thị các phiên bản nhân được hỗ trợ và thử nghiệm với mỗi bản phát hành nền tảng Android.
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 10 (2019) | android-3.18 (EOL)android-4.4-o (EOL)android-4.9-o (EOL)android-4.9-p (EOL)android-4.14-p (EOL) | android-4.9-q |
Android 11 (2020) | android-4.4-o (EOL)android-4.4-p (EOL)android-4.9-o (EOL)android-4.9-p (EOL)android-4.9-q android-4.14-p (EOL)android-4.14-q | android-4.14-stable |
Android 12 (2021) | android-4.9-o (EOL)android-4.9-p (EOL)android-4.9-q (EOL)android-4.14-q | android-4.19-stable |
Android 13 (2022) | android-4.9-q | android11-5.4 |
Hỗ trợ trọn đời và các bản vá bảo mật
Các nhân chung của Android được hỗ trợ cho đến khi nhân LTS được liên kết hoặc bản phát hành Nền tảng Android không còn được hỗ trợ nữa. Mặc dù hạt nhân được hỗ trợ, nhưng nó vẫn tiếp tục nhận được các hợp nhất LTS từ thượng nguồn 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ả cá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 có liên quan đến các nhân phổ biến của Android.
Các đối tác có thể tự tin rằng bằng cách thường xuyên hợp nhất từ các nhân chung của Android, họ sẽ nhận được tất cả các bản vá bảo mật nhân có thể.
Kiểm tra hạt nhân chung
Các hạt nhân thông thường được thử nghiệm với một số hệ thống CI bên cạnh thử nghiệm xuôi dòng của các nhà cung cấp.
Kiểm tra chức năng hạt nhân Linaro
Các thử nghiệm Kiểm tra chức năng hạt nhân Linaro (LKFT) bắt đầu các bộ thử nghiệm khác nhau bao gồm kselftest, LTP, VTS và CTS trên một bộ thiết bị arm32 và arm64 vật lý. Kết quả kiểm tra gần đây có thể được tìm thấy ở đây .
thử nghiệm KernelCI
Các thử nghiệm xây 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 nhân chung. Hàng trăm cấu hình bản dựng được thử nghiệm và khởi động trên nhiều bảng khác nhau. Bạn có thể tìm thấy các kết quả gần đây cho nhân Android tại đây .
Thử nghiệm trước và sau khi gửi trên Android
Các bài kiểm tra gửi trước được sử dụng để ngăn chặn các lỗi được đưa vào các hạt nhân chung. Kết quả không có sẵn công khai tại thời điểm này.
Kiểm tra postsubmit của Android được thực hiện khi một bản vá mới được cam kết với một nhánh nhân chung. Bằng cách nhập aosp_kernel
làm tên nhánh một phần, bạn sẽ thấy danh sách các nhánh nhân có sẵn kết quả. Ví dụ: bạn có thể tìm thấy kết quả cho android-mainline
tại đây .
thử nghiệm 0 ngày
Thử nghiệm 0 ngày thực hiện thử nghiệm từng bản vá trên tất cả các nhánh nhân chung của Android khi các bản vá mới được cam kết. Các thử nghiệm khởi động, chức năng và hiệu suất khác nhau được chạy. Tham gia nhóm công khai cros-kernel-buildreports
ma trận đề thi
Hạt nhân chung của Android | Bản phát hành nền tảng Android | Bộ thử nghiệm | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bậc thầy | 13 | 12 | 11 | 10 | 9 (Bánh) | LKFT | hạt nhânCI | gửi trước | Đăng Gửi | 0 ngày | |
android-mainline | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android-4.19-q | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | android-4.9-q | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ |
Đóng góp cho nhân chung của Android
Nói chung, việc 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 thông thường của Android. Sự phát triển ngược dòng được khuyến khích mạnh mẽ và sau khi sự phát triển được chấp nhận ở đó, nó có thể dễ dàng được nhập vào nhánh ACK cụ thể khi cần. Nhóm nhân Android rất sẵn lòng hỗ trợ các nỗ lực ngược dòng 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 .