Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Phiên bản GKI

Trang này mô tả lược đồ lập 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 mã định danh duy nhất được 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 con. 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 xây dựng từ đó. Một phiên bản KMI có thể hỗ trợ nhiều bản phát hành nhân. Bản phát hành nhân chỉ được gắn với một phiên bản KMI. Trong trường hợp không chắc chắn mà giao diện mô-đun hạt nhân phải được thay đổi, thế hệ KMI đượ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 Biểu tượng Ví dụ Sự miêu tả
Kernel phát hành hậu tố wxy-zzz-k- 5.4.42-android12-0-foo Giá trị nhận dạng duy nhất cho bản phát hành GKI. Đây là giá trị được trả về bởi uname .
Phiên bản KMI wx-zzz-k 5,4-android12-0 Mô tả giao diện mô-đun nhân (KMI) giữa GKI và mô-đun nhân có thể tải động (DLKM).
Cấp phụ y 42 Mô tả thứ tự phát hành của các bản phát hành hạt nhân trong cùng một phiên bản KMI.

Bảng sau liệt kê các thuật ngữ liên quan khác để tham khảo.

Tên Biểu tượng Ví dụ Sự miêu tả
wxy wxy 5.4.42

Để biết chi tiết, hãy xem Cấu hình hạt nhân Linux (tìm kiếm "KERNELRELEASE").

wxy đượ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 ba phần . Thuật ngữ được sử dụng trong VINTF, phiên bản hạt 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 .

Tuple này không được giảm bởi bất kỳ bản cập nhật nào, bao gồm cả OTA hoặc đường chính.

Nhánh hạt nhân zzz-wx android12-5.4 Thuật ngữ này được sử dụng trong các kiểu nhánh hạt nhân chung .
Phiên bản w 5 Thuật ngữ này không được sử 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á x 4 Thuật ngữ này không được sử 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ố phát hành Android (món tráng miệng) mà hạt nhân được liên kết với.

Khi so sánh trường AndroidRelease , phần số được trích xuất từ ​​chuỗi để so sánh.

Số lượng bản phát hành Android không được giảm bởi bất kỳ bản cập nhật nào, bao gồm cả OTA hoặc đường dây chính.

Thế hệ KMI k 0

Đây là một số bổ sung được thêm vào để đối phó với các sự kiện không thể 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ì thế hệ KMI sẽ tăng lên.

Số thế hệ KMI bắt đầu bằng 0.

Thiết kế phiên bản

Kernel phát hành

Sự định nghĩa

Đối với các thiết bị có GKI, bản phát hành hạt nhân được định nghĩa 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 Xác định bản phát hành hạt nhân từ một thiết bị .

Sau đây là một ví dụ về bản phát hành hạt nhân.

5.4.42-android12-0-00544-ged21d463f856

Sự miêu tả

Bản phát hành hạt nhân là ID duy nhất của bản phát hành GKI. Nếu hai tệp nhị phân GKI có cùng bản phát hành nhân, chúng phải giống nhau về mặt byte.

Một bản phát hành hạt nhân bao gồm một phiên bản KMI, một mức phụ và một 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 bị bỏ qua.

Phiên bản KMI

Sự định nghĩa

Phiên bản KMI được định nghĩa như sau:

KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w      .x         -zzz           -k

Lưu ý rằng mức phụ, y không phải là một phần của phiên bản KMI. Ví dụ trong bản phát hành Kernel , phiên bản KMI là:

5.4-android12-0

Sự miêu tả

Phiên bản KMI mô tả giao diện mô-đun nhân (KMI) giữa GKI và mô-đun nhân có thể tải động (DLKM).

Nếu hai bản phát hành nhân có cùng phiên bản KMI, chúng sẽ triển khai cùng một giao diện mô-đun nhân. Các DLKM tương thích với một cái cũng tương thích với cái kia.

Phiên bản KMI không được giảm bởi bất kỳ bản cập nhật OTA nào.

Cấp phụ

Mức phụ, y , mô tả thứ tự phát hành của các bản phát hành hạt nhân trong cùng một phiên bản KMI.

Đối với hai bản phát hành nhân có cùng phiên bản KMI nhưng có mức phụ Y1 và Y2 tương ứng:

  • Nếu Y1 nhỏ hơn hoặc bằng Y2, 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, thiết bị chạy Y1 không thể được cập nhật lên Y2.

Có nghĩa là, nếu phiên bản KMI không thay đổi, cấp phụ không được giảm bởi 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ị

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) với đoạn mã sau:

std::string get_kernel_release() {
  struct utsname buf;
  return uname(&buf) == 0 ? buf.release : "";
}

Một đầu ra ví dụ là:

5.4.42-android12-0-00544-ged21d463f856

Đối với mục đích của tài liệu này, mọi thứ sau khi tạo KMI đều bị bỏ qua khi trích xuất thông tin hạt nhân. Chính thức hơn, đầu ra của uname -r được phân tích cú pháp với regex sau (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 các thông tin như số bản dựng ci.android.com , số bản vá lỗi ở phía trên hạt nhân cơ sở và số băm SHA của git commit.

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 chi tiết, hãy xem quy tắc đối sánh hạt nhân VINTF .

Từ Android S, phần phát hành Android của phiên bản KMI có thể được trích xuất từ ​​hạt nhân và đưa 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 cấu hình hạt nhân thường không thay đổi, nên không cần mã hóa k trong ma trận tương thích. Tuy nhiên, trong trường hợp không chắc chắn khi yêu cầu cấu hình hạt nhân cần phải thay đổi, hãy đảm bảo những điều sau:

  • Yêu cầu tương ứng từ ma trận tương thích bị loại bỏ.
  • Các bài kiểm tra VTS bổ sung được thêm vào để kiểm tra các yêu cầu mới có điều kiện đối với thế hệ KMI.

Phiên bản hình ảnh khởi động trong siêu dữ liệu OTA

Ngay cả khi hình ảnh khởi động được cập nhật thông qua OTA một bản cập nhật, nó phải được bao bọc ở định dạng tải trọng OTA, payload.bin . Tải trọng OTA mã hóa trường version cho mỗi phân vùng. Khi update_engine xử lý tải trọng OTA, nó 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 .

Bởi vì đĩa ram luôn được xây dựng từ đầu, việc sử dụng dấu thời gian đĩa ram là đủ để mô tả toàn bộ hình ảnh khởi động. Không cần mã hóa bản phát hành nhân trong phiên bản hình ảnh khởi động, trừ khi bạn đang ghép hình ảnh khởi động cũ sang tệp nhị phân nhân mới trong tương lai.

Trước khi cập nhật OTA, ứng dụng khách OTA sẽ kiểm tra phiên bản hình ảnh khởi động theo cách giống như bất kỳ phân vùng nào khác.