จัดการเวลาเปิดเครื่อง

กระบวนการเปิดเครื่องเป็นห่วงโซ่การดำเนินการที่เริ่มจาก ROM สำหรับการเปิดเครื่อง ตามด้วย Bootloader, เคอร์เนล, Init, Zygote และเซิร์ฟเวอร์ระบบ (ตัวหนาหมายถึงขั้นตอนการเปิดเครื่องเฉพาะ Android) ในกระบวนการบูตเฉพาะยานยนต์ บริการเริ่มต้น เช่น กล้องมองหลัง (RVC) ต้องเริ่มทำงานระหว่างการบูตเคอร์เนล

สั่งซื้อ ส่วนประกอบ Android ยานยนต์ Android
1 ROM สำหรับการเปิดเครื่อง โหลดระยะแรกของบูตโหลดเดอร์ลงใน RAM ภายใน
2 Bootloader เริ่มต้นหน่วยความจำ ตรวจสอบความปลอดภัย และโหลดเคอร์เนล
3 เคอร์เนล ตั้งค่าตัวควบคุมการขัดจังหวะ การป้องกันหน่วยความจำ แคช และการจัดตารางเวลา เปิดกระบวนการในพื้นที่ทำงานของผู้ใช้ กระบวนการกล้องมองหลัง (RVC) เริ่มต้นตั้งแต่เนิ่นๆ ในการเปิดเครื่องเคอร์เนล หลังจากดำเนินการเสร็จแล้ว GPIO จาก VMCU จะทริกเกอร์ RVC ให้แสดงบนจอแสดงผล
4 เริ่มขั้นตอน แยกวิเคราะห์สคริปต์ init.rc ใส่ระบบไฟล์ เปิด Zygote เปิดกระบวนการของระบบ HAL ของยานพาหนะ (VHAL) จะเริ่มทำงานในช่วงระยะเริ่มต้นโดยเป็นส่วนหนึ่งของบริการหลัก ย้ายไปยังสถานะก่อนหน้าได้ โดยขึ้นอยู่กับ ServiceManager และต้องนำการพึ่งพาไลบรารีที่แชร์ออก (เช่น init)
5 ไซโกต ตั้งค่ารันไทม์ Java และหน่วยความจําเริ่มต้นสําหรับออบเจ็กต์ Android
6 เซิร์ฟเวอร์ระบบ คอมโพเนนต์ Java แรกในระบบจะเริ่มต้นบริการหลักของ Android CarService จะเริ่มขึ้นหลังจากที่บริการทั้งหมดของระบบเริ่มทำงานแล้ว

เพิ่มประสิทธิภาพเวลาในการบูต

หากต้องการปรับปรุงเวลาในการบูตในระบบ ให้ใช้หลักเกณฑ์ต่อไปนี้

  • เคอร์เนล โหลดเฉพาะโมดูลที่ใช้งานอยู่และเริ่มต้นเฉพาะคอมโพเนนต์ฮาร์ดแวร์ที่ใช้งาน

  • init.rc

    • ตรวจสอบการดำเนินการที่บล็อก (บริการเทียบกับคําสั่งเรียกใช้)
    • เริ่มเฉพาะรายการที่ใช้
    • การตั้งค่าลำดับความสำคัญที่เหมาะสมสำหรับบริการ
  • ไซโกต การเพิ่มประสิทธิภาพการโหลดล่วงหน้าของคลาส (ระบุรายการคลาสที่จะโหลด)

  • Package Manager

  • เซิร์ฟเวอร์ระบบ เริ่มต้นเฉพาะบริการของระบบที่ใช้

Google มีเครื่องมือต่อไปนี้เพื่อช่วยในการเพิ่มประสิทธิภาพ

  • ใช้ packages/services/Car/tools/bootanalyze/bootanalyze.py เพื่อวิเคราะห์บันทึก logcat และ dmesg

  • ใช้ packages/services/Car/tools/bootio/ เพื่อบันทึก I/O สําหรับกระบวนการระหว่างการบูต คุณต้องคอมไพล์เคอร์เนลด้วย Flag ที่เฉพาะเจาะจง (ดูไฟล์ README.md )

เริ่มต้นบริการตั้งแต่เนิ่นๆ

ในลำดับการบูต บริการบางอย่างอาจเริ่มทำงานก่อนที่ Android จะเริ่มบูต

กล้องมองหลัง

กล้องมองหลัง (RVC) ควรจัดการในเคอร์เนล VMCU จะแจ้งให้กระบวนการเคอร์เนลเนทีฟทราบเมื่อรถเปลี่ยนเป็นเกียร์ถอยหลัง จากนั้นกระบวนการเคอร์เนลเนทีฟจะแสดงภาพ RVC บนจอแสดงผล HAL ของยานพาหนะจะควบคุม RVC ได้โดยใช้ hardware/libhardware/include/hardware/vehicle_camera.h

HAL ยานพาหนะ (VHAL)

ระบบบางอย่างอาจต้องอ่านและบัฟเฟอร์ข้อมูล CAN (เช่น ความเร็วของรถ สถานะเกียร์) ในช่วงเริ่มต้นของลำดับการบูตขณะรอให้บริการพื้นที่ผู้ใช้เริ่มทำงาน (ซึ่งจะเกิดขึ้นในลำดับการบูตในภายหลัง) สถานการณ์นี้กำหนดให้ VNS และ HAL รวมถึงตัวควบคุม CAN ต้องเริ่มทำงานตั้งแต่เนิ่นๆ โดยปกติแล้วภายในไม่กี่วินาที

  • ระบบที่สามารถต่อเชื่อม /system ได้อย่างรวดเร็วสามารถเปิดตัวตัวจัดการบริการจากนั้นจึง VNS ได้ตั้งแต่เนิ่นๆ

  • ระบบที่ไม่สามารถต่อเชื่อม /system ได้อย่างรวดเร็วต้องย้ายทั้งตัวจัดการบริการและ VNS ไปยังอิมเมจการบูตเคอร์เนล และลิงก์ไลบรารีที่เกี่ยวข้องทั้งหมดแบบคงที่