Trang này mô tả lược đồ tạo phiên bản cho Hình ảnh hạt nhân chung (GKI). Hình ảnh hạt nhân chung (GKI) có một giá trị nhận dạng duy nhất gọi là bản phát hành hạt nhân. Bản phát hành nhân bao gồm phiên bản giao diện mô-đun nhân (KMI) và cấp phụ. Bản phát hành hạt nhân dành riêng cho hình ảnh đang được phát hành, trong khi phiên bản KMI đại diện cho giao diện mà bản phát hành được tạo từ đó. Một phiên bản KMI có thể hỗ trợ nhiều bản phát hành nhân. Mỗi bản phát hành nhân hệ điều hành chỉ liên kết với một phiên bản KMI. Trong trường hợp hiếm gặp khi giao diện mô-đun hạt nhân phải được thay đổi, quá trình tạo KMI sẽ được lặp lại để phản ánh sự thay đổi trong phiên bản KMI.
Tóm tắt các điều khoản
Bảng sau đây tóm tắt các thuật ngữ quan trọng được sử dụng trên trang này và cho các bản cập nhật GKI.
Tên | Ký hiệu | Ví dụ | Mô tả |
---|---|---|---|
Bản phát hành kernel | w.x.y-zzz-k-suffix | 5.4.42-android12-0-foo | Giá trị nhận dạng duy nhất của bản phát hành GKI. Đây là giá trị do uname trả về. |
Phiên bản KMI | x-zzz-k | 5.4-android12-0 | Mô tả giao diện mô-đun hạt nhân (KMI) giữa GKI và các mô-đun hạt nhân có thể tải động (DLKM). |
Cấp con | y | 42 | Mô tả thứ tự phát hành của các bản phát hành nhân trong cùng một phiên bản KMI. |
Bảng sau đây liệt kê các thuật ngữ liên quan khác để bạn tham khảo.
Tên | Ký hiệu | Ví dụ | Mô tả |
---|---|---|---|
w.x.y | w.x.y | 5.4.42 |
Để biết thông tin chi tiết, hãy xem Makefile hạt nhân Linux (tìm "KERNELRELEASE"). w.x.y được sử dụng trực tiếp trong toàn bộ tài liệu này. Đây cũng thường được gọi là số phiên bản gồm ba phần. Thuật ngữ được sử dụng trong VINTF, phiên bản nhân, có thể gây nhầm lẫn với các thuật ngữ khác, đặc biệt là w. Biến này được gọi là kernel_version_tuple trong libkver. Không được giảm bộ dữ liệu này bằng bất kỳ bản cập nhật nào, bao gồm cả OTA hoặc dòng chính. |
Nhánh nhân | zzz-x | android12-5.4 | Cụm từ này được dùng trong Các loại nhánh nhân phổ biến. |
Phiên bản | w | 5 | Thuật ngữ này không được dùng trong tài liệu này. Biến này được gọi là phiên bản trong libkver. |
Cấp bản vá | lần | 4 | Thuật ngữ này không được dùng trong tài liệu này. Biến này được gọi là patch_level trong libkver. |
Bản phát hành Android | zzz | android12 |
Đây là số bản phát hành Android (món tráng miệng) liên kết với nhân.
Khi so sánh trường Số bản phát hành Android không được giảm xuống theo bất kỳ bản cập nhật nào, bao gồm cả bản cập nhật qua mạng không dây (OTA) hoặc bản chính. |
Tạo KMI | k | 0 |
Đây là một số bổ sung được thêm vào để xử lý các sự kiện không có khả năng xảy ra. Nếu bản sửa lỗi bảo mật yêu cầu thay đổi KMI trong cùng một bản phát hành Android, thì một bản tạo KMI sẽ được tăng lên. Số tạo KMI bắt đầu bằng 0. |
Thiết kế phiên bản
Bản phát hành kernel
Định nghĩa
Đối với các thiết bị đi kèm với GKI, bản phát hành hạt nhân được xác định như sau:
KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w .x .y -zzz -k -something
Để biết thêm thông tin, hãy xem phần Xác định bản phát hành hạt nhân trên thiết bị.
Sau đây là ví dụ về bản phát hành hạt nhân.
5.4.42-android12-0-00544-ged21d463f856
Mô tả
Bản phát hành hạt nhân là mã nhận dạng duy nhất của bản phát hành GKI. Nếu hai tệp nhị phân GKI có cùng một bản phát hành hạt nhân, thì các tệp đó phải giống hệt nhau theo byte.
Bản phát hành hạt nhân bao gồm phiên bản KMI, cấp phụ và hậu tố. Đối với mục đích của tài liệu này, hậu tố sau khi tạo KMI sẽ bị bỏ qua.
Phiên bản KMI
Định nghĩa
Phiên bản KMI được xác định như sau:
KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w .x -zzz -k
Xin lưu ý rằng cấp phụ y
không thuộc phiên bản KMI. Ví dụ như trong bản phát hành Kernel, phiên bản KMI là:
5.4-android12-0
Mô tả
Phiên bản KMI mô tả giao diện mô-đun nhân (KMI) giữa GKI và các mô-đun nhân hệ điều hành có thể tải động (DLKM).
Nếu hai bản phát hành hạt nhân có cùng phiên bản KMI, thì các bản phát hành này sẽ triển khai cùng một giao diện mô-đun hạt nhân. Các DLKM tương thích với một DLKM cũng tương thích với DLKM còn lại.
Không được giảm phiên bản KMI do bất kỳ bản cập nhật OTA nào.
Cấp con
Cấp độ con, y
, mô tả thứ tự phát hành của các bản phát hành nhân trong cùng một phiên bản KMI.
Đối với hai bản phát hành hạt nhân có cùng phiên bản KMI nhưng có cấp phụ Y1 và Y2 tương ứng:
- Nếu Y1 nhỏ hơn hoặc bằng Y2, thì thiết bị chạy Y1 có thể nhận được bản cập nhật lên Y2.
- Nếu Y1 lớn hơn Y2, thì thiết bị chạy Y1 không thể cập nhật lên Y2.
Tức là nếu phiên bản KMI không thay đổi, thì không được giảm cấp phụ xuống bằng bất kỳ bản cập nhật OTA nào.
Xác định bản phát hành hạt nhân từ một thiết bị
Bạn có thể tìm thấy bản phát hành hạt nhân đầy đủ bằng cách thực thi uname -r
hoặc uname(2)
bằng đoạn mã sau:
std::string get_kernel_release() {
struct utsname buf;
return uname(&buf) == 0 ? buf.release : "";
}
Ví dụ về kết quả:
5.4.42-android12-0-00544-ged21d463f856
Đối với mục đích của tài liệu này, mọi nội dung sau khi tạo KMI sẽ bị bỏ qua khi trích xuất thông tin hạt nhân. Chính thức hơn, kết quả của uname -r
được phân tích cú pháp bằng regex sau đây (giả sử zzz luôn bắt đầu bằng "android"):
^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$
Thông tin bị bỏ qua có thể bao gồm thông tin như số bản dựng ci.android.com, số lượng bản vá trên hạt nhân cơ sở và hàm băm SHA của thay đổi đã cam kết trong git.
câu lạc bộ libkver
Thư viện libkver cung cấp giao diện C++ để phân tích cú pháp bản phát hành hạt nhân hoặc chuỗi phiên bản KMI. Để biết danh sách các API mà libkver hiển thị, hãy xem packages/modules/Gki/libkver/include/kver
.
Kiểm tra VINTF
Đối với Android 11 trở xuống, phần phát hành Android của phiên bản KMI được nhà sản xuất thiết bị chỉ định theo cách thủ công trong tệp kê khai thiết bị. Để biết thông tin chi tiết, hãy xem Quy tắc so khớp hạt nhân VINTF.
Trên Android S, phần bản phát hành Android của phiên bản KMI có thể được trích xuất từ nhân và chèn vào tệp kê khai thiết bị tại thời điểm xây dựng.
Vì các yêu cầu về cấu hình hạt nhân thường không thay đổi, nên bạn không cần mã hoá k
trong ma trận tương thích. Tuy nhiên, trong trường hợp hiếm khi yêu cầu cấu hình hạt nhân cần được thay đổi, hãy đảm bảo những điều sau:
- Xoá yêu cầu tương ứng khỏi ma trận tương thích.
- Thêm các kiểm thử VTS bổ sung để kiểm tra các yêu cầu mới có điều kiện về việc tạo KMI.
Phiên bản hình ảnh khởi động trong siêu dữ liệu OTA
Ngay cả khi được cập nhật thông qua một bản cập nhật qua OTA, hình ảnh khởi động vẫn phải được gói ở định dạng tải trọng OTA payload.bin
. Tải trọng OTA mã hoá một trường version
cho mỗi phân vùng. Khi update_engine
xử lý một tải trọng OTA, ứng dụng sẽ so sánh trường này để đảm bảo phân vùng không bị hạ cấp.
Để tránh nhầm lẫn, trường version
cho phân vùng khởi động trong siêu dữ liệu OTA được gọi là boot image version
.
Vì ramdisk luôn được tạo từ đầu, nên việc sử dụng dấu thời gian ramdisk là đủ để mô tả toàn bộ hình ảnh khởi động. Bạn không cần mã hoá bản phát hành hạt nhân trong phiên bản hình ảnh khởi động, trừ phi bạn đang ghép nối một hình ảnh khởi động cũ với tệp nhị phân hạt nhân mới trong tương lai.
Trước khi cập nhật qua mạng không dây, ứng dụng OTA sẽ kiểm tra phiên bản hình ảnh khởi động theo cách giống như mọi phân vùng khác.