AAOS 소프트웨어 정의 차량 (SDV) 플랫폼은 전자 제어 장치 (ECU)의 시간 소스 보고를 위한 표준 메커니즘과 SDV 인스턴스에서 시간 정보를 노출하기 위한 표준 서피스를 정의합니다. 이 페이지에서는 SDV 표준에 관한 세부정보와 안내를 제공합니다.
클록 아키텍처
SDV 플랫폼에는 두 가지 표준 시계가 있습니다.
UTC 시계: 표준 협정 세계시 시계입니다. 일반적으로 SOME/IP는 ECU에서 플랫폼 런타임으로 이를 제공합니다. 사용 사례에는 인증서 최신성, 진단, V2X가 포함됩니다.
네트워크 단조 증가 시계: 이는 더 넓은 차량 아키텍처가 이벤트가 조정되도록 하는 데 사용하는 ECU에서 제공하는 감소하지 않는 매우 정확한 시계 신호입니다. ECU는 gPTP를 통해 SDV 플랫폼에 이를 제공합니다. 이 시계는 안정적인 시계라고도 합니다.
SDV 플랫폼의 시계에는 다음과 같은 특정 아키텍처 요구사항이 있습니다.
클록 전달: 각 VM 인스턴스는 ECU에서 제공하는 동일한 단조 클록 신호에 액세스할 수 있습니다.
시계 무결성: 네트워크 단조 시계 입력은 서비스 전반에서 이벤트를 조정하는 신뢰할 수 있는 소스여야 합니다. 재전송 공격이나 시간 반전과 같은 가능한 시스템 취약점에 대한 방어는 단조 시계의 무결성을 기반으로 합니다.
알람 사용: SDV 플랫폼 시계 API는 발생 빈도가 높거나(100Hz 초과) 예약과 이벤트 시간 사이의 지연 시간이 10ms 미만인 이벤트에 사용하면 안 됩니다. 빈도가 높거나 지연 시간이 짧은 API는 커널 드라이버를 사용해야 합니다.
시계 API
네트워크 단조 시계는 표준 clock_gettime(3) API를 통해 노출됩니다.
// Network monotonic clock uses standard Linux API.
// This is represented as a dynamic clock in clock_gettime(3)
clock_gettime(clockid_t id, ×pec)
이 시계는 PTP 네트워크 메커니즘을 통해 모든 VM에 제공되며 clock_gettime(3) 목적으로 동적 시계로 등록됩니다.
UTC 시계는 clock_gettime(3)에서 CLOCK_REALTIME로 표시됩니다.
선택적 기기 드라이버
OEM은 추가 시간 속성을 위해 Linux 기기 블록을 노출할 수 있습니다. sepolicy를 통해 권한 처리와 함께 이를 노출합니다.
# in device/OEM/target/sepolicy/time/file_contexts
/dev/sdvtime u:object_r:time_device:s0
OEM은 기기 블록에 API를 노출하는 맞춤 Linux 기기 드라이버의 개발과 기능을 담당합니다.
알림 및 콜백
SDV의 시간 구성요소에 관한 알림과 콜백은 OEM에서 제공하는 사용자 공간 기능입니다. SDV 플랫폼은 이러한 기능을 위한 특정 API를 제공하지 않습니다.
시간 동기화 기능이 필요한 VM당 하나의 OEM 서비스가 있어야 하며, 이 서비스는 모니터링할 관련 시간 변경사항을 모두 처리합니다. 예를 들어 현재 시간 소스의 신뢰할 수 있는 상태가 변경되는 경우 다음을 충족해야 합니다.
시간 소스 상태 변경은 빈도가 낮은 이벤트로 예상되므로 OEM 서비스는 예를 들어 분당 한 번씩 폴링을 통해 변경사항을 확인할 수 있습니다.
ECU는 네트워크를 통해(예: SOME/IP를 통해) UTC 시계의 신뢰할 수 있는 상태를 통신합니다.
OEM 서비스는 이러한 변경사항을 구독자에게 표시하기 위해 특정 데이터 터널 주제를 게시합니다.
OEM은 서비스의 승인 정책을 맞춤설정하여 신뢰할 수 있는 시간 상태 변경사항을 수신하기 위해 이러한 데이터 터널 주제를 구독할 수 있는 서비스를 결정합니다.
오류 상태 및 처리
오류 코드는 관련된 표준 Linux API의 규칙을 따릅니다. 예를 들면 다음과 같습니다.
clock_gettime()이 실패하면-1가 반환되고errno가 설정됩니다. 이는 시계 작업이 지원되지 않거나 기본 시계 소스가 준비되지 않았음을 의미합니다.fopen()가 실패하면 null 포인터를 반환하고errno가 설정됩니다. 이는 블록 기기를 사용할 수 없음을 의미합니다.ioctl()호출이 실패하면-1이 반환되고errno이 설정됩니다. 이는 지정된 요청 코드에 기본 드라이버의 일치하는 응답이 없음을 의미합니다.