Android System & AOSP Engineering/Android Automotive

Automotive Hypervisor 기반 AAOS 및 RTOS 가상화: Single AP 환경에서 Instrument Cluster와 IVI 물리적 격리 구현

임베디드 친구 2026. 9. 14. 20:46
반응형

1. 차량용 하이퍼바이저 도입 배경: Single AP 환경에서 RTOS 클러스터와 AAOS IVI 통합 필요성

최근 차량용 전자 아키텍처는 기존의 파편화된 ECU(Electronic Control Unit) 구조에서 중앙 집중식 Domain Controller Unit(DCU) 또는 Zonal ECU 구조로 전환되고 있습니다. 이에 따라 계기판(Instrument Cluster)과 차량용 인포테인먼트 system(In-Vehicle Infotainment, IVI)을 개별 Application Processor(AP)로 구동하던 방식에서, 단일 High-Performance SoC(System on Chip) 내부에서 두 OS를 동시에 구동하는 구조가 채택되고 있습니다.

이 과정에서 계기판은 운전자의 안전과 직결되므로 고도의 실시간성(Real-Time)과 부팅 속도, 그리고 기능 안전 표준인 ISO 26262 ASIL-B/D를 만족해야 합니다. 반면, Android Automotive OS(AAOS) 기반의 IVI는 풍부한 UX와 앱 생태계를 제공하지만 복잡도가 높아 크래시(Crash) 발생 가능성이 존재합니다.

하이퍼바이저(Hypervisor) 가상화 기술은 단일 AP 상에서 RTOS(FreeRTOS, QNX, VxWorks 등)와 AAOS(Android)를 물리적으로 격리(Hardware-assisted Isolation)합니다. AAOS 영역에서 시스템 커널 패닉(Kernel Panic)이 발생하더라도 계기판 영역의 RTOS는 영향을 받지 않고 주행 정보를 즉각적으로 표시해야 합니다. 본 포스팅에서는 Type-1 하이퍼바이저 기반의 하드웨어 가상화 원리와 메모리/주장치 격리 방식을 상세히 다룹니다.

2. Automotive Hypervisor 핵심 기술 요약 (Key Architecture Takeaways)

  • Type-1 베어메탈 하이퍼바이저 배포: 단일 애플리케이션 프로세서(AP) 상에서 RTOS(ASIL-B/D)와 AAOS(Rich OS)를 격리하기 위해 하드웨어 지원 가상화(ARMv8/v9 EL2 Stage 2 Translation) 기술을 사용합니다.
  • 하드웨어 수준의 주변 장치 및 메모리 격리: Android로부터의 비보안(non-secure) 접근을 차단하기 위해 ARM SMMU(System MMU) 및 GICv3(Generic Interrupt Controller) 가상화를 통해 메모리 도메인을 분할합니다.
  • VirtIO를 통한 VM 간 통신: RTOS와 AAOS 도메인 간의 저지연 데이터 교환을 위해 공유 메모리 및 VirtIO(virtio-gpu, virtio-input, virtio-snd) 메커니즘을 사용합니다.

3. 하이퍼바이저 가상화 아키텍처 상세 분석 및 레지스터 기반 메모리 격리 구현

하이퍼바이저 유형 및 차량용 가상화 아키텍처 비교

차량용 임베디드 시스템에서는 가상화 레이어의 오버헤드를 최소화하고 기능 안전성을 확보하기 위해 Type-1(Bare-metal) 하이퍼바이저(예: QNX Hypervisor, Xen, OpenSynergy COQOS, ACRN)를 사용합니다.

구분 Type-1 Hypervisor (Bare-Metal) Type-2 Hypervisor (Hosted)
동작 레이어 하드웨어 직상위 (ARM EL2 Execution Level) Host OS 상위 (ARM EL1 Execution Level)
실시간성 (Real-Time) 보장 가능 (RTOS 전용 하드웨어 코어 할당) 불가능 (Host OS 스케줄링 의존)
안전 등급 (Safety) ISO 26262 ASIL-B / ASIL-D 인증 가능 기능 안전 인증 불가
주요 용도 계기판(RTOS) + AAOS(Android) 통합 시스템 일반 PC 가상화 (VirtualBox, QEMU 등)

ARMv8/v9 하드웨어 가상화 지원 (EL2 Stage 2 Page Table Translation)

ARM 아키텍처에서는 Hypervisor Exception Level(EL2)을 제공합니다. RTOS와 AAOS(Rich OS)는 각각 Guest OS로 동작하며 EL1 레벨에서 실행됩니다. 하이퍼바이저는 Stage 2 Translation을 통해 Guest Physical Address(GPA)를 Physical Address(PA)로 변환하여 메모리를 물리적으로 격리합니다.

+---------------------------------+  +---------------------------------+
|     RTOS (Instrument Cluster)   |  |   AAOS (Android Automotive)     |
|            EL1                  |  |             EL1                 |
+---------------------------------+  +---------------------------------+
| Stage 1 Translation (VA -> GPA) |  | Stage 1 Translation (VA -> GPA) |
+---------------------------------+  +---------------------------------+
========================================================================
|                    Type-1 Hypervisor (EL2)                           |
|                Stage 2 Translation (GPA -> PA)                       |
+----------------------------------------------------------------------+
|                       System Hardware (EL0/EL3)                      |
|              (Cores, RAM, SMMU, GICv3, CAN Controller)               |
+----------------------------------------------------------------------+

ARM SMMUv3 기반 DMA 메모리 보호 설정 코드 분석

AAOS 디바이스 드라이버가 DMA(Direct Memory Access)를 수행할 때 RTOS 영역의 메모리를 침범하지 못하도록 System MMU(SMMU)를 설정해야 합니다. 하이퍼바이저 초기화 단계에서 각 VM별 Stream ID와 Context Bank를 지정합니다.

/* 
 * Hypervisor SMMUv3 Configuration for Peripheral Isolation 
 * File: smmu_virt_config.c
 */

#include <smmu_v3.h>

#define RTOS_STREAM_ID   0x01A
#define AAOS_STREAM_ID   0x02F

#define RTOS_PASID       1
#define AAOS_PASID       2

void configure_smmu_stream_mapping(void) {
    /* 1. Reset Context Descriptor for Guest VMs */
    smmu_write_reg(SMMU_CR0, SMMU_CR0_SMMUEN_DISABLE);

    /* 2. Configure Stream Table Entry (STE) for RTOS Domain (Bypass or Identity Stage 2) */
    struct smmu_ste rtos_ste;
    rtos_ste.valid = 1;
    rtos_ste.config = STE_CONFIG_STAGE2_ONLY;
    rtos_ste.s2_cfg.vmid = RTOS_PASID;
    rtos_ste.s2_cfg.httbr = RTOS_STAGE2_PAGE_TABLE_BASE;
    smmu_update_ste(RTOS_STREAM_ID, &rtos_ste);

    /* 3. Configure Stream Table Entry (STE) for AAOS Domain (Restricted Access) */
    struct smmu_ste aaos_ste;
    aaos_ste.valid = 1;
    aaos_ste.config = STE_CONFIG_STAGE2_ONLY;
    aaos_ste.s2_cfg.vmid = AAOS_PASID;
    aaos_ste.s2_cfg.httbr = AAOS_STAGE2_PAGE_TABLE_BASE;
    smmu_update_ste(AAOS_STREAM_ID, &aaos_ste);

    /* 4. Enable SMMUv3 Translation */
    smmu_write_reg(SMMU_CR0, SMMU_CR0_SMMUEN_ENABLE);
}

4. 차량용 하이퍼바이저 및 AAOS 개발 및 디버깅 팁

1. GICv3 Virtual Interrupt Controller (vGIC) 바인딩 확인

AAOS 영역에서 물리 인터럽트(Physical Interrupt)가 감지되었을 때, 하이퍼바이저의 렌더링 지연 없이 Virtual CPU(vCPU)로 인터럽트가 전달되는지 확인해야 합니다. /proc/interrupts 및 하이퍼바이저 콘솔 명령어를 통해 인터럽트 분배 상태를 모니터링합니다.

2. VirtIO Display Sharing (virtio-gpu) 프레임 레이트 최적화

단일 GPU를 두 OS가 공유하거나 디스플레이 컨트롤러의 파티셔닝 기능을 사용할 때, Android의 SurfaceFlinger 패킷이 RTOS의 디스플레이 레이어를 침범하지 않도록 하드웨어 오버레이 전용 하이퍼바이저 그래픽 파이프라인을 구축해야 합니다.

3. Ftrace 및 Hypervisor Event Log 디버깅

하드웨어 가상화 진입 및 이탈 시 발생하 원인 불명의 Latency를 분석하기 위하여 ARM Virtualization Traps(VM-Exit) 횟수를 추적해야 합니다.

# Tracing VM-Exit and Trapped Registers in Linux Guest (AAOS)
echo 1 > /sys/kernel/debug/tracing/events/kvm/kvm_exit/enable
echo 1 > /sys/kernel/debug/tracing/events/kvm/kvm_entry/enable
cat /sys/kernel/debug/tracing/trace_pipe

5. 하이퍼바이저 환경에서 흔히 하는 실수 및 예외 처리 (Troubleshooting)

1. SMMU Translation Fault 에러 발생 (Context Fault)

AAOS 커널 드라이버가 하이퍼바이저에 할당되지 않은 물리 메모리 영역으로 DMA 전송을 시도하면 SMMU 파이프라인에서 Fault가 발생하며 장치가 정지합니다.

[ERROR] SMMUv3: Context Fault Detected!
[ERROR] Stream ID: 0x02F (AAOS Domain), Address: 0x8000F000
[ERROR] Fault Type: Translation Fault (Stage 2)
[ERROR] Action: Terminating DMA Transaction to prevent memory corruption.
  • 원인: AAOS의 Device Tree(dts) 파일에 정의된 메모리 맵(Reserved Memory) 규격과 하이퍼바이저의 Stage 2 Page Table 범위 지정이 불일치할 때 발생합니다.
  • 해결 방법: 하이퍼바이저의 VM 구성 파일(Hypervisor Configuration XML/C)과 AAOS 커널 DTS의 reserved-memory 노드 물리 주소 영역을 완전히 일치시켜야 합니다.

2. Shared Memory IPC 대역폭 폭목 현상 및 FastRPC Latency

AAOS와 RTOS 간 CAN 통신 데이터를 공유 메모리로 주고받을 때 spinlock 경쟁으로 인해 실시간 인터럽트 처리가 지연되는 현상이 발생합니다.

  • 원인: 공유 메모리 접근 보호를 위해 Lock을 남용하거나, Lock-free Ring Buffer 구조를 사용하지 않았을 때 발생합니다.
  • 해결 방법: Inter-VM 통신 시 무사고 Ring Buffer 구조를 채택하고, ARM SEV(Send Event) 및 WFE(Wait For Event) 명령어 기반의 하드웨어 알림 메커니즘을 사용해야 합니다.

6. 결론: 하이퍼바이저 기반 차량용 시스템의 향후 방향

단일 AP 상에서 RTOS와 AAOS를 하이퍼바이저로 통합하는 기술은 부품 수 감소(BOM Cost 절감)와 차세대 SDV(Software Defined Vehicle) 아키텍처 구현을 위한 필수 과제입니다.

ARMv8/v9 아키텍처의 EL2 하드웨어 가상화 기능과 SMMUv3 메모리 보호 기술을 정확히 이해하고 적용하면, ASIL-D 수준의 안정성을 보장하면서 AAOS의 유연한 인포테인먼트 환경을 성공적으로 통합할 수 있습니다.

반응형