ใน Android 12 ฟีเจอร์ Bootconfig จะแทนที่
ตัวเลือกเคอร์เนล cmdline androidboot.*
รายการที่ใช้กับ Android 11
และต่ำลง ฟีเจอร์ Bootconfig เป็นกลไกการส่งการกำหนดค่า
รายละเอียดตั้งแต่บิลด์และ Bootloader ไปจนถึง Android 12
ฟีเจอร์นี้ช่วยให้แยกพารามิเตอร์การกำหนดค่าสำหรับ Android ได้
พื้นที่ผู้ใช้จากช่วงดังกล่าวสำหรับเคอร์เนล กำลังย้ายเคอร์เนล androidboot.*
ที่ยืดยาว
ไปยังไฟล์ Bootconfig จะสร้างพื้นที่บนเคอร์เนล cmdline และทำให้
ซึ่งจะขยายการให้บริการในอนาคต
ทั้งเคอร์เนลและพื้นที่ผู้ใช้ Android ต้องรองรับ bootconfig
- รุ่นแรกที่รองรับนี้: Android 12
- เวอร์ชันเคอร์เนลแรกที่รองรับเคอร์เนล 12-5.4.xx
ใช้ฟีเจอร์ Bootconfig สำหรับอุปกรณ์ใหม่ที่เปิดตัวด้วย 12-5.10.xx เวอร์ชันเคอร์เนล โดยไม่จำเป็นต้องใช้หากอัปเกรดอุปกรณ์
ตัวอย่างและแหล่งที่มา
ขณะที่คุณดูตัวอย่างและซอร์สโค้ดในส่วนนี้ โปรดทราบว่ารูปแบบ
ของโค้ด bootconfig
แตกต่างจากรูปแบบของ
kernel cmdline ที่ใช้ใน Android 11 และต่ำกว่า
อย่างไรก็ตาม ความแตกต่างต่อไปนี้มีความสำคัญต่อการใช้งานของคุณ
- ต้องคั่นพารามิเตอร์ด้วยลำดับการยกเว้นบรรทัดใหม่
\n
ไม่ใช่ตาม พื้นที่ทำงาน
ตัวอย่าง Bootloader
สำหรับตัวอย่าง Bootloader โปรดดู Bootloader อ้างอิงของ Cuttlefish U-boot การใช้งานของคุณ คอมมิต 2 รายการในข้อมูลอ้างอิงระบุไว้ด้านล่าง อัปเรฟแรก จะมีการรองรับเวอร์ชันส่วนหัวการเปิดเครื่องเป็นเวอร์ชันล่าสุด ในตัวอย่างนี้ รายการแรก คอมมิตการอัปเดต (หรือเพิ่ม) การสนับสนุนเวอร์ชันถัดไป v4 องค์ประกอบที่ 2 ทำได้ 2 อย่าง จะมีการเพิ่มการจัดการ Bootconfig และสาธิตการเพิ่มพารามิเตอร์ ที่รันไทม์:
- เพิ่มการสนับสนุนเวอร์ชันส่วนหัวการเปิดเครื่องเป็น v4 เวอร์ชันล่าสุด version
- เพิ่ม Bootconfig Handling
ตัวอย่างบิลด์
สำหรับตัวอย่างบิลด์ที่แสดงการเปลี่ยนแปลง mkbootimg
รายการเพื่อสร้าง
vendor_boot.img
ที่มีส่วนหัวการเปิดเครื่องของผู้ให้บริการ v4 โปรดดู mkbootimg changes for
bootconfig
ดูการเปลี่ยนแปลงของหมึกกระดองเพื่อทำสิ่งต่อไปนี้
- ใช้ (หรือยกระดับไปยัง) เวอร์ชันส่วนหัวการเปิดเครื่องของผู้ให้บริการ v4
- เพิ่ม bootconfig ไปยัง kernel cmdline และย้ายพารามิเตอร์ที่เลือกไปยัง Bootconfig
การใช้งาน
พาร์ทเนอร์ต้องเพิ่มการรองรับไปยัง Bootloader และย้ายเวลาบิลด์
พารามิเตอร์ androidboot.*
จาก kernel cmdline ไปยัง Bootconfig
วิธีที่ดีที่สุดในการนำการเปลี่ยนแปลงนี้ไปใช้คือค่อยๆ ทำไป โปรดดู
ส่วนการติดตั้งใช้งานและการตรวจสอบที่เพิ่มขึ้น
เพื่อดูข้อมูลเกี่ยวกับการติดตามกระบวนการที่เพิ่มขึ้น
หากคุณมีการเปลี่ยนแปลงที่ค้นหาไฟล์ /proc/cmdline สำหรับ androidboot.*
ให้ชี้ไปยังไฟล์ /proc/bootconfig
แทน ro.boot.*
จะตั้งค่าพร็อพเพอร์ตี้ด้วยค่า bootconfig
ใหม่ คุณจึงไม่จำเป็นต้องสร้าง
เปลี่ยนแปลงโค้ดโดยใช้คุณสมบัติเหล่านั้น
สร้างการเปลี่ยนแปลง
ก่อนอื่น ให้อัปเดตเวอร์ชันของส่วนหัวการเปิดเครื่องเป็นเวอร์ชัน 4 ดังนี้
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
เพิ่มพารามิเตอร์ bootconfig
ของ kernel cmdline การดำเนินการนี้จะทำให้เคอร์เนลมองหา
ส่วน Bootconfig
BOARD_KERNEL_CMDLINE += bootconfig
พารามิเตอร์ Bootconfig สร้างขึ้นจากพารามิเตอร์ใน
BOARD_BOOTCONFIG
เหมือนกับที่ Kernel cmdline สร้างขึ้นจาก
BOARD\_KERNEL\_CMDLINE
พารามิเตอร์ androidboot.*
ทั้งหมดจะย้ายได้ตามที่เป็นอยู่ ซึ่งคล้ายกับรายการต่อไปนี้
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
การเปลี่ยนแปลง Bootloader
Bootloader ตั้งค่า initramfs
ก่อนข้ามไปยังเคอร์เนล เคอร์เนล
การกำหนดค่าการเปิดเครื่อง
ค้นหาส่วน Bootconfig และดูว่าจะอยู่ท้ายสุดของ
initramfs,
กับตัวอย่างที่คาดไว้
Bootloader รับข้อมูลเลย์เอาต์ vendor_boot.img
จากผู้ให้บริการ
อิมเมจการเปิดเครื่อง
รูปที่ 1 การจัดสรรหน่วยความจำ Bootconfig ของ Android 12
Bootloader จะสร้างส่วน Bootconfig ในหน่วยความจำ ส่วน Bootconfig มีการจัดสรรหน่วยความจำสำหรับรายการต่อไปนี้
- พารามิเตอร์
- 4 B ขนาด
parameters size
- 4 B ขนาด
parameters checksum
- สตริงเวทมนตร์ Bootconfig 12 B (
#BOOTCONFIG\n
)
พารามิเตอร์เหล่านี้มาจากแหล่งที่มา 2 แหล่ง ได้แก่ พารามิเตอร์ที่รู้จักในเวลาบิลด์ และ พารามิเตอร์ที่ไม่รู้จักในเวลาบิลด์ ต้องเพิ่มพารามิเตอร์ที่ไม่รู้จัก
ระบบจะรวมพารามิเตอร์ที่รู้จักในเวลาบิลด์ไว้ที่ส่วนท้ายของ vendor_boot
ในส่วน Bootconfig ขนาดของส่วนนี้จะจัดเก็บ (เป็นไบต์)
ในช่องส่วนหัวการเปิดเครื่องของผู้ให้บริการ vendor_bootconfig_size
ระบบจะรู้พารามิเตอร์ที่ไม่รู้จักในเวลาบิลด์ที่รันไทม์ใน Bootloader ต้องเพิ่มพารามิเตอร์เหล่านี้ลงในตอนท้ายของส่วนพารามิเตอร์ Bootconfig ก่อนจะใช้ตัวอย่าง Bootconfig
หากต้องการเพิ่มพารามิเตอร์หลังจากที่ใช้ตัวอย่าง Bootconfig แล้ว เขียนทับตัวอย่าง แล้วนำไปใช้อีกครั้ง
การตรวจสอบและการติดตั้งใช้งานส่วนเพิ่ม
ติดตั้งใช้งานฟีเจอร์ Bootconfig ทีละส่วนโดยทำตามขั้นตอนที่ระบุไว้ใน ส่วนนี้ ไม่ต้องเปลี่ยนแปลงพารามิเตอร์ cmdline เคอร์เนลในขณะที่ แล้วระบบจะเพิ่มพารามิเตอร์ Bootconfig
ขั้นตอนการติดตั้งใช้งานแบบค่อยเป็นค่อยไปพร้อมการตรวจสอบมีดังนี้
- สร้าง Bootloader และสร้างการเปลี่ยนแปลง จากนั้นดำเนินการต่อไปนี้
- ใช้ตัวแปร
BOARD_BOOTCONFIG
เพื่อเพิ่ม Bootconfig ใหม่ พารามิเตอร์ - ใช้พารามิเตอร์ Kernel cmdline ตามที่เป็นอยู่เพื่อให้อุปกรณ์ จะสามารถเปิดเครื่องได้อย่างถูกต้อง วิธีนี้ทำให้การแก้ไขข้อบกพร่องและการตรวจสอบความถูกต้องเป็นเรื่องง่าย ได้ง่ายยิ่งขึ้น
- ใช้ตัวแปร
- ยืนยันงานโดยตรวจสอบเนื้อหาของ
/proc/bootconfig
ยืนยัน คุณเห็นพารามิเตอร์ที่เพิ่มเข้ามาใหม่หลังจากอุปกรณ์เปิดเครื่องแล้ว - ย้ายพารามิเตอร์
androidboot.*
จาก Kernel cmdline ไปยัง Bootconfig โดยใช้ตัวแปรBOARD_BOOTCONFIG
และ Bootloader - ตรวจสอบว่าพารามิเตอร์แต่ละรายการมีอยู่ใน
/proc/bootconfig
และ พวกเขาไม่ได้ใน/proc/cmdline
หากคุณยืนยันได้ว่า ประสบความสำเร็จ
ข้อควรพิจารณาในการอัปเกรดและดาวน์เกรด OTA
เมื่อคุณจัดการการอัปเกรดและดาวน์เกรด OTA ระหว่างเวอร์ชันต่างๆ Android หรือเคอร์เนลเวอร์ชันอื่น ควรตรวจสอบเป็นพิเศษ
Android 12 เป็นเวอร์ชันแรกที่มี Bootconfig การสนับสนุน หากดาวน์เกรดเป็นเวอร์ชันก่อนหน้า พารามิเตอร์ Kernel cmdline ต้องใช้แทน Bootconfig
Kernel เวอร์ชัน 12-5.4 ขึ้นไปรองรับ Bootconfig หากดาวน์เกรด เป็นเวอร์ชันใดๆ ก่อนหน้านั้น(รวมถึง 11-5.4) พารามิเตอร์ของ kernel cmdline ต้องเป็น
การอัปเกรดจาก Android 11 และต่ำกว่าเป็น Android 12 ขึ้นไปจะยังคงใช้งานได้ต่อไป พารามิเตอร์เคอร์เนล cmdline สำหรับการอัปเกรดเวอร์ชันเคอร์เนลก็เช่นเดียวกัน
การแก้ปัญหา
เมื่อคุณดำเนินการขั้นตอนยืนยัน หากคุณไม่เห็นพารามิเตอร์ที่คาดไว้
ใน /proc/bootconfig
ให้ตรวจสอบบันทึกเคอร์เนลใน logcat
โดยจะมีบันทึกเสมอ
มีรายการสำหรับ Bootconfig หากเคอร์เนลสนับสนุน
ตัวอย่างเอาต์พุตของบันทึก
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
ถ้าคุณเห็นบันทึกข้อผิดพลาดแสดงขึ้น แสดงว่าเกิดปัญหาในการโหลด Bootconfig หากต้องการดูข้อผิดพลาดประเภทต่างๆ ให้ดู init/main.c