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 vận chuyển với trình tải khởi động bị khoá, nghĩa 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.

Chuyển sang 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. Một cách để thực hiện việc này là gửi lệnh adb adb reboot bootloader. Một số điện thoại cũng cho phép bạn khởi động lại vào trình tải khởi động bằng cách nhấn tổ hợp phím (thường là giảm âm lượng) trong 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 cài đặt 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á sẽ vẫn tồn tại sau khi khởi động lại.

Các thiết bị sẽ từ chối lệnh fastboot flashing unlock trừ phi get_unlock_ability được đặt thành 1. Nếu được đặ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 và 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ẽ vẫn tồn tại sau 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ẽ thực hiện đặt lại dữ liệu về trạng thái ban đầu để ngăn chặn việc 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ể đặt cờ liên tục để có thể cài đặt lại ROM cho thiết bị.

Tất cả RAM chưa bị ghi đè phải được đặt lại 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 từ 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 hệ điều hành.

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 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 kẻ tấn công không thể xâm nhập thiết bị bằng cách cài đặt hệ thống hoặc hình ảnh khởi động mới.

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

Bạn phải đặt thuộc tính ro.oem_unlock_supported tại thời điểm 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 cài đặt ROM, 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 cách cài đặt ROM, 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 hạt nhân androidboot.flash.locked thành 1 nếu 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 sử 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 có màu cam.

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

Thiết bị phải hỗ trợ việc khoá và mở khoá các phần quan trọng, được xác định là mọi thứ cần thiết để khởi động thiết bị vào 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, 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ố tình sửa đổi bất kỳ phần quan trọng nào. OTA sẽ không cập nhật được các phần quan trọng nếu thiết bị ở trạng thái khoá quan trọng.

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