Khoá và mở khoá trình tải khởi động

Theo mặc định, hầu hết các thiết bị Android đều có sẵn một trình tải khởi động bị khoá, tức là người dùng không thể cài đặt ROM cho trình tải khởi động hoặc các phân vùng thiết bị. Nếu cần, bạn (và người dùng thiết bị đã bật Tuỳ chọn cho nhà phát triển) có thể mở khoá trình tải khởi động để cài đặt ROM hình ảnh mới.

Truy cập vào trình tải khởi động

Để đưa ra các lệnh fastboot, bạn phải đang ở chế độ trình tải khởi động. Bạn có thể gửi lệnh adb adb reboot bootloader để thực hiện việc này. Một số điện thoại cũng cho phép bạn khởi động lại trình tải khởi động bằng cách nhấn một tổ hợp phím (thường là giảm âm lượng) khi khởi động thiết bị.

Mở khoá trình tải khởi động

Khi ở chế độ trình tải khởi động, để mở khoá trình tải khởi động và cho phép ghi lại các phân vùng, hãy chạy lệnh fastboot flashing unlock trên thiết bị. Sau khi cài đặt, chế độ mở khoá vẫn sẽ tồn tại sau khi khởi động lại.

Các thiết bị phải từ chối lệnh fastboot flashing unlock trừ phi bạn đặt get_unlock_ability thành 1. Nếu bạn đặt thành 0, người dùng cần khởi động vào màn hình chính, mở trình đơn Cài đặt > Hệ thống > Tuỳ chọn cho nhà phát triển rồi bật tuỳ chọn Mở khoá OEM (đặt get_unlock_ability thành 1). Sau khi thiết lập, chế độ này sẽ duy trì khi khởi động lại và đặt lại dữ liệu về trạng thái ban đầu.

Khi lệnh fastboot flashing unlock được gửi, thiết bị sẽ nhắc người dùng cảnh báo rằng họ có thể gặp vấn đề với hình ảnh không chính thức. Sau khi người dùng xác nhận cảnh báo, thiết bị sẽ đặt lại dữ liệu về trạng thái ban đầu để ngăn chặn hành vi truy cập trái phép vào dữ liệu. Trình tải khởi động phải đặt lại thiết bị ngay cả khi không thể định dạng lại đúng cách. Chỉ sau khi đặt lại, bạn mới có thể thiết lập cờ cố định để có thể cài đặt ROM cho thiết bị.

Bạn phải đặt lại mọi RAM chưa bị ghi đè trong quá trình fastboot flashing unlock. Biện pháp này ngăn chặn các cuộc tấn công đọc nội dung RAM còn lại trong lần khởi động trước. Tương tự, các thiết bị đã mở khoá sẽ xoá RAM mỗi lần khởi động (trừ phi điều này tạo ra độ trễ không thể chấp nhận), nhưng phải rời khỏi khu vực dùng cho ramoops của nhân.

Khoá trình tải khởi động

Để khoá trình tải khởi động và đặt lại thiết bị, hãy chạy lệnh fastboot flashing lock trên thiết bị. Các thiết bị dành cho mục đích bán lẻ phải được vận chuyển ở trạng thái khoá (với get_unlock_ability trả về 0) để đảm bảo rằng những kẻ tấn công không thể xâm phạm thiết bị bằng cách cài đặt một hệ thống mới hoặc hình ảnh khởi động mới.

Đặt thuộc tính khoá và mở khoá

Thuộc tính ro.oem_unlock_supported phải được đặt tại thời gian xây dựng dựa trên việc thiết bị có hỗ trợ tính năng mở khoá bằng flash hay không.

  • Nếu thiết bị hỗ trợ tính năng mở khoá bằng flash, hãy đặt ro.oem_unlock_supported thành 1.
  • Nếu thiết bị không hỗ trợ tính năng mở khoá bằng cách nhấp nháy, hãy đặt ro.oem_unlock_supported thành 0.

Nếu thiết bị hỗ trợ tính năng mở khoá bằng flash, thì trình tải khởi động sẽ cho biết trạng thái khoá bằng cách đặt biến dòng lệnh kernel androidboot.flash.locked thành 1 nếu bị khoá hoặc thành 0 nếu đã mở khoá. Biến này phải được đặt trong bootconfig thay vì trong dòng lệnh kernel trong Android 12.

Đối với các thiết bị hỗ trợ dm-verity, hãy dùng ro.boot.verifiedbootstate để đặt giá trị của ro.boot.flash.locked thành 0; thao tác này sẽ mở khoá trình tải khởi động nếu trạng thái khởi động đã xác minh là màu cam.

Bảo vệ các phần quan trọng

Các thiết bị phải hỗ trợ tính năng khoá và mở khoá các phần quan trọng, được định nghĩa là bất kỳ thứ gì cần thiết để khởi động thiết bị trong trình tải khởi động. Các phần như vậy có thể bao gồm cầu chì, phân vùng ảo cho trung tâm cảm biến, trình tải khởi động ở giai đoạn đầu tiên, v.v. Để khoá các phần quan trọng, bạn phải sử dụng một cơ chế ngăn mã (hạt nhân, hình ảnh khôi phục, mã OTA, v.v.) đang chạy trên thiết bị cố ý sửa đổi bất kỳ phần quan trọng nào. OTA không được cập nhật các phần quan trọng nếu thiết bị đang ở trạng thái khoá nghiêm trọng.

Bạn cần tương tác thực tế với thiết bị để chuyển từ trạng thái khoá sang trạng thái mở khoá. Hoạt động tương tác này tương tự như tác động của việc chạy lệnh fastboot flashing unlock nhưng yêu cầu người dùng nhấn nút vật lý trên thiết bị. Các thiết bị không được cho phép chuyển đổi có lập trình từ lock critical sang unlock critical mà không cần tương tác thực tế và các thiết bị không được chuyển sang trạng thái unlock critical.