AGL(Automotive Grade Linux)에 대하여
1. 서론
AGL(Automotive Grade Linux)은 유럽, 일본, 한국 등 여러 자동차 제조사와 부품 회사들의 협업을 통해 만들어진 자동차 환경에 적합한 오픈소스 OS(운영체제)입니다. 토요타의 강력한 자금력을 바탕으로 리눅스 재단의 주도 하에 빠르게 발전하고 있습니다.
참여 회원사들이 많지만, 토요타를 중심으로 한 일본 기업들이 매우 적극적으로 이 프로젝트를 추진하고 있습니다. https://www.automotivelinux.org/about/members/
토요타는 실제로 AGL에 대해 마치 재정적 후원자에 불과한 것처럼 다소 소극적인 활동을 보이고 있었지만, 2020년 3분기부터 갑자기 꽤 공격적으로 추진하기 시작했습니다. 여담으로, 하버드 비즈니스 스쿨 교육의 단골 손님이자 궁극의 관료 조직인 토요타는 최근 성과 기반 시스템으로 변경을 시도하고 AGL을 포함한 다양한 SW 정책을 통해 변화를 시도하고 있습니다. (소문에 따르면 테슬라에 자극받았다고…)
최근에는 BMW와 VW 그룹의 연구소도 적극적으로 참여하고 있으며, 테슬라에 대항하기 위한 일종의 보완 세트로 전략적 제휴를 하는 것 같습니다…
이러한 이유로 AGL에 대한 기본적인 학습이 필수적이어야 한다고 느꼈고, 요약과 참고 자료로 이 글을 쓰기로 했습니다.
그럼 시작해볼까요?
2. 서막
AGL을 이해하려면 타이젠 OS에 대해 조금 알아야 합니다. 타이젠 OS는 삼성과 인텔이 시작한 모바일 환경 OS입니다. 안드로이드와 iOS의 독점을 막기 위해 야심차게 시작했지만, 그들의 강력한 개발자 친화적 정책과 마케팅 전략에 압도적으로 패배하여 결국 모바일 시장에서 역사의 뒤안길로 사라졌습니다. (삼성은 2018년부로 타이젠 폰 개발을 중단했습니다)
하지만 AGL은 이 죽은 OS를 타이젠 IVI를 참조로 하여 기본 프로젝트를 시작하면서 되살리고 있습니다.
3. 경쟁
대표적인 경쟁자는 GENIVI Alliance의 GENIVI 오픈소스 소프트웨어 프로젝트입니다. (향후 기사에서 자세히 다룰 예정입니다)
GENIVI는 2009년 더 이른 시점에 시작되었습니다. 이 프로젝트도 리눅스 재단이 주도하고 있습니다.
참여 회원으로는 BMW Group, Delphi, GM, Intel, Magneti-Marelli, PSA Peugeot Citroen, Visteon, Wind River System 등이 있습니다. 자동차 OEM뿐만 아니라 NASA 로켓 OS(VxWorks)로 유명한 Wind River와 같은 회사도 참여하여 스마트카 시장에서 반구글 진영의 대표 선수 중 하나가 되었습니다.
4. 목표
위에서 언급했듯이 AGL은 IVI(In-Vehicle Infotainment) 시장을 목표로 합니다. 이는 GENIVI도 마찬가지입니다. 이 두 OS의 공통점은 비영리 단체라는 것입니다. 시장 논리 때문인지 아닌지, 개발 속도가 안드로이드나 iOS에 비해 상당히 느렸습니다. 하지만 구글의 안드로이드 OS 사용 라이선스 자체가 차단된 2020년 화웨이 사건과 같은 사건 이후, 그리고 최근 국제 분쟁으로 격화되면서, 이러한 OS의 개발 속도가 가속화되고 있습니다.
방향성을 보면 현재 모바일에서 지원되는 기능을 따라잡는 것을 우선시하는 것 같습니다.
하지만 여전히 갈 길이 매우 멉니다.
AGL의 2020년 로드맵 자료를 통해 현재 지표와 방향을 살펴봅시다. 링크
5. 2020 로드맵 (2월 업데이트)
- Yocto 2.6(thud) → 3.0(zeus) 플랫폼 업데이트
- 다양한 플랫폼에 대한 그래픽 API 기능 지원
- Android Auto, Apple CarPlay와 같은 스마트폰 연결 솔루션
- 지속적인 업데이트를 위한 로드맵
- 향상된 QA 및 테스트(CI/CD) 커버리지
- C/C++ 스켈레톤 코드 및 Json 자동 생성 API 도구 개발
- 클라우드 시스템을 사용하여 스마트폰을 통해 차량을 제어하는 모델 제안
- 기본 MQTT 프로토콜 지원 (최소 전력 및 데이터로 통신)
- 보안/애플리케이션 프레임워크
- 애플리케이션 프레임워크 관련 방화벽 기능 추가
- 보안 관리자 기능을 통한 보안 강화
- 플러그인, 보안, 프로토콜을 지원하고 유지 관리가 쉬운 프레임워크 제공
- Java Client, LXC/systemd와 같은 레거시 및 타사 애플리케이션 지원
- 연결 지속성을 위한 내장 기능 (keep alive, 재연결)
- Javascript 및 python 바인딩 지원
- 부팅 및 전원 관련
- 부팅 시간 단축, 부팅 모드 선택, 모니터링 기능을 지원하는 부팅 관리자
- RAM Sleep 지원 & 저온 작동
- 최소 기능이 필요한 ECU를 위한 AGL 최소화 시스템 기능 지원
- QoS를 보장하기 위한 실시간 API 기능 지원
5.1 App FW & Security EG(Expert Group)
-
개발자가 애플리케이션에 서명하고 로드할 수 있는 메커니즘 구축
-
웹 앱용 앱 런처 및 즉시 다운로드 가능한 HTML5용 코드 관리 전략
-
백그라운드에서 권한이 없는 앱을 중지하는 앱 프레임워크 API 및 전략 (예: SIGTERM)
-
Sleep 모드에서 복귀할 수 있는 앱 프레임워크 통신 바인더 제공
-
애플리케이션 생명주기 관리자
- 홈 화면에서 백그라운드 앱 인식 (음악, 전화, 읽지 않은 메시지 등)
- 관리자를 통해 각각을 끌 수 있는 기능
- SM(State Management) 정의 및 구현 필요
-
앱 등록 및 패키징을 위한 하드웨어 추상화 계층(HAL) API 제공
-
키를 관리하고 유지하며 멀티플랫폼 기반으로 구축할 수 있는 메인 애플리케이션 프레임워크의 모듈화
- 애플리케이션 프레임워크와 키의 분리 (코드 레벨)
- 장치 개발자가 키를 쉽게 변경할 수 있도록 함
- 쉬운 키 관리 및 바인딩을 위한 라이브러리 제공
-
Web Apps/HTML5
- WAM(Web App Manager)에서 요구하는 Chromium Webview Upstream API 지원
- WAM과 Chromium 간의 통신 연결 개선
- WAM upstream과 WebOSE Chromium이 독립적으로 작동하도록 함
- 새로운 Window Manager와 WAM의 통합
- 웹 앱
- 새로운 보안 모델 통합
- 향상된 애플리케이션 생명주기 관리자
- 컨테이너화된 HTML5 데모 플랫폼 제공
- 데모 웹 앱 라이브러리 제공
- 추가 데모 애플리케이션 제공
5.2 Graphical EG
2019년 말까지 대부분의 로드맵을 달성한 것으로 보임
- Window Manager 및 Homescreen 개발 완료
- Homescreen API/서비스
- QT, HTML5 완료 단계
- 일본어 및 영어 가상 키보드를 위한 고급 API 제공
- 팝업 기능 지원 (가상 키보드, 경고 등)
- 멀티 디스플레이 해상도 관련 기능 지원
- Portrait vs Landscape
- 확장 가능한 디스플레이 크기
- Homescreen API/서비스
- 멀티 페이지, 폴더, 슬라이더 및 기타 오프스크린 앱 관리
- 향상된 듀얼 스크린 기능
- 하드웨어 플레인 관리: 후방 카메라, 스마트폰 연결 등
- 대화형 사용자 응답 기능: 화면 흔들림, 비프음 등
- Wayland/Weston Upstream 지원
- xdg 프로토콜
- QT 변경 검토: HTML5, GTK+ 등
- 고급 오디오 API 지원
- Bluetooth Audio를 Blues/Alas로 변경
- 음성 인식 및 텍스트 음성 변환 서비스
- 마이크 입력과 미디어 플레이어 출력 간의 정책 관리
5.3 Connectivity EG
- 차량 신호 관리
- 마지막 차량 설정을 기반으로 한 CAN 메시지 초기화
- 스트리밍 및 블루레이 콘텐츠 암호화
- CANoe ↔ AGL 메시지 변환 기능 지원 향상
- 향상된 블루투스 기능
- AGL을 지원하는 다른 프로젝트에서 수행한 작업을 기반으로 독점 칩 스택 지원 준비
- 저전력 기능 지원
- 향상된 Wifi
- AP 모드 지원
- 향상된 전화 기능
- 네트워크 바인딩
- 동시 전화 통화가 필요한 텔레매틱스 서비스를 위한 동시성 기능 제공
5.4 V2X EG
- 킥오프 대기 중
5.5 Virtualization EG
- 호스트로서의 AGL 가상화 지원
- ARM과 Intel 모두를 지원하는 오픈소스 하이퍼바이저 기능 추가
- 컴파일 시 선택할 하이퍼바이저 결정
- 마침내(?) KVM 지원 (Renesas RCar-M3에서 사용 가능)
- XEN 및 Jailhouse 지원
- 게스트로서의 AGL 가상화 지원
- ARM 및 Intel CPU에서 게스트 OS로 공식 운영
- XEN, KVM, Jailhouse 지원
- 가이드 문서 제공
- AGL의 그래픽 가상 머신 관리자 애플리케이션
- AGL GUI에서 게스트 OS를 제어하는 도구 생성
- 게스트 OS 시작/중지, USB 연결 기능 제공
- VM/AGL 프로파일 통신
- 서로 다른 VM과 AGL 간의 통신 및 상호 작용을 위한 공통 API 정의/설계/개발
5.6 Navi EG
- AGL 내비게이션 API 개발 완료
- 문서 작성 완료
- 참조 앱 제공
6. 5성 프로젝트
6.1 리소스 제어 프로젝트
AGL은 일련의 작업(커널의 cpuset)에 CPU 세트를 할당하는 메커니즘을 제공해야 합니다. 정책 기반 결정에 따라 정책 관리자는 커널 계층에서 “리소스 제어”를 사용하여 대상 프로세스 또는 프로세스 그룹에 적절한 CPU 하위 집합을 할당해야 합니다. (일반적으로 cgroups/cpuset이 사용됩니다).
- 배경: 하드웨어에는 여러 CPU가 있을 수 있고 시스템은 여러 작업/앱을 실행할 수 있습니다. 시스템은 스케줄링 및 경합(캐시 등)을 줄이기 위해 신중한 프로세서 배치로 이익을 얻을 수 있습니다.
7. 4성 프로젝트
7.1 스마트 디바이스 링크(SDL)
스마트 디바이스 링크를 AGL로 포팅합니다.
- 배경: 스마트 디바이스 링크는 포드의 차세대 차량에서 사용되고 있으며 토요타와 협력하여 업계 전반에 마케팅되고 있습니다.
8. 결론
위와 같이 로드맵을 정리함으로써 지금까지 진행된 부분과 향후 방향을 추론할 수 있었습니다.
wifi, bluetooth, audio와 같은 장치 사용을 위한 API는 어느 정도 성숙했고, 자동차 환경에서 가장 중요한 내비게이션 API는 완성 단계에 있는 것으로 보입니다. 웹 앱 지원에 많은 노력을 기울여 크로스 플랫폼 호환성을 보장하고 개발자에게 유연한 API를 제공할 수 있을 것 같습니다.
또한 프레임워크 수준에서 보안을 보장하고 개발자가 더 쉽게 개발할 수 있도록 많은 API를 고려하고 있습니다.
스마트폰이 지원하는 많은 기능을 아직 지원하지 않는다는 것을 알 수 있었습니다. 실제로 클라우드와 같은 기능을 지원하려면 Connectivity 또는 V2X EG의 프로젝트가 진행되고 빠르게 성숙해야 합니다.
그래픽 API는 많은 영역에서 로드맵을 달성했지만, 현재의 QT에서 다른 것으로의 전환도 고려하고 있습니다.