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.

Triển khai Bootconfig trong Android 12

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Trong Android 12, tính năng bootconfig thay thế các tùy chọn cmdline hạt nhân androidboot.* sử dụng với Android 11 trở xuống. Tính năng bootconfig là cơ chế chuyển thông tin chi tiết cấu hình từ bản dựng và bộ nạp khởi động sang Android 12.

Tính năng này cung cấp một cách để tách các thông số cấu hình cho không gian người dùng Android với các thông số cho nhân. Di chuyển các tham số hạt nhân androidboot.* Dài dòng sang tệp bootconfig sẽ tạo ra khoảng trống trên cmdline của hạt nhân và làm cho nó có sẵn để dễ dàng mở rộng trong tương lai.

Cả hạt nhân và không gian người dùng Android đều phải hỗ trợ bootconfig .

  • Bản phát hành đầu tiên có hỗ trợ này: Android 12
  • Phiên bản hạt nhân đầu tiên có hỗ trợ này: hạt nhân 12-5.4.xx

Triển khai tính năng bootconfig cho các thiết bị mới khởi chạy với phiên bản hạt nhân 12-5.10.xx. Bạn không cần phải triển khai nó nếu bạn đang nâng cấp thiết bị.

Ví dụ và nguồn

Khi bạn xem các ví dụ và mã nguồn trong phần này, hãy lưu ý rằng định dạng của mã bootconfig chỉ khác một chút so với định dạng của cmdline hạt nhân được sử dụng trong Android 11 trở xuống. Tuy nhiên, sự khác biệt sau đây là quan trọng đối với việc sử dụng của bạn:

  • Các tham số phải được phân tách bằng chuỗi thoát dòng mới \n , không phải bằng dấu cách.

Ví dụ về bộ nạp khởi động

Để biết ví dụ về bộ nạp khởi động, hãy xem triển khai bộ nạp khởi động tham chiếu Cuttlefish U-boot. Hai cam kết trong tài liệu tham khảo được liệt kê dưới đây. Lần đầu tiên nâng cấp hỗ trợ phiên bản tiêu đề khởi động lên phiên bản mới nhất. Trong ví dụ, bản cam kết đầu tiên cập nhật (hoặc nâng cấp) phiên bản hỗ trợ lên phiên bản tiếp theo, v4. Thứ hai làm hai điều; nó thêm xử lý bootconfig và minh họa thêm các tham số trong thời gian chạy:

Xây dựng ví dụ

Đối với một ví dụ xây dựng cho thấy các thay đổi mkbootimg để tạo cung vendor_boot.img với tiêu đề khởi động của nhà cung cấp v4, hãy xem mkbootimg changes for bootconfig . Xem các thay đổi về Mực nang để thực hiện những việc sau:

Thực hiện

Các đối tác phải thêm hỗ trợ vào bộ nạp khởi động của họ và di chuyển các tham số androidboot.* thời gian xây dựng của họ từ cmdline hạt nhân sang tệp bootconfig. Cách tốt nhất để thực hiện thay đổi này là thực hiện từng bước; xem phần Triển khai và xác thực gia tăng để biết thông tin về cách thực hiện theo một quy trình gia tăng.

Nếu bạn có các thay đổi tìm kiếm thông số tệp / proc / cmdline cho androidboot.* , Hãy trỏ chúng đến tệp / proc / bootconfig để thay thế. ro.boot.* đặt bằng các giá trị bootconfig mới, vì vậy bạn không cần thực hiện thay đổi đối với mã bằng các thuộc tính đó.

Xây dựng các thay đổi

Đầu tiên, hãy nâng cấp phiên bản tiêu đề khởi động của bạn lên phiên bản 4:

- BOARD_BOOT_HEADER_VERSION := 3

+ BOARD_BOOT_HEADER_VERSION := 4

Thêm tham số cmdline của hạt nhân bootconfig . Điều này làm cho hạt nhân tìm kiếm phần bootconfig:

BOARD_KERNEL_CMDLINE += bootconfig

Các tham số bootconfig được tạo từ các tham số trong biến BOARD_BOOTCONFIG , giống như cmdline nhân được tạo từ BOARD\_KERNEL\_CMDLINE .

Mọi thông số androidboot.* có thể được di chuyển nguyên trạng, tương tự như sau:

- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing

+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing

Thay đổi bộ nạp khởi động

Bộ nạp khởi động thiết lập initramfs trước khi chuyển đến hạt nhân. Cấu hình khởi động hạt nhân tìm kiếm phần bootconfig và tìm phần này ở cuối initramfs, với đoạn giới thiệu dự kiến.

Bộ nạp khởi động lấy thông tin bố cục của nhà cung vendor_boot.img từ tiêu đề hình ảnh khởi động của nhà cung cấp.

Diagram of bootconfig memory allocation layout

Hình 1. Cấp phát bộ nhớ bootconfig của Android 12

Bộ nạp khởi động tạo phần bootconfig trong bộ nhớ. Phần bootconfig chứa cấp phát bộ nhớ cho những điều sau:

  • Thông số
  • 4 kích thước parameters size
  • 4 parameters checksum
  • Chuỗi ma thuật bootconfig 12 B ( #BOOTCONFIG\n )

Các thông số đến từ hai nguồn: Các thông số đã biết tại thời điểm xây dựng và các thông số chưa được biết tại thời điểm xây dựng. Các thông số không xác định phải được thêm vào.

Các thông số đã biết tại thời điểm xây dựng được đóng gói vào phần cuối của hình ảnh nhà cung cấp trong phần vendor_boot . Kích thước của phần được lưu trữ (dưới dạng byte) trong trường tiêu đề khởi động của nhà cung cấp vendor_bootconfig_size .

Các tham số không được biết tại thời điểm xây dựng chỉ được biết trong thời gian chạy trong bộ nạp khởi động. Chúng phải được thêm vào cuối phần tham số bootconfig trước khi áp dụng đoạn giới thiệu bootconfig.

Nếu bạn cần thêm bất kỳ thông số nào sau khi áp dụng đoạn giới thiệu bootconfig, hãy ghi đè đoạn giới thiệu và áp dụng lại.

Triển khai và xác thực gia tăng

Triển khai tính năng bootconfig tăng dần bằng cách làm theo quy trình được đưa ra trong phần này. Để nguyên các tham số cmdline của hạt nhân trong khi các tham số bootconfig được thêm vào.

Đây là các bước để triển khai gia tăng, với xác thực:

  1. Thực hiện bộ nạp khởi động và xây dựng các thay đổi, sau đó thực hiện như sau:
    1. Sử dụng biến BOARD_BOOTCONFIG để thêm tham số bootconfig mới.
    2. Giữ nguyên các tham số cmdline của hạt nhân để thiết bị có thể tiếp tục khởi động chính xác. Điều này làm cho việc gỡ lỗi và xác nhận dễ dàng hơn nhiều.
  2. Xác minh công việc của bạn bằng cách kiểm tra nội dung của /proc/bootconfig . Xác minh rằng bạn thấy thông số mới được thêm vào sau khi thiết bị khởi động.
  3. Di chuyển các tham số androidboot.* Từ kernel cmdline sang bootconfig, sử dụng biến BOARD_BOOTCONFIG và bootloader.
  4. Xác minh rằng từng tham số tồn tại trong /proc/bootconfig VÀ chúng không có trong /proc/cmdline . Nếu bạn có thể xác minh điều này, việc triển khai của bạn đã thành công.

Cân nhắc nâng cấp và hạ cấp OTA

Khi bạn đang quản lý việc nâng cấp và hạ cấp OTA giữa các phiên bản Android khác nhau hoặc các phiên bản hạt nhân khác nhau, cần đặc biệt lưu ý.

Android 12 là phiên bản đầu tiên có hỗ trợ bootconfig. Nếu hạ cấp xuống bất kỳ phiên bản nào trước đó, các tham số cmdline của hạt nhân phải được sử dụng thay vì bootconfig.

Phiên bản hạt nhân 12-5.4 trở lên hỗ trợ bootconfig. Nếu hạ cấp xuống bất kỳ phiên bản nào trước đó (bao gồm cả 11-5.4), các tham số cmdline của hạt nhân phải được sử dụng.

Các bản nâng cấp từ Android 11 trở lên lên Android 12 trở lên có thể tiếp tục sử dụng các tham số cmdline của hạt nhân. Tương tự đối với việc nâng cấp các phiên bản hạt nhân.

Xử lý sự cố

Khi bạn thực hiện bước xác minh , nếu bạn không thấy các tham số mong đợi trong /proc/bootconfig , hãy kiểm tra nhật ký hạt nhân trong logcat . Luôn có một mục nhật ký cho bootconfig nếu hạt nhân hỗ trợ nó.

Ví dụ về đầu ra nhật ký

$ adb logcat | grep bootconfig
02-24 17:00:07.610     0     0 I Load bootconfig: 128 bytes 9 nodes

Nếu bạn thấy nhật ký lỗi được trả về, thì đã xảy ra sự cố khi tải bootconfig. Để xem các loại lỗi khác nhau, hãy xem init / main.c.