Trong Android 12, tính năng bootconfig sẽ thay thế
Các tuỳ chọn lệnh cmdline nhân androidboot.*
đang được sử dụng trên Android 11
và thấp hơn. Tính năng bootconfig là một cơ chế để truyền cấu hình
thông tin chi tiết từ bản dựng và trình tải khởi động cho Android 12.
Tính năng này cung cấp cách để tách riêng các tham số cấu hình cho Android
không gian của người dùng cho nhân. Di chuyển hạt nhân androidboot.*
dài
các tham số vào tệp bootconfig sẽ tạo không gian trên lệnh cmdline nhân và tạo
dữ liệu để mở rộng trong tương lai.
Cả nhân hệ điều hành 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 nhân hệ điều hành đầu tiên có hỗ trợ này: 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 bằng phiên bản 12-5.10.xx phiên bản kernel. Bạn không cần triển khai nếu đ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, 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
lệnh cmdline nhân hệ điều hành được dùng trong Android 11 trở xuống.
Tuy nhiên, sự khác biệt sau đây có ý nghĩa quan trọng đối với cách sử dụng của bạn:
- Các thông số phải được phân tách bằng chuỗi thoát dòng mới
\n
, chứ không phải bằng không gian.
Ví dụ về trình tải khởi động
Để tìm hiểu ví dụ về trình tải khởi động, hãy xem trình tải khởi động tham chiếu khởi động dự kiến của Cuttlefish trong quá trình triển khai. Dưới đây là hai thay đổi trong tài liệu tham khảo. Số vòng quay đầu tiên hỗ trợ phiên bản tiêu đề khởi động lên phiên bản mới nhất. Trong ví dụ này, đầu tiên cam kết cập nhật (hoặc cập nhật) hỗ trợ phiên bản cho phiên bản tiếp theo, v4. Thứ hai làm hai việc; thêm tính năng xử lý bootconfig và minh hoạ cách thêm tham số trong thời gian chạy:
- Sử dụng tính năng hỗ trợ phiên bản tiêu đề khởi động cho phiên bản 4 mới nhất phiên bản.
- Thêm bootconfig xử lý dữ liệu.
Ví dụ về bản dựng
Xem ví dụ về bản dựng cho thấy các thay đổi về mkbootimg
để tạo
vendor_boot.img
với tiêu đề khởi động nhà cung cấp phiên bản 4, hãy xem mkbootimg changes for
bootconfig
.
Hãy xem những thay đổi của con nhộng để làm những việc sau:
- Sử dụng (hoặc upRev to) phiên bản tiêu đề khởi động nhà cung cấp phiên bản 4.
- Thêm bootconfig vào lệnh cmdline nhân hệ điều hành rồi di chuyển các tham số đã chọn đến bootconfig.
Triển khai
Đối tác phải thêm tính năng hỗ trợ vào trình tải khởi động và di chuyển thời gian xây dựng
Tham số androidboot.*
từ lệnh cmdline nhân hệ điều hành đến lệnh bootconfig
. Cách tốt nhất để triển khai thay đổi này là tăng dần; xem
Phần Triển khai và xác thực gia tăng
để biết thông tin về cách làm theo một quá trình tăng dần.
Nếu bạn có các thay đổi cần tìm trong tệp /proc/cmdline cho androidboot.*
hãy trỏ các tham số đó đến tệp /proc/bootconfig
. ro.boot.*
các thuộc tính được thiết lập bằng các giá trị bootconfig
mới, nên bạn không cần
những thay đổi đối với mã bằng cách sử dụng các thuộc tính đó.
Xây dựng các thay đổi
Trước 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 cho nhân bootconfig
. Điều này khiến kernel tìm kiếm
phần bootconfig:
BOARD_KERNEL_CMDLINE += bootconfig
Tham số bootconfig được tạo từ các tham số trong
Biến BOARD_BOOTCONFIG
, giống như lệnh cmdline hạt nhân được tạo từ
BOARD\_KERNEL\_CMDLINE
Bạn có thể di chuyển mọi tham số androidboot.*
theo nguyên trạng, tương tự như sau:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
Các thay đổi đối với trình tải khởi động
Trình tải khởi động thiết lập initramfs
trước khi chuyển sang nhân hệ điều hành. Hạt nhân
cấu hình khởi động
tìm kiếm phần bootconfig và tìm phần này ở cuối
initramfs,
có đoạn giới thiệu dự kiến.
Trình tải khởi động nhận thông tin bố cục vendor_boot.img
từ nhà cung cấp
tiêu đề của hình ảnh khởi động.
Hình 1. Phân bổ bộ nhớ khởi động cấu hình Android 12
Trình tải khởi động sẽ tạo phần bootconfig trong bộ nhớ. Phần bootconfig chứa phân bổ bộ nhớ cho những mục sau:
- Tham số
- 4 B kích thước
parameters size
- 4 B kích thước
parameters checksum
- Chuỗi ma thuật bootconfig 12 B (
#BOOTCONFIG\n
)
Các thông số này đến từ 2 nguồn: Các thông số đã biết tại thời điểm xây dựng, và chưa được xác định tại thời điểm xây dựng. Bạn phải thêm thông số không xác định.
Các tham số đã biết tại thời điểm xây dựng sẽ được đóng gói vào cuối vendor_boot
trong phần bootconfig. Kích thước của mục đượ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ố chưa được xác định tại thời gian xây dựng chỉ được xác định trong thời gian chạy trong trình tải khởi động. Các thông số này phải được thêm vào cuối phần thông số bootconfig trước khi áp dụng đoạn giới thiệu khởi động cấu hình.
Nếu bạn cần thêm bất kỳ tham số nào sau khi áp dụng đoạn giới thiệu khởi động, hãy ghi đè đoạn giới thiệu rồi đăng ký lại.
Triển khai và xác thực gia tăng
Triển khai dần tính năng bootconfig bằng cách làm theo quy trình được cung cấp trong phần này. Giữ nguyên tham số cmdline của nhân trong khi Đã thêm các tham số bootconfig.
Sau đây là các bước triển khai từng bước, kèm theo quy trình xác thực:
- Thực hiện trình tải khởi động và thay đổi bản dựng, sau đó làm như sau:
- Sử dụng biến
BOARD_BOOTCONFIG
để thêm cấu hình khởi động mới . - Giữ nguyên tham số cmdline của nhân, để thiết bị có thể tiếp tục khởi động chính xác. Điều này giúp ích rất nhiều cho việc gỡ lỗi và xác thực dễ dàng hơn.
- Sử dụng biến
- Xác minh bài tập của bạn bằng cách kiểm tra nội dung trên
/proc/bootconfig
. Xác minh mà bạn thấy tham số mới được thêm vào sau khi khởi động thiết bị. - Di chuyển các tham số
androidboot.*
từ lệnh cmdline hạt nhân sang bootconfig, sử dụng biếnBOARD_BOOTCONFIG
và trình tải khởi động. - Xác minh rằng mỗi tham số tồn tại trong
/proc/bootconfig
VÀ họ không có ở/proc/cmdline
. Nếu bạn có thể xác minh điều này, thì quá trình triển khai của bạn đã thành công.
Những điều cần cân nhắc khi nâng cấp và hạ cấp hệ thống mạng không dây
Khi bạn quản lý việc nâng cấp và hạ cấp qua mạng không dây (OTA) giữa các phiên bản khác nhau Android hoặc các phiên bản nhân hệ điều hành khác, bạn cần đặc biệt thận trọng.
Android 12 là phiên bản đầu tiên có bootconfig của Google. Nếu hạ cấp xuống bất kỳ phiên bản nào trước đó, các tham số cmdline trong kernel phải được sử dụng thay cho bootconfig.
Kernel phiên bản 12-5.4 trở lên hỗ trợ bootconfig. Nếu hạ cấp cho bất kỳ phiên bản nào trước đó(bao gồm 11-5.4), tham số cmdline nhân phải là đã sử dụng.
Người dùng nâng cấp từ Android 11 trở xuống lên Android 12 trở lên có thể tiếp tục sử dụng tham số cmdline của nhân hệ điều hành. Việc nâng cấp các phiên bản kernel cũng tương tự như vậy.
Khắc phục sự cố
Khi thực hiện bước xác minh, nếu bạn không thấy các thông số mong muốn
trong /proc/bootconfig
, hãy kiểm tra nhật ký nhân trong logcat
. Luôn có một nhật ký
có mục nhập cho bootconfig nếu hạt nhân hỗ trợ cấu hình này.
Ví dụ về kết quả 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ì đã có sự cố khi tải bootconfig. Để xem các loại lỗi khác nhau, hãy xem init/main.c.