Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release
thay vì aosp-main
để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Tổng quan về trình tải khởi động
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.
Trình tải khởi động là một hình ảnh thuộc quyền sở hữu của nhà cung cấp, chịu trách nhiệm đưa hạt nhân lên trên thiết bị. Trình tải khởi động bảo vệ trạng thái thiết bị và chịu trách nhiệm khởi chạy Môi trường thực thi đáng tin cậy (TEE) cũng như liên kết gốc tin cậy của thiết bị. Trình tải khởi động cũng xác minh tính toàn vẹn của các phân vùng boot
và recovery
trước khi chuyển quá trình thực thi sang hạt nhân.
Ví dụ về quy trình của trình tải khởi động
Dưới đây là ví dụ về quy trình của trình tải khởi động:
Tải và khởi chạy bộ nhớ.
Xác minh thiết bị theo quy trình Xác minh quy trình khởi động.
Xác minh các phân vùng khởi động, bao gồm boot
, dtbo
, init_boot
và
recovery
, theo quy trình Xác minh quy trình khởi động. Trong bước này, hãy kiểm tra phiên bản tiêu đề hình ảnh khởi động và phân tích cú pháp tiêu đề cho phù hợp.
Nếu sử dụng bản cập nhật A/B, hãy xác định khe hiện tại để khởi động.
Xác định xem có nên khởi động chế độ khôi phục hay không. Để biết thêm thông tin, hãy xem phần Hỗ trợ bản cập nhật OTA.
Tải hình ảnh khởi động, chẳng hạn như boot.img
, vendor_boot.img
, init_boot.img
và các hình ảnh khởi động độc quyền khác của nhà cung cấp. Các hình ảnh khởi động này chứa hình ảnh hạt nhân và ổ đĩa RAM.
Tải hạt nhân vào bộ nhớ dưới dạng tệp nhị phân nén tự thực thi. Hạt nhân tự giải nén và bắt đầu thực thi vào bộ nhớ.
Tải ramdisk và phần bootconfig vào bộ nhớ để tạo initramfs
.
Các tính năng khác liên quan đến trình tải khởi động
Sau đây là danh sách các tính năng bổ sung liên quan đến trình tải 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 trình tải khởi động hỗ trợ nhiều cấu hình phần cứng. DTO được biên dịch thành vùng nhớ khối cây thiết bị (DTB) mà trình tải khởi động sử dụng.
Ngẫu nhiên hoá địa chỉ ảo của hình ảnh hạt nhân. Trình tải khởi động hỗ trợ việc tạo địa chỉ ảo ngẫu nhiên tại nơi tải hình ảnh hạt nhân. Để tạo địa chỉ ngẫu nhiên, hãy đặt RANDOMIZE_BASE
thành true
trong cấu hình hạt nhân.
Trình tải khởi động phải cung cấp entropy bằng cách truyền một giá trị u64 ngẫu nhiên trong nút cây thiết bị /chosen/kaslr-seed
.
Xác minh quy trình khởi động. Tính năng Xác minh quy trình khởi động cho phép trình tải khởi động đảm bảo rằng 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ó trong Android 12 trở lên và là cơ chế truyền thông tin chi tiết về cấu hình từ bản dựng và trình tải khởi động đến hệ điều hành.
Trước Android 12, các tham số dòng lệnh của hạt nhân có tiền tố là androidboot
được sử dụng.
Bản cập nhật qua mạng không dây (OTA). Các thiết bị Android tại hiện trường có thể nhận và cài đặt bản cập nhật OTA cho hệ thống, phần mềm ứng dụng và các quy tắc về múi giờ. Tính năng này có tác động đến việc triển khai trình tải khởi động. Để biết thông tin chung về OTA, hãy xem bài viết Bản cập nhật OTA. Để biết thông tin chi tiết về cách triển khai OTA dành riêng cho trình tải khởi động, hãy xem phần Hỗ trợ bản cập nhật OTA.
Liên kết phiên bản.
Tính năng liên kết phiên bản liên kết các khoá bảo mật với hệ điều hành và phiên bản cấp bản vá. Tính năng 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 khoá được tạo bằng phiên bản mới hơn. Trình tải 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 phần Thông tin phiên bản trong thuộc tính AVB.
Dòng lệnh hạt nhân
Kết hợp dòng lệnh hạt nhân từ các vị trí sau:
Dòng lệnh của trình tải khởi động: tập hợp các thông số tĩnh và động do trình tải khởi động xác định
Cây thiết bị: từ nút chosen/bootargs
defconfig
: từ CONFIG_CMDLINE
boot.img
: từ dòng lệnh (đối với độ dời 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 truyền đến không gian người dùng Android, chúng ta có thể sử dụng bootconfig thay vì dòng lệnh hạt nhân.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Bootloader overview\n\nA *bootloader* is a vendor-proprietary image responsible for bringing up the\nkernel on a device. The bootloader guards the device state and is responsible\nfor initializing the [Trusted Execution Environment (TEE)](/docs/security/features/trusty)\nand binding its root of trust. The bootloader also verifies the integrity of the\n`boot` and `recovery` partitions before moving execution to the kernel.\n\nExample bootloader flow\n-----------------------\n\nHere's an example bootloader flow:\n\n1. Load and initialize memory.\n\n2. Verify the device according to [Verified Boot flow](/docs/security/features/verifiedboot).\n\n3. Verify the boot partitions, including `boot`, `dtbo`, `init_boot`, and\n `recovery`, according to the Verified Boot flow. As part of this step, check the\n [boot image header](/docs/core/architecture/bootloader/boot-image-header)\n version and parse the header accordingly.\n\n4. If [A/B updates](/docs/core/ota/ab) are used, determine the current slot to\n boot.\n\n5. Determine if recovery mode should be booted. For more\n information, see\n [Supporting OTA Updates](/docs/core/architecture/bootloader/updating).\n\n6. Load the boot images, such as `boot.img`, `vendor_boot.img`,\n `init_boot.img`, and other proprietary vendor boot images. These boot images\n contain the kernel and ramdisk images.\n\n 1. Load the kernel into memory as a self-executable compressed\n binary. The kernel decompresses itself and starts executing into memory.\n\n 2. Load ramdisks and the bootconfig section into memory\n to create `initramfs`.\n\nAdditional bootloader-related features\n--------------------------------------\n\nFollowing is a list of additional bootloader-related features that you can\nimplement:\n\n- *Device tree overlay (DTO).*\n A [device tree overlay](/docs/core/architecture/dto) lets the bootloader to\n support different hardware configurations. A DTO is compiled into a *device\n tree blob (DTB)* which is used by the bootloader.\n\n- *Kernel image virtual address randomization.* The bootloader supports\n randomizing the virtual address at which the kernel image is loaded. To\n randomize the address, set `RANDOMIZE_BASE` to `true` in the kernel config.\n The bootloader must provide entropy by passing a random u64 value in the\n `/chosen/kaslr-seed` device tree node.\n\n- *Verified Boot.* [Verified Boot](/docs/security/features/verifiedboot) lets\n the bootloader to ensure all executed code comes from a trusted source.\n\n- *Boot config.*\n [Boot config](/docs/core/architecture/bootloader/implementing-bootconfig)\n is available in Android 12 and higher and is a mechanism for passing\n configuration details from the build and bootloader to the operating system.\n Prior to Android 12, kernel command-line parameters with the prefix of\n `androidboot` are used.\n\n- *Over-the-air (OTA) updates.* Android devices in the field can receive and\n install OTA updates to the system, app software, and\n time zone rules. This feature has implications on your bootloader\n implementation. For general information on OTA, see\n [OTA updates](/docs/core/ota). For bootloader-specific OTA implementation\n details, see\n [Supporting OTA updates](/docs/core/architecture/bootloader/updating).\n\n- *Version binding* .\n [Version binding](/docs/security/features/keystore/version-binding) binds\n security keys to the operating system and patch level version. Version binding\n ensures that an attacker who discovers a weakness in an old version of the\n system or the TEE software can't roll a device back to the vulnerable version\n and use keys created with the newer version. The bootloader must provide certain\n information to support version binding. For further information, see\n [Version information in AVB properties](/docs/core/architecture/bootloader/version-info-avb).\n\nKernel command line\n-------------------\n\nConcatenate the kernel command line from the following locations:\n\n- Bootloader command line: set of static and dynamic parameters determined by\n the bootloader\n\n- Device tree: from the `chosen/bootargs` node\n\n- `defconfig`: from `CONFIG_CMDLINE`\n\n- `boot.img`: from the command line (for offsets and sized, refer to\n [`system/core/mkbootimg/bootimg.h`](https://android.googlesource.com/platform/system/tools/mkbootimg/+/refs/heads/android16-release/include/bootimg/bootimg.h)\n\nAs of Android 12, for `androidboot.*` parameters that\nwe need to pass to Android userspace, we can use\n[bootconfig](/docs/core/architecture/bootloader/implementing-bootconfig) instead\nof the kernel command line."]]