Tổng quan về bộ nạp khởi động

Bộ tải khởi động là một hình ảnh độc quyền của nhà cung cấp chịu trách nhiệm đưa kernel lên thiết bị. Bộ tải khởi động bảo vệ trạng thái thiết bị và chịu trách nhiệm khởi tạo Môi trường thực thi tin cậy (TEE) và ràng buộc nguồn gốc tin cậy của nó. Bộ nạp khởi động cũng xác minh tính toàn vẹn của các phân vùng bootrecovery trước khi chuyển việc thực thi sang kernel.

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

Dưới đây là một ví dụ về luồng bootloader:

  1. Tải và khởi tạo bộ nhớ.

  2. Xác minh thiết bị theo quy trình Đã xác minh Khởi động .

  3. Xác minh các phân vùng khởi động, bao gồm boot , dtbo , init_bootrecovery , theo quy trình Khởi động đã xác minh. Là một phần của bước này, hãy kiểm tra phiên bản tiêu đề ảnh khởi động và phân tích cú pháp tiêu đề tương ứng.

  4. Nếu sử dụng cập nhật A/B , hãy xác định vị trí hiện tại để khởi động.

  5. Xác định xem có nên khởi động chế độ recovery hay không. Để biết thêm thông tin, hãy xem Hỗ trợ cập nhật OTA .

  6. Tải các ảnh khởi động, chẳng hạn như boot.img , vendor_boot.img , init_boot.img và các ảnh khởi động độc quyền khác của nhà cung cấp. Những ảnh khởi động này chứa ảnh kernel và ảnh ramdisk.

    1. Tải kernel vào bộ nhớ dưới dạng nhị phân nén tự thực thi. Kernel tự giải nén và bắt đầu thực thi vào bộ nhớ.

    2. Tải ramdisk và phần bootconfig vào bộ nhớ để tạo initramfs .

Các tính năng bổ sung liên quan đến bootloader

Sau đây là danh sách các tính năng bổ sung liên quan đến bộ nạp khởi động mà bạn có thể triển khai:

  • Lớp phủ cây thiết bị (DTO). Lớp phủ cây thiết bị cho phép bộ nạp khởi động hỗ trợ các cấu hình phần cứng khác nhau. DTO được biên dịch thành blob cây thiết bị (DTB) được bộ tải khởi động sử dụng.

  • Ngẫu nhiên hóa địa chỉ ảo của hình ảnh hạt nhân. Bộ nạp khởi động hỗ trợ ngẫu nhiên địa chỉ ảo nơi tải ảnh hạt nhân. Để chọn ngẫu nhiên địa chỉ, đặt RANDOMIZE_BASE thành true trong cấu hình kernel. Bộ tải khởi động phải cung cấp entropy bằng cách chuyển một giá trị u64 ngẫu nhiên vào nút cây thiết bị /chosen/kaslr-seed .

  • Khởi động đã được xác minh. Khởi động được xác minh cho phép bộ nạp khởi động đảm bảo tất cả mã được thực thi đều đến từ một nguồn đáng tin cậy.

  • Cấu hình khởi động. Cấu hình khởi động có sẵn trong Android 12 trở lên và là cơ chế chuyển chi tiết cấu hình từ bản dựng và bộ nạp khởi động sang hệ điều hành. Trước Android 12, các tham số dòng lệnh kernel có tiền tố androidboot được sử dụng.

  • Cập nhật qua mạng (OTA). Các thiết bị Android tại hiện trường có thể nhận và cài đặt các bản cập nhật OTA cho hệ thống, phần mềm ứng dụng và quy tắc múi giờ. Tính năng này có ý nghĩa đối với việc triển khai bộ nạp khởi động của bạn. Để biết thông tin chung về OTA, hãy xem cập nhật OTA . Để biết chi tiết triển khai OTA dành riêng cho bộ nạp khởi động, hãy xem Hỗ trợ cập nhật OTA .

  • Ràng buộc phiên bản . Liên kết phiên bản liên kết các khóa bảo mật với hệ điều hành và phiên bản cấp bản vá. Liên kết phiên bản đảm bảo rằng kẻ tấn công phát hiện ra điểm yếu trong phiên bản cũ của hệ thống hoặc phần mềm TEE không thể khôi phục thiết bị về phiên bản dễ bị tấn công và sử dụng các khóa được tạo bằng phiên bản mới hơn. Bộ nạp khởi động phải cung cấp một số thông tin nhất định để hỗ trợ liên kết phiên bản. Để biết thêm thông tin, hãy xem Thông tin phiên bản trong thuộc tính AVB .

Dòng lệnh hạt nhân

Nối dòng lệnh kernel từ các vị trí sau:

  • Dòng lệnh bootloader: tập hợp các tham số tĩnh và động được xác định bởi bootloader

  • Cây thiết bị: từ nút chosen/bootargs

  • defconfig : từ CONFIG_CMDLINE

  • boot.img : từ dòng lệnh (để biết giá trị offset và kích thước, hãy tham khảo system/core/mkbootimg/bootimg.h

Kể từ Android 12, đối với các tham số androidboot.* mà chúng ta cần chuyển sang không gian người dùng Android, chúng ta có thể sử dụng bootconfig thay vì dòng lệnh kernel.