การซิงค์เวลา

แพลตฟอร์ม AAOS Software Defined Vehicle (SDV) กำหนดกลไกมาตรฐานสำหรับ การรายงานแหล่งที่มาของเวลาจากหน่วยควบคุมอิเล็กทรอนิกส์ (ECU) และพื้นผิวมาตรฐาน สำหรับการแสดงข้อมูลเวลาใน อินสแตนซ์ SDV หน้านี้มีรายละเอียดและคำแนะนำสำหรับมาตรฐาน SDV

สถาปัตยกรรมนาฬิกา

แพลตฟอร์ม SDV มีนาฬิกามาตรฐาน 2 เรือน ดังนี้

  • นาฬิกา UTC: เป็นนาฬิกาเวลาสากลเชิงพิกัดมาตรฐาน โดยปกติแล้ว SOME/IP จะส่งนาฬิกานี้จาก ECU ไปยังรันไทม์ของแพลตฟอร์ม กรณีการใช้งาน ได้แก่ ความใหม่ของใบรับรอง การวินิจฉัย และ V2X

  • นาฬิกา Monotonic ของเครือข่าย: เป็นสัญญาณนาฬิกาที่มีความแม่นยำสูงและไม่ลดลง ซึ่งส่งจาก ECU ที่สถาปัตยกรรมยานพาหนะที่กว้างขึ้นใช้เพื่อให้มั่นใจว่าเหตุการณ์ต่างๆ จะมีการประสานงานกัน ECU จะส่งนาฬิกานี้ไปยังแพลตฟอร์ม SDV ผ่าน gPTP นาฬิกานี้เรียกอีกอย่างว่า นาฬิกาคงที่

นาฬิกาในแพลตฟอร์ม SDV มีข้อกำหนดด้านสถาปัตยกรรมที่เฉพาะเจาะจง ดังนี้

  • การส่งนาฬิกา: อินสแตนซ์ VM แต่ละรายการจะได้รับสิทธิ์เข้าถึงสัญญาณนาฬิกา Monotonic เดียวกันที่ ECU จัดเตรียมไว้

  • ความสมบูรณ์ของนาฬิกา: อินพุตนาฬิกา Monotonic ของเครือข่ายควรเป็นแหล่งที่เชื่อถือได้สำหรับการประสานงานเหตุการณ์ในบริการต่างๆ การป้องกันช่องโหว่ของระบบที่อาจเกิดขึ้น เช่น การโจมตีแบบ Replay หรือการกลับเวลา จะขึ้นอยู่กับความสมบูรณ์ของนาฬิกา Monotonic

  • การใช้นาฬิกาปลุก: ไม่ควรใช้ API นาฬิกาของแพลตฟอร์ม SDV สำหรับเหตุการณ์ที่เกิดขึ้นบ่อย (> 100 Hz) หรือมีเวลาแฝง < 10 มิลลิวินาทีระหว่างการกำหนดเวลาและเวลาของเหตุการณ์ API ที่มีความถี่สูงหรือเวลาแฝงต่ำควรใช้ไดรเวอร์เคอร์เนล

API นาฬิกา

นาฬิกา Monotonic ของเครือข่าย จะแสดงผ่าน API clock_gettime(3) มาตรฐาน

// Network monotonic clock uses standard Linux API.
// This is represented as a dynamic clock in clock_gettime(3)
clock_gettime(clockid_t id, &timespec)

นาฬิกานี้จัดเตรียมไว้ผ่านกลไกเครือข่าย PTP ให้กับ VM ทั้งหมดและลงทะเบียนเป็นนาฬิกาแบบไดนามิกเพื่อวัตถุประสงค์ clock_gettime(3)

นาฬิกา UTC แสดงด้วย CLOCK_REALTIME ใน clock_gettime(3)

ไดรเวอร์อุปกรณ์เสริม

OEM มีตัวเลือกในการแสดงบล็อกอุปกรณ์ Linux สำหรับพร็อพเพอร์ตี้เวลาเพิ่มเติม เปิดเผยพร็อพเพอร์ตี้นี้ด้วยการจัดการสิทธิ์ผ่าน sepolicy

# in device/OEM/target/sepolicy/time/file_contexts
/dev/sdvtime u:object_r:time_device:s0

OEM มีหน้าที่รับผิดชอบในการพัฒนาและความสามารถของไดรเวอร์อุปกรณ์ Linux ที่กำหนดเองซึ่งแสดง API ไปยังบล็อกอุปกรณ์

การแจ้งเตือนและการเรียกกลับ

การแจ้งเตือนและการเรียกกลับสำหรับคอมโพเนนต์เวลาใน SDV เป็นความสามารถของ Userland ที่ OEM จัดเตรียมไว้ แพลตฟอร์ม SDV ไม่ได้จัดเตรียม API ที่เฉพาะเจาะจงสำหรับฟังก์ชันเหล่านี้

ควรมี บริการของ OEM ไม่เกิน 1 รายการ ต่อ VM ที่ต้องใช้ฟังก์ชันการซิงค์เวลาซึ่งจัดการการเปลี่ยนแปลงเวลาที่เกี่ยวข้องทั้งหมดที่จะตรวจสอบ ตัวอย่างเช่น เมื่อสถานะที่เชื่อถือได้ของแหล่งที่มาของเวลาปัจจุบันเปลี่ยนแปลง

  • สถานะแหล่งที่มาของเวลาคาดว่าจะมีการเปลี่ยนแปลงเป็นเหตุการณ์ความถี่ต่ำ ดังนั้นบริการของ OEM จึงตรวจสอบการเปลี่ยนแปลงผ่านการโพลได้ เช่น ทุกๆ 1 นาที

  • ECU จะสื่อสารสถานะที่เชื่อถือได้ของนาฬิกา UTC ผ่านเครือข่าย เช่น ผ่าน SOME/IP

  • บริการของ OEM จะเผยแพร่ หัวข้อ Data Tunnel ที่เฉพาะเจาะจงเพื่อแสดงการเปลี่ยนแปลงเหล่านี้ต่อผู้รับข้อมูล

  • OEM จะปรับแต่งนโยบายการให้สิทธิ์สำหรับบริการเพื่อกำหนดว่าบริการใดสามารถสมัครรับข้อมูลหัวข้อ Data Tunnel เหล่านี้เพื่อรับฟังการเปลี่ยนแปลงสถานะเวลาที่เชื่อถือได้

สถานะและการจัดการข้อผิดพลาด

รหัสข้อผิดพลาดเป็นไปตามข้อกำหนดของ API Linux มาตรฐานที่เกี่ยวข้อง เช่น

  • หาก clock_gettime() ล้มเหลว ฟังก์ชันนี้จะแสดง -1 และตั้งค่า errno ซึ่งหมายความว่าระบบไม่รองรับการทำงานของนาฬิกาหรือแหล่งที่มาของนาฬิกาพื้นฐานยังไม่พร้อม

  • หาก fopen() ล้มเหลว ฟังก์ชันนี้จะแสดงพอยน์เตอร์ Null และตั้งค่า errno ซึ่งหมายความว่าอุปกรณ์บล็อกไม่พร้อมใช้งาน

  • หากการเรียก ioctl() ล้มเหลว ฟังก์ชันนี้จะแสดง -1 และตั้งค่า errno ซึ่งหมายความว่ารหัสคำขอที่ระบุไม่มีการตอบกลับที่ตรงกันจากไดรเวอร์พื้นฐาน