Tạo phiên bản GKI

Trang này mô tả lược đồ tạo phiên bản cho Hình ảnh hạt nhân chung (GKI). Đáp Hình ảnh hạt nhân chung (GKI) có một giá trị nhận dạng duy nhất được gọi là bản phát hành kernel. Bản phát hành nhân hệ điều hành bao gồm của phiên bản giao diện mô-đun nhân (KMI) và cấp phụ. Kernel bản phát hành dành riêng cho hình ảnh được phát hành, trong khi phiên bản KMI biểu thị giao diện tạo bản phát hành. Một phiên bản KMI có thể hỗ trợ nhiều bản phát hành cho nhân hệ điều hành. 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. Ngang bằng trường hợp hiếm gặp khi giao diện mô-đun hạt nhân phải thay đổi, KMI quá trình tạo được lặp lại để phản ánh thay đổi trong phiên bản KMI.

Bản 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à để cập nhật về GKI.

Tên Biểu tượng Ví dụ Mô tả
Bản phát hành kernel Hậu tố 5.4.42-android12-0-foo Giá trị nhận dạng duy nhất của một bản phát hành GKI. Đây là giá trị được trả về bởi uname.
Phiên bản KMI x-zzz-k 5.4-android12-0 Mô tả giao diện mô-đun nhân (KMI) giữa GKI và mô-đun nhân hệ điều hành có thể tải một cách linh động (DLKM).
Cấp phụ y 42 Mô tả thứ tự giải phóng của các phiên bản giải phóng hạt nhân trong cùng một phiên bản KMI.

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

Tên Biểu tượng Ví dụ Mô tả
x.x.y x.x.y 5.4.42

Để biết thông tin chi tiết, hãy xem phần Tạo tệp hạt nhân cho Linux (tìm kiếm "KERNEL phát hành").

w.x.y được sử dụng trực tiếp trong tài liệu này. Đây cũng là 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.

Không được giảm bộ dữ liệu này bởi bất kỳ bản cập nhật nào, kể cả OTA hoặc đường chính.

Nhánh kernel zzz-x android12-5.4 Cụm từ này được dùng trong Các loại nhánh nhân hệ điều hành phổ biến.
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á lần 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 Android 12

Đây là số phát hành cho Android (món tráng miệng) liên kết với hạt nhân với.

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

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

Tạo KMI k 0

Đây là một con số bổ sung được thêm vào để xử lý các trường hợp không có khả năng sự kiện. Nếu một bản sửa lỗi bảo mật đòi hỏi phải thay đổi KMI trong cùng một Bản phát hành Android, một thế hệ KMI tăng lên.

Số thế hệ 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 Xác định bản phát hành hạt nhân từ thiết bị.

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

5.4.42-android12-0-00544-ged21d463f856

Mô tả

Bản phát hành nhân hệ điều hành 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 nhân, chúng phải giống hệt nhau về từng byte.

Bản phát hành hạt nhân bao gồm một phiên bản KMI, một cấp phụ và một hậu tố. Để các mục đích của tài liệu này, thì 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 định nghĩa 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ụ 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à mô-đun nhân hệ điều hành có thể tải một cách linh động (DLKM).

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

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 phụ

Cấp 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ó cấp phụ Y1 và Y2 tương ứng:

  • Nếu Y1 nhỏ hơn hoặc bằng Y2, một thiết bị chạy Y1 có thể nhận được tín hiệu hãy cập nhật lên Y2.
  • Nếu Y1 lớn hơn Y2, bạn không thể cập nhật thiết bị đang chạy Y1 lên Y2.

Nghĩa là, nếu phiên bản KMI không thay đổi thì cấp phụ không được giảm bằng bản cập nhật OTA.

Xác định bản phát hành nhân hệ điều hành trên một thiết bị

Bạn có thể tìm thấy bản phát hành đầy đủ cho nhân 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

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

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 của Android của phiên bản KMI là do 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, bạn có thể trích xuất phần bản phát hành Android của phiên bản KMI từ nhân và được chèn vào tệp kê khai thiết bị tại thời điểm xây dựng.

Do các yêu cầu về cấu hình nhân hệ điều hành thường không thay đổi, nên sẽ không có cần mã hoá k trong ma trận tương thích. Tuy nhiên, rất có thể trong trường hợp cần thay đổi cấu hình hạt nhân, hãy đảm bảo như sau:

  • Yêu cầu tương ứng khỏi ma trận tương thích sẽ bị xoá.
  • Bổ sung các bài kiểm tra VTS để kiểm tra các yêu cầu mới có điều kiện cho quá trình tạo 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 một bản cập nhật OTA, hình ảnh đó phải được gói trong định dạng tải trọng OTA, payload.bin. Tải trọng OTA mã hoá Trường version cho mỗi phân vùng. Khi update_engine xử lý một tải trọng OTA, hệ thố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 OTA có tên là boot image version.

Vì ổ đĩa RAM luôn được làm từ đầu, hãy sử dụng đĩa RAM timestamp là đủ để mô tả toàn bộ hình ảnh khởi động. Bạn không cần bản phát hành kernel trong phiên bản hình ảnh khởi động, trừ khi bạn đang ghép một bản phát hành cũ khởi động hình ảnh sang tệp nhị phân 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.