KR102379110B1 - 차량용 프로세서의 안전한 부트 - Google Patents

차량용 프로세서의 안전한 부트 Download PDF

Info

Publication number
KR102379110B1
KR102379110B1 KR1020200039896A KR20200039896A KR102379110B1 KR 102379110 B1 KR102379110 B1 KR 102379110B1 KR 1020200039896 A KR1020200039896 A KR 1020200039896A KR 20200039896 A KR20200039896 A KR 20200039896A KR 102379110 B1 KR102379110 B1 KR 102379110B1
Authority
KR
South Korea
Prior art keywords
file
boot
manifest file
version
vehicle
Prior art date
Application number
KR1020200039896A
Other languages
English (en)
Other versions
KR20200117889A (ko
Inventor
칼 로빈슨
재커리 데이비드 가우치
Original Assignee
모셔널 에이디 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 모셔널 에이디 엘엘씨 filed Critical 모셔널 에이디 엘엘씨
Publication of KR20200117889A publication Critical patent/KR20200117889A/ko
Priority to KR1020220034660A priority Critical patent/KR102549270B1/ko
Application granted granted Critical
Publication of KR102379110B1 publication Critical patent/KR102379110B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/575Secure boot
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4416Network booting; Remote initial program loading [RIPL]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)
  • Traffic Control Systems (AREA)

Abstract

특히, 본원에는 차량 내의 프로세서를 안전하게 부팅하기 위한 기술이 설명된다.  장치는, 차량의 하나 이상의 프로세서에 결합되어 상기 프로세서를 위한 안전한 부트 프로세스를 관리하는 회로를 포함한다.  회로는, 차량에 동력이 공급되었다는 지시를 수신하고 네트워크 서버에 차량의 프로세서를 위한 부트 파일에 대한 요청을 송신한다.  대응하여, 회로는 프로세서에 각각 대응하는 부트 파일의 최신 버전을 서버로부터 수신하는데, 각각의 부트 파일은 신뢰할 수 있는 기관의 디지털 서명을 포함한다.  부트 파일의 최신 버전을 획득하는 것에 응답하여, 회로는 각각의 부트 파일을 사용하여 프로세서를 순차적으로 부팅하는데, 각각의 프로세서는 대응하는 클래스 인증 키를 사용하여 부트 파일 내 디지털 서명의 신뢰성을 검증하면 대응하는 부트 파일을 실행한다.

Description

차량용 프로세서의 안전한 부트{SECURE BOOT OF VEHICULAR PROCESSORS}
본 기재는 차량용 프로세서의 안전한 부트에 관한 것이다.
차량, 예를 들어 자율 주행 또는 반자율 주행 자동차 또는 트럭은 특히 차량의 동작, 예를 들어 온보드 센서로부터의 주위 환경에 관한 정보를 프로세싱하는 것 또는 조향 또는 제동 또는 양자 모두를 제어하는 것을 용이하게 하기 위한 프로세서를 포함한다. 차량에 전력이 공급될 때, 차량 온보드 프로세서는 부트 파일을 사용하여 부팅된다.
하나의 양태에서, 장치는 차량의 하나 이상의 프로세서에 결합되고 하나 이상의 프로세서에 대한 안전한 부트 프로세스를 관리하는 회로를 포함한다. 차량에 전력이 공급될 때, 회로는 차량의 하나 이상의 프로세서에 대한 부트 파일의 요청을 네트워크 서버에 전송한다. 요청의 전송에 응답하여, 회로는 서버로부터, 하나 이상의 프로세서에 개별적으로 대응하는 부트 파일의 가장 최신 버전을 수신하는데, 각각의 부트 파일은 신뢰 기관(trusted authority)의 디지털 서명을 포함한다. 회로는 하나 이상의 프로세서를 순차적으로 부팅하여, 각각의 부트 파일을 프로세서에 전송한다. 하나 이상의 프로세서의 각각의 프로세서는 대응하는 클래스 인증 키를 사용하여 부트 파일 내 디지털 서명을 유효성 확인함으로써 각각의 개별 부트 파일의 인증을 검증한다. 또한, 프로세서는 부트 파일이 블랙 리스트되지 않은 것을 확인한다. 부트 파일이 인증된 것으로 검증되고 블랙 리스트되지 않았을 때, 프로세서는 부트 파일을 실행한다.
다른 양태에서, 장치는 차량의 하나 이상의 프로세서에 결합되고 하나 이상의 프로세서에 대한 안전한 부트 프로세스를 관리하는 회로를 포함한다. 회로는 원격 네트워크 서버에, 차량의 고유 식별자를 전송한다. 고유 식별자를 네트워크 서버에 전송하는 것에 응답하여, 회로는 네트워크 서버로부터, 장치와 연계된 하나 이상의 프로세서에 의한 실행을 위한 하나 이상의 제1 부트 파일에 대한 정보를 포함하는 제1 매니페스트 파일을 수신한다. 회로는 제1 매니페스트 파일에 대해 특정된 버전 번호를 결정한다. 제1 매니페스트 파일에 대해 특정된 버전 번호가 유효한 버전이라는 것을 결정하는 조건 하에서, 회로는 제1 매니페스트 파일로부터 제1 부트 파일에 대한 정보를 획득한다. 회로는, 획득된 정보로부터, 제1 매니페스트 파일이 나타내는 하나 이상의 제1 부트 파일의 각각의 가장 최신 버전이 장치에 로컬적으로(locally) 이용 가능하다는 것을 결정한다. 제1 부트 파일의 가장 최신 버전이 장치에 로컬적으로 이용 가능한 버전과 상이하다는 결정에 따라, 회로는 네트워크 리소스로부터 제1 부트 파일의 가장 최신 버전을 획득한다. 제1 부트 파일의 가장 최신 버전을 획득하는 것에 응답하여, 회로는 하나 이상의 프로세서를 부팅하는데, 이는 하나 이상의 프로세서 각각에, 제1 매니페스트 파일 및 프로세서에 대응하는 제1 부트 파일의 가장 최신 버전을 제공하는 것을 포함하고, 프로세서는 제1 부트 파일의 인증을 검증하였을 때 제1 부트 파일을 실행한다.
다른 양태에서, 장치는 하나 이상의 프로세서, 및 하나 이상의 프로세서에 의해 실행될 때, 하나 이상의 프로세서로 하여금 제1 플랫폼에 대해 제1 플랫폼의 구성에 대한 정보를 제공하는 제1 매니페스트 파일을 생성하게 하는 명령을 저장하는 메모리를 포함하는데, 상기 정보는 제1 플랫폼에 대응하는 하나 이상의 프로세서에 의한 실행을 위한 부트 파일의 사양을 포함한다. 명령은, 하나 이상의 프로세서로 하여금 제1 플랫폼을 사용하는 하나 이상의 제1 디바이스에, 제1 매니페스트 파일이 제1 플랫폼에 대해 이용 가능하다는 것을 나타내는 통지를 전송하게 한다. 명령은, 하나 이상의 프로세서로 하여금 하나 이상의 제1 디바이스의 특정 디바이스로부터, 제1 매니페스트 파일에 대한 요청을 수신하게 하는데, 이 요청은 특정 디바이스의 고유 식별자를 포함한다. 명령은, 하나 이상의 프로세서로 하여금 고유 식별자를 사용하여, 특정 디바이스가 제1 플랫폼을 사용하고 있는지를 결정하게 한다. 특정 디바이스가 제1 플랫폼을 사용하고 있다고 결정하면, 명령은 하나 이상의 프로세서로 하여금 특정 디바이스에, 제1 매니페스트 파일을 전송하게 한다.
이들 양태 및 다른 양태, 구성 및 구현예는 기능을 수행하기 위한 방법, 장치, 시스템, 컴포넌트, 프로그램 제품, 수단 또는 단계, 그리고 다른 방식으로 표현될 수 있다.
이들 양태 및 다른 양태, 구성 및 구현예는 청구 범위를 포함하는 후속하는 기재로부터 명백해질 것이다.
도 1은 자율 주행 성능을 갖는 차량의 일 예를 도시한다.
도 2는 예시적인 "클라우드" 컴퓨팅 환경을 예시한다.
도 3은 컴퓨터 시스템을 예시한다.
도 4는 자율 주행 차량을 위한 예시적인 아키텍처를 도시한다.
도 5는 인지 모듈에 의해서 사용될 수 있는 입력 및 출력의 일 예를 도시한다.
도 6은 LiDAR 시스템의 일 예를 도시한다.
도 7은 동작 중인 LiDAR 시스템을 도시한다.
도 8은 LiDAR 시스템의 동작을 더 상세하게 도시한다.
도 9는 계획 모듈의 입력과 출력 사이의 관계의 블록도를 도시한다.
도 10은 경로 계획 수립에 사용되는 방향 그래프(directed graph)를 도시한다.
도 11은 제어 모듈의 입력 및 출력의 블록도를 도시한다.
도 12는 제어기의 입력, 출력, 및 컴포넌트의 블록도를 도시한다.
도 13은 자율 주행 성능을 갖는 차량의 안전 부팅 시스템의 일 예를 도시한다.
도 14는 중앙 집중식 서버가 차량 플리트(fleet of vehicles)에 대한 매니페스트 파일의 분포를 관리하는 시스템의 일 예를 도시한다.
도 15-18 은 차량용 프로세서를 안전하게 부팅하기 위한 예시적인 프로세스를 도시하는 흐름도이다.
설명을 위해, 후속하는 기재에서는, 본 발명에 대한 철저한 이해를 제공하기 위해 다수의 특정한 세부사항이 설명된다. 그러나, 본 발명은 이러한 특정한 세부사항 없이 실시될 수 있음이 명백하다. 다른 예에서, 본 발명을 불필요하게 모호하게 하는 것을 회피하기 위해, 공지된 구조 및 디바이스는 블록도 형태로 도시된다.
도면에서, 기재를 용이하게 하기 위해, 디바이스, 모듈, 명령 블록 및 데이터 요소를 나타내는 것과 같은 개략적 요소의 특정한 배열 또는 순서화가 도시될 수 있다. 그러나, 본 기술 분야의 일반적 기술자라면, 도면의 개략적 요소의 특정한 순서화 또는 배열이 프로세싱의 특정한 순서 또는 시퀀스, 또는 프로세스의 분리가 요구된다는 것을 암시하는 것을 의미하지는 않는다는 점을 이해할 것이다. 또한, 도면에 개략적 요소를 포함시키는 것이, 그러한 요소가 모든 실시예에서 요구된다는 것을 암시한다는 것을 의미하지 않거나, 또는 그러한 요소에 의해 표현된 특징이 일부 실시예에서 포함되지 않거나 또는 다른 요소와 조합되지 않는다는 점을 암시한다는 것을 의미하지 않는다.
또한, 도면에서, 둘 이상의 다른 개략적 요소 사이의 연결, 관계 또는 연관을 보여주기 위해 실선 또는 파선 또는 화살표와 같은 연결 요소가 사용되는 경우에, 임의의 그러한 연결 요소의 부재가 연결, 관계 또는 연관이 존재할 수 없다는 것을 암시한다는 것을 의미하지 않는다. 즉, 요소 사이의 일부 연결, 관계 또는 연관은 본 개시내용을 모호하게 하지 않기 위해 도면에 도시되지 않을 수 있다. 또한, 예시를 용이하게 하기 위해, 요소 사이의 다수의 연결, 관계 또는 연관을 나타내기 위해 단일의 연결 요소가 사용될 수 있다. 예를 들어, 연결 요소가 신호, 데이터 또는 명령의 통신을 나타내는 경우, 본 기술 분야의 일반적 기술자라면, 그러한 요소가, 통신에 영향을 주기 위해 필요할 수 있는 단일 신호 경로 또는 다중 신호 경로(예를 들어, 버스)를 나타낸다는 것을 이해할 것이다.
그 예가 첨부된 도면에 예시된 실시예가 상세하게 참조될 것이다. 후속하는 상세한 설명에서, 다양하게 설명된 실시예의 철저한 이해를 제공하기 위하여 다수의 특정한 세부사항이 설명된다. 그러나, 다양하게 설명된 실시예는 이러한 특정한 세부사항 없이 실시될 수 있다는 것이 본 기술 분야의 일반적 기술자에게는 자명할 것이다. 다른 예에서, 실시예의 양태를 불필요하게 모호하게 하지 않도록 공지된 방법, 절차, 컴포넌트, 회로 및 네트워크는 상세하게 기술되지 않았다.
서로 독립적으로 또는 다른 특징의 임의의 조합으로 각각 사용될 수 있는 몇몇 특징이 이하에 기술된다. 그러나, 임의의 개별 특징은 위에서 논의된 임의의 문제를 해결할 수 없거나 또는 위에서 논의된 문제 중 단지 하나만을 해결할 수 있다. 위에서 논의된 문제 중 일부는 본원에 기술된 특징 중 임의의 것에 의해 완전히 해결되지 않을 수 있다. 표제가 제공되지만, 특정 표제와 관련되나 해당 표제를 갖는 섹션에서 발견되지 않은 정보가 본원의 다른 곳에서 발견될 수도 있다. 실시예는 후속하는 개요에 따라 본원에 따라 기술된다.
1. 일반적 개요
2. 하드웨어 개요
3. 자율 주행 차량 아키텍처
4. 자율 주행 차량 입력
5. 자율 주행 차량 계획
6. 자율 주행 차량 제어
7. 차량용 프로세서의 안전한 부팅
8. 차량용 프로세서를 안전하게 부팅하기 위한 예시적인 프로세스
일반적 개요
실시예에서, AV(autonomous vehicle)과 같은 차량 내의 제어기 회로가 차량의 동작을 제어하기 위한 기능을 수행하는 차량 내의 다양한 프로세서에 결합된다. 제어기는 안전한 방식으로 프로세서를 부팅한다. 차량에 전력이 공급될 때, 제어기는 원격 네트워크 서버로부터 또는 저장부로부터 최신 부트 파일 정보를 페치하고, 프로세서를 순차적으로 부팅하여, 프로세서에 특정된 부트 파일을 각각의 프로세서에 전송한다. 프로세서는 각각의 프로세서의 타입에 따라, 하나 이상의 클래스로 그룹화된다. 프로세서의 클래스에 공통인 부트 파일이 각각의 클래스에 대한 클래스 인증 키로 서명된 디지털 서명을 포함하는데, 여기서 클래스 인증 키는 인증 동작을 위해 사용되고 클래스 내의 모든 프로세서에 의해 공통적으로 공유되는 암호 키로서, 이 때 프로세서의 상이한 클래스는 상이한 클래스 인증 키를 갖는다. 각각의 프로세서는 클래스에 대한 공통 클래스 인증 키를 사용하여 부트 파일의 디지털 서명을 유효성 확인함으로써 각각의 부트 파일의 인증을 검증하고, 디지털 서명이 성공적으로 검증되면 부트 파일을 실행한다.
일 실시예에서, 원격 네트워크 서버로부터 페치된 부트 파일 정보는 하나 이상의 프로세서에 대한 부트 파일을 설명하고 부트 파일이 어떻게 사용되어야 하는지에 대한 정보를 제공하는 매니페스트 파일을 포함하고, 차량의 동작 플랫폼에 대한 구성을 또한 특정한다. 일 실시예에서, 프로세서에 대한 부트 파일은 프로세서의 하드웨어 및 소프트웨어 기능성을 구성하기 위해 사용되는 소프트웨어 프로그램이며, 따라서 프로세서는 차량 내에서 그 의도된 기능을 수행하는 것이 가능하게 되는데, 예를 들어 특히 조향 또는 제동과 같은 운전 결정을 제어하고 차량 내의 하나 이상의 센서를 제어하는 것이 가능하게 될 수 있다. 일 실시예에서, 부트 파일은 도커 컨테이너(docker container) 내의 매니페스트 파일에서 특정되는데, 매니페스트 파일은 상이한 프로세서에 대해 별개의 도커 컨테이너를 포함한다. 도커 컨테이너는 대응하는 프로세서에 대해 하나 이상의 부트 파일을 포함하는 소프트웨어 패키지이다. 일 실시예에서, 프로세서는 대응하는 도커 컨테이너를 실행함으로써 그 부트 파일을 실행한다. 다른 실시예에서, 프로세서는 대응하는 도커 컨테이너로부터 그 부트 파일을 추출하고, 그 부트 파일을 개별적으로 실행한다.
제어기는 매니페스트 파일을 판독하고, 매니페스트 파일을 인스톨된 매니페스트 파일의 버전과 비교하여 로컬 캐싱된 부트 파일의 이미지의 변화를 식별한다. 부트 파일에 대한 변화가 없으면, 제어기는 로컬 캐싱된 버전을 사용하여 프로세서를 부팅한다. 그러나, 부트 파일에 대한 변화가 있다면, 제어기는 원격 네트워크 서버로부터 가장 최신 버전을 검색하고 부팅할 때 부트 파일의 가장 최신 버전을 프로세서에 제공한다.
일 실시예에서, 원격 네트워크 서버는 매니페스트 파일을 사용하여 차량 플리트에서 구동하는 소프트웨어를 제어하는 중앙 서버이다. 플리트 내의 하나 이상의 차량에 의해 사용되는 각각의 동작 플랫폼에 대해, 서버는 플랫폼을 구동하는 차량의 하드웨어 구성 또는 소프트웨어 구성 또는 양자 모두를 특정하는 매니페스트 파일을 생성한다. 동작 플랫폼은 그 AV 시스템을 구동하기 위해 차량에 의해 사용되는 OS(operating system)을 지칭하거나, 또는 차량의 AV 시스템에 대한 특정 하드웨어 구성을 지칭하거나, 또는 양자 모두를 지칭한다. 서버는 각각의 플랫폼에 대한 매니페스트 파일의 이용 가능성에 대해 차량에게 통지한다. 매니페스트 파일에 대한 차량으로부터의 요청을 수신하면, 서버는 요청에 포함된 차량의 고유 식별자에 기초하여, 차량이 구동 중인 특정 플랫폼을 결정한다. 이 결정에 후속하여, 서버는 차량이 구동 중인 플랫폼에 대응하는 매니페스트 파일을 차량에 전송한다.
본원에 설명된 발명의 요지는 몇몇 기술적 이점을 제공할 수 있다. 예를 들어, 실시예는 별개의 내장형 제어기가 안전한 방식으로 차량 온보드 프로세서를 부팅하게 함으로써 차량의 동작 안전성(security)을 개선할 수 있다. 차량 내의 프로세서는 중앙 서버로부터 전송된 매니페스트 파일 만을 사용하여 부팅되는데, 이는 차량에서 구동하는 소프트웨어를 제어하는 것을 돕는다. 프로세서는 제어기로부터 수신하는 모든 부트 파일이 매니페스트 파일에서 특정되는 것을 검증한다. 프로세서는 유효한 매니페스트 파일에 포함되지 않는 부트 파일을 실행하지 않는데, 이는 차량 내의 승인되지 않은 소프트웨어의 실행을 회피한다. 시스템은 서버로부터의 매니페스트 파일을 사용하는 차량 플리트에 대해 중앙 서버로부터의 완전한 제어를 가능하게 한다. 또한, 차량의 기존 구성에 대한 업데이트는, 업데이트된 부트 파일을 포함하는 매니페스트 파일의 더 새로운 버전을 푸시함으로써 해당 구성에 대한 임의의 변화를 구체화함으로써 효율적인 방식으로 수행될 수 있다.
일 실시예에서, 제어기는 로컬 카운터 값(local counter value)에 대한 비교에 의해 각각의 매니페스트 파일의 버전 번호를 검증하여, 매니페스트 파일의 더 새로운 버전만을 수락한다. 이는 매니페스트 파일의 이전의 구버전(outdated version)으로의 롤백을 방지한다. 또한, 제어기는, 매니페스트 파일 내 특정된 부트 파일이 서로 동기화된 상태에서 구동될 수 있으며 그로 인해 차량에서 구동하고 있는 소프트웨어가 일치하는 세트인 것을 보장하기 위해 상기 부트 파일을 검사한다. 또한, 각각의 프로세서는 그 자신의 안전성 검사를 수행한다. 디지털 서명을 사용하여 각각의 부트 파일을 인증함으로써, 각각의 프로세서는 각각의 부트 파일이 승인된 엔티티, 예를 들어 차량 플리트를 제어하는 중앙 서버에 의해 생성된 것을 검증한다. 프로세서가 프로세서의 타입에 특정된 클래스 인증 키를 사용하여 부트 파일을 검증하기 때문에, 프로세서의 타입에 대해 구성되지 않은 부트 파일은, 부트 파일이 다른 클래스 인증 키를 사용하는 서명을 갖는 것과 같이, 성공적으로 검증되지 않을 것이다. 이는 프로세서가 속하는 클래스에 대해 구성된 부트 파일만이 프로세서에 의해 실행되는 것을 보장한다.
플리트 내의 차량의 상이한 그룹은 상이한 매니페스트 파일을 사용하여 부팅될 수 있으며, 그로 인해 상이한 차량이 상이한 동작 시나리오에 대해 상이하게 구성될 수 있게 한다. 일련의 매니페스트 파일이 차량의 구성에 대한 모듈형 또는 계층형 업데이트(modular or layered updates)를 위해 함께 링크될 수 있는데, 이 때에 베이스 매니페스트 파일은 추가 매니페스트 파일의 페치 및 실행을 트리거링한다. 새로운 차량은 단지 매니페스트 클라이언트를 갖는 공장(factory)에서 구성될 수 있다. 차량이 목적지에 도달하고 사용할 준비가 되었을 때, 매니페스트 클라이언트는 서버로부터의 매니페스트 파일을 다운로드하는데 사용될 수 있고, 이후 차량은 의도된 사용을 위해 구성될 수 있다.
하드웨어 개요
도 1은 자율 주행 성능을 갖는 차량(100)의 일 예를 도시한다.
본원에서 사용된 바와 같이, 용어 "자율 주행 성능"은 차량이 실시간 인간 개입 없이 부분적으로 또는 완전하게 동작될 수 있게 하는 기능, 특징, 또는 설비를 지칭하며, 이는 완전한 자율 주행 차량, 고도의 자율 주행 차량, 및 조건부 자율 주행 차량을 비제한적으로 포함한다.
본원에서 사용되는 바와 같이, AV(autonomous vehicle)는 자율 주행 성능을 갖는 차량이다.
본원에서 사용되는 바와 같이, "차량"은 상품 또는 사람의 운송 수단을 포함한다. 예를 들어, 자동차, 버스, 기차, 비행기, 드론, 트럭, 보트, 선박, 잠수함, 비행선 등. 무인 자동차가 차량의 일 예이다.
본원에서 사용된 바와 같이, "궤적"은 제1 시공간적 위치로부터 제2 시공간적 위치까지의 AV를 운행시키기 위한 경로 또는 루트를 지칭한다. 일 실시예에서, 제1 시공간적 위치는 최초 또는 시작 위치로 지칭되고 제2 시공간적 위치는 목적지, 최종 위치, 목표, 목표 위치 또는 목표 장소로 지칭된다. 일부 예에서, 궤적은 하나 이상의 세그먼트(예를 들어, 도로의 섹션)로 구성되고, 각각의 세그먼트는 하나 이상의 블록(예를 들어, 차선 또는 교차로의 부분)으로 구성된다. 일 실시예에서, 시공간적 위치는 현실 세계 위치에 대응한다. 예를 들어, 시공간적 위치는 사람 또는 상품을 태우고 싣거나 또는 내려주고 내리는 픽업 또는 드롭-오프 위치이다.
본원에서 사용되는 바와 같이, "센서(들)"은 센서를 둘러싸는 환경에 관한 정보를 검출하는 하나 이상의 하드웨어 컴포넌트를 포함한다. 하드웨어 컴포넌트 중 일부는 감지 컴포넌트(예를 들어, 이미지 센서, 바이오메트릭 센서), 송신 및/또는 수신 컴포넌트(예를 들어, 레이저 또는 라디오 주파수 파 송신기 및 수신기), 아날로그 대 디지털 변환기와 같은 전자 컴포넌트, 데이터 저장 디바이스(예를 들어, RAM 및/또는 비휘발성 저장 장치), ASIC(application-specific integrated circuit)와 같은 소프트웨어 또는 펌웨어 컴포넌트 및 데이터 프로세싱 컴포넌트, 마이크로프로세서 및/또는 마이크로컨트롤러를 포함할 수 있다.
본원에 사용된 바와 같이, "장면 묘사"는 AV 차량 상의 하나 이상의 센서에 의해 검출되거나 AV 외부의 소스에 의해 제공되는 하나 이상의 분류 또는 라벨링된 대상체를 포함하는 데이터 구조(예를 들어, 리스트) 또는 데이터 스트림이다.
본원에서 사용된 바와 같이, "도로"는 차량에 의해서 횡단될 수 있는 물리적 영역이고, 지명된 주요 도로(예를 들어, 시 도로, 주간 고속도로, 등)에 대응할 수 있거나 또는 지명되지 않은 주요 도로(예를 들어, 주택 또는 사무실 건물 내의 사유 도로, 주차장의 일 섹션, 빈 로트의 일 섹션, 시골 지역의 비포장 경로, 등)에 대응할 수 있다. 일부 차량(예를 들어, 4륜 구동 픽업 트럭, 스포츠 유틸리티 차량 등)은 차량 진행에 특히 적합하지 않은 다양한 물리적 영역을 횡단할 수 있기 때문에, "도로"는 임의의 지자체 또는 다른 정부 또는 행정처에 의해 주요 도로로 공식적으로 규정되지 않은 물리적 영역일 수 있다.
본원에서 사용된 바와 같이, "차선"은 차량에 의해 횡단될 수 있는 도로의 일 부분이며, 차선 마킹 사이의 공간의 대부분 또는 전부에 대응할 수 있거나 또는 차선 마킹 사이의 공간의 단지 일부(예를 들어, 50% 미만)에 대응할 수 있다. 예를 들어, 멀리 이격된 차선 마킹을 갖는 도로가 마킹 사이에 둘 이상의 차량을 수용할 수 있고, 그에 따라 하나의 차량은 차선 마킹을 횡단하지 않은 상태에서 다른 차량을 추월할 수 있고, 따라서 차선 마킹 사이의 공간보다 협소한 하나의 차선을 갖거나 차선 마킹 사이의 2개의 차선을 갖는 것으로 해석될 수 있다. 차선은 차선 마킹의 부재 시에도 해석될 수 있다. 예를 들어, 차선은 환경의 물리적 특징, 예를 들어, 시골 지역에서의 주요 도로를 따르는 바위 및 나무에 기초하여 규정될 수 있다.
"하나 이상"은 하나의 요소에 의해 수행되는 하나의 기능, 예를 들어 분산된 방식으로 하나보다 많은 요소에 의해 수행되는 하나의 기능, 하나의 요소에 의해 수행되는 몇몇 기능, 몇몇 요소에 의해 수행되는 몇몇 기능, 또는 이들의 임의의 조합을 포함할 수 있다.
또한, 용어, 제1, 제2 등이 일부 예에서 다양한 요소를 설명하기 위해 본원에 사용되었지만, 이 요소는 이러한 용어에 의해 제한되지 않아야 한다는 것이 이해될 것이다. 이 용어들은 단지 하나의 요소를 다른 요소와 구별하기 위해 사용된다. 예를 들어, 기술된 다양한 실시예의 범위 내에서, 제1 접촉은 제2 접촉이라 명명될 수 있고, 유사하게 제2 접촉은 제1 접촉이라 명명될 수 있다. 제1 접촉 및 제2 접촉 양자 모두가 접촉이지만, 동일한 접촉은 아니다.
본원에 기술된 다양한 실시예의 설명에 사용된 용어는 단지 특정 실시예를 기술하기 위한 것이며, 제한하려는 것은 아니다. 기술된 다양한 실시예 및 첨부된 청구범위의 기재에서 사용될 때, 단수 형태는 문맥이 명백하게 달리 나타내지 않는 한, 복수 형태를 포함하도록 의도된다. 본원에서 사용된 "및/또는"이라는 용어는 하나 이상의 리스트된 연계 항목의 임의의 그리고 모든 가능한 조합을 지칭 및 포함한다는 것이 이해될 것이다. 또한, "포함한다", "포함하는", "구비한다", 및/또는 "구비하는"이라는 용어가 본원에서 사용될 때, 그 용어는 기술된 특징, 정수, 단계, 동작, 요소 및/또는 컴포넌트를 특정하지만, 하나 이상의 다른 특징, 정수, 단계, 동작, 요소, 컴포넌트, 및/또는 그의 그룹의 존재 또는 추가를 배제하는 것은 아니라는 것이 이해될 것이다.
본원에서 사용될 때, 용어 "~경우"는 문맥에 따라 임의로 "~할 때" 또는 "~할 시" 또는 "결정에 응답하여" 또는 "검출에 응답하여"를 의미하는 것으로 해석된다. 유사하게, "결정된 경우" 또는 "[명시된 조건 또는 이벤트]가 검출된 경우"이라는 문구는 문맥에 따라 임의로 "결정 시" 또는 "결정에 응답하여" 또는 "[언급된 조건 또는 이벤트] 검출 시" 또는 "[명시된 조건 또는 이벤트] 검출에 응답하여"를 의미하는 것으로 해석된다.
본원에서 사용된, AV 시스템은 하드웨어, 소프트웨어, 저장된 데이터 및 실시간으로 생성된 데이터의 어레이와 함께 AV로 지칭되는데, 이는 AV의 동작을 지원한다. 일 실시예에서, AV 시스템은 AV 내에 통합된다. 일 실시예에서, AV 시스템은 몇몇 위치에 걸쳐 확산되어 있다. 예를 들어, AV 시스템의 소프트웨어 중 일부는 도 3을 참조하여 후술되는 클라우드 컴퓨팅 환경(300)과 유사한 클라우드 컴퓨팅 환경 상에 구현된다.
일반적으로, 본원은 완전한 자율 주행 차량, 고도의 자율 주행 차량, 및 조건부 자율 주행 차량, 예를 들어 각각 소위 레벨 5 차량, 레벨 4 차량 및 레벨 3 차량을 포함하는 하나 이상의 자율 주행 성능을 갖는 임의의 차량에 적용 가능한 기술을 개시한다(차량의 자율성의 레벨 분류에 대한 세부 사항은 본원에 그 전체가 참조로 포함된, SAE 국제 표준 J3016: 온로드 자동차 자동 운전 시스템에 관한 용어의 분류 및 정의(Taxonomy and Definitions for Terms Related to On-Road Motor Vehicle Automated Driving Systems) 참조). 또한, 본원에서 개시된 기술은 부분적인 자율 주행 차량 및 운전자 보조 차량, 예를 들어 소위 레벨 2 및 레벨 1차량에도 적용 가능하다(SAE 국제 표준 J3016: 온로드 자동차 자동 운전 시스템에 관한 용어의 분류 및 정의 참조). 실시예에서, 레벨 1, 레벨 2, 레벨 3, 레벨 4 및 레벨 5차량 시스템 중 하나 이상은 센서 입력의 프로세싱에 기초하여 특정의 동작 조건 하에서 특정의 차량 동작(예를 들어, 조향, 제동, 및 맵 사용)을 자동화할 수 있다. 본원에서 개시된 기술은 완전한 자율 주행 차량으로부터 사람-운전 차량까지의 범위에 있는 임의의 레벨에 있는 차량에 혜택을 줄 수 있다.
도 1을 참조하면, AV 시스템(120)은, 대상체(예를 들어, 자연 장애물(191), 차량(193), 보행자(192), 자전거 운전자, 및 다른 장애물)를 회피하고 도로 법규(예를 들어, 동작 규칙 또는 운전 선호도)를 준수하면서, 궤적(198)을 따라 환경(190)을 통과해 목적지(199)(종종 최종 위치로 지칭됨)로 차량(100)을 동작시킨다.
일 실시예에서, AV 시스템(120)은 컴퓨터 프로세서(146)가 집합적으로 나타내는 하나 이상의 컴퓨터 프로세서로부터의 동작 커맨드를 수신하고 그를 따르도록 장치된 디바이스(101)를 포함한다. 일 실시예에서, 컴퓨터 프로세서(146)는 도 3을 참조하여 후술되는 프로세서(304)와 유사하다. 디바이스(101)의 예는 조향 제어(102), 브레이크(103), 기어, 가속기 페달 또는 다른 가속 제어 메커니즘, 앞유리 와이퍼, 사이드-도어 락, 윈도우 제어, 및 방향 지시등을 포함한다.
일 실시예에서, AV 시스템(120)은, AV의 위치, 선형 및 각속도 및 가속도, 및 방향(예를 들어, 차량(100)의 선단의 배향)과 같은 차량(100)의 상태 또는 조건의 특성을 측정 또는 추론하기 위한 센서(121)를 포함한다. 센서(121)의 예는, GPS, 차량 선형 가속도 및 각도 레이트 양자 모두를 측정하는 IMU(inertial measurement units), 휠 슬립 비율을 측정 또는 추산하기 위한 휠 속력 센서, 휠 브레이크 압력 또는 제동 토크 센서, 엔진 토크 또는 휠 토크 센서, 및 조향 각도 및 각도 레이트 센서(angular rate sensor)이다.
일 실시예에서, 센서(121)는 AV의 환경의 특성을 감지 또는 측정하기 위한 센서도 포함한다. 예를 들어, 센서(121)는 가시광 내의 단안식 또는 스테레오 비디오 카메라(122), 적외선 또는 열(또는 양자 모두) 스펙트럼, LiDAR(123), RADAR, 초음파 센서, TOF(time-of-flight) 심도 센서, 속력 센서, 온도 센서, 습도 센서, 및 강우 센서를 포함한다.
일 실시예에서, AV 시스템(120)은 컴퓨터 프로세서(146)와 연계된 기계 명령어 또는 센서(121)에 의해 수집된 데이터를 저장하기 위한 데이터 저장 유닛(142) 및 메모리(144)를 포함한다. 일 실시예에서, 데이터 저장 유닛(142)은 도 3과 관련하여 후술되는 ROM(308) 또는 저장 디바이스(310)와 유사하다. 일 실시예에서, 메모리(144)는 후술되는 메인 메모리(306)와 유사하다. 일 실시예에서, 데이터 저장 유닛(142) 및 메모리(144)는 환경(190)에 관한 이력, 실시간, 및/또는 예측 정보를 저장한다. 일 실시예에서, 저장된 정보는 맵, 운전 성능, 교통 정체 업데이트 또는 날씨 상태를 포함한다. 일 실시예에서, 원격에 위치된 데이터베이스(134)로부터 통신 채널을 통해 환경(190)에 관한 데이터가 차량(100)으로 송신된다.
일 실시예에서, AV 시스템(120)은 위치, 선형 및 각속도, 선형 및 각 가속도, 및 선형 및 각도 방향과 같은 다른 차량의 상태 및 조건의 측정 또는 추정된 특성을 차량(100)에 통신하기 위한 통신 디바이스(140)를 포함한다. 이 디바이스는 V2V(Vehicle-to-Vehicle) 및 V2I(Vehicle-to-Infrastructure) 통신 디바이스 및 지점간(point-to-point) 또는 애드혹(ad hoc) 네트워크 또는 양자 모두를 통한 무선 통신을 위한 디바이스를 포함한다. 일 실시예에서, 통신 디바이스(140)는 (라디오 및 광학적 통신을 포함하는) 전자기 스펙트럼 또는 다른 매체(예를 들어, 공기 및 음향 매체)를 통해 통신한다. V2V(Vehicle-to-Vehicle), V2I(Vehicle-to-Infrastructure) 통신(및 일부 실시예에서 하나 이상의 다른 타입의 통신)의 조합이 때때로 V2X(Vehicle-to-Everything) 통신으로 지칭된다. V2X 통신은 전형적으로, 자율 주행 차량 간의 사이 및 자율 주행 차량들 간의 통신을 위한 하나 이상의 통신 표준에 따른다.
일 실시예에서, 통신 디바이스(140)는 통신 인터페이스를 포함한다. 예를 들어, 유선, 무선, WiMAX, Wi-Fi, 블루투스, 위성, 셀룰러, 광학, 근거리, 적외선, 또는 라디오 인터페이스. 통신 인터페이스는 원격에 위치된 데이터베이스(134)로부터 AV 시스템(120)으로 데이터를 송신한다. 일 실시예에서, 원격에 위치된 데이터베이스(134)는 도 2에 기술된 바와 같이 클라우드 컴퓨팅 환경(200)에 내장된다. 통신 인터페이스(140)는 센서(121)로부터 수집된 데이터 또는 차량(100)의 동작과 관련된 다른 데이터를 원격에 위치된 데이터베이스(134)에 송신한다. 일 실시예에서, 통신 인터페이스(140)는 원격 조작에 관한 정보를 차량(100)에 송신한다. 일부 실시예에서, 차량(100)은 다른 원격(예를 들어, "클라우드") 서버(136)와 통신한다.
또한, 일 실시예에서, 원격에 위치된 데이터베이스(134)는 (예를 들어, 도로 및 거리 위치와 같은 데이터를 저장하는) 디지털 데이터를 저장 및 송신한다. 이러한 데이터는 차량(100) 상의 메모리(144)에 저장되거나, 원격에 위치된 데이터베이스(134)로부터 통신 채널을 통해 차량(100)으로 송신된다.
일 실시예에서, 원격에 위치된 데이터베이스(134)는 하루 중 유사한 시간에서 궤적(198)을 따라 이전에 진행된 차량의 운전 특성(예를 들어, 속력 및 가속도 프로파일)에 관한 이력 정보를 저장 및 송신한다. 일 구현예에서, 그러한 데이터는 차량(100) 상의 메모리(144) 상에 저장될 수 있거나, 또는 원격에 위치된 데이터베이스(134)로부터 통신 채널을 통해 차량(100)으로 송신될 수 있다.
차량(100) 상에 위치된 컴퓨팅 디바이스(146)는 실시간 센서 데이터 및 이전 정보 양자 모두에 기초하여 제어 액션을 알고리즘적으로 생성하여, AV 시스템(120)이 자율 주행 성능을 실행할 수 있게 한다.
일 실시예에서, AV 시스템(120)은 차량(100)의 사용자(예를 들어, 탑승자 또는 원격 사용자)에게 정보 및 경고를 제공하고 상기 사용자로부터 입력을 수신하기 위해 컴퓨팅 디바이스(146)에 결합된 컴퓨터 주변기기(132)를 포함한다. 일 실시예에서, 주변기기(132)는 도 3을 참조하여 아래에 논의되는 디스플레이(312), 입력 디바이스(314), 및 커서 제어기(316)와 유사하다. 결합은 무선 또는 유선이다. 인터페이스 디바이스 중 임의의 둘 이상이 단일 디바이스에 집적될 수 있다.
실시예에서, AV 시스템(120)은 디바이스(101)와 같은 복수의 디바이스, 센서(121)와 같은 복수의 센서, 또는 컴퓨터 주변 기기(132)와 같은 복수의 컴퓨터 주변 기기 중 하나 이상을 제어하는 복수의 컴퓨터 프로세서(146)를 포함한다. 일 실시예에서, 차량(100)에 전력이 공급될 때, 복수의 컴퓨터 프로세서(146)는 각각의 부트 파일을 사용하여 부팅된다. 일 실시예에서, 차량 내 프로세서(146)는 차량의 컴퓨트 노드(compute node)로도 지칭된다. 일 실시예에서, 프로세서를 위한 부트 파일은 아티팩트로도 지칭된다.
일 실시예에서, AV 시스템(120)은 복수의 컴퓨터 프로세서(146)의 부팅 프로세스를 관리하기 위한 제어기(148)를 포함한다. 일 실시예에서, 제어기(148)는 별개의 내장형 제어기, 예를 들어 마이크로컨트롤러 또는 마이크로프로세서이다. 일 실시예에서, 제어기(148)는 원격 네트워크 서버 예를 들어, 서버(136) 또는 도 2를 참조하여 기술된 클라우드 데이터 센터(204a, 204b, 및 204c)와 같은 클라우드 데이터 센터 내 서버와 통신하여, 복수의 컴퓨터 프로세서(146)에 대한 부트 파일의 가장 최신 버전을 결정한다. 일 실시예에서, 제어기(148)는 통신 디바이스(140)를 사용하여 원격 서버와 통신한다. 부트 파일의 가장 최신 버전의 위치에 따라, 제어기(148)는 로컬 저장 장치, 예를 들어, 저장 장치(142)로부터 부트 파일의 가장 최신 버전을 획득하거나, 또는 원격 네트워크 위치로부터 예를 들어 서버(136) 또는 원격에 위치된 데이터베이스(134a)와 같이 서버(136)로부터의 정보에 의해 특정되는 원격 저장 장치로부터 또는 클라우드 데이터 센터, 예를 들어 클라우드 데이터 센터(204a, 204b, 204c)로부터 부트 파일의 가장 최신 버전을 페치한다. 제어기(148)를 사용하여 복수의 컴퓨터 프로세서(146)를 부팅하는 프로세스가 도 13내지 도 18을 참조하여 상세히 후술된다.
도 2는 예시적인 "클라우드" 컴퓨팅 환경을 예시한다. 클라우드 컴퓨팅은 구성 가능한 컴퓨팅 리소스(예를 들어, 네트워크, 네트워크 대역폭, 서버, 프로세싱, 메모리, 저장 장치, 애플리케이션, 가상 머신, 및 서비스)의 공유 풀에 대한 간편한 주문형 네트워크 액세스를 가능하게 하기 위한 서비스 전달(service delivery)의 일 모델이다. 전형적인 클라우드 컴퓨팅 시스템에서는, 하나 이상의 대형 클라우드 데이터 센터가 클라우드에 의해 제공되는 서비스를 전달하는 데 사용되는 머신을 수용한다. 이제 도 2를 참조하면, 클라우드 컴퓨팅 환경(200)은 클라우드(202)를 통해 상호연결되는 클라우드 데이터 센터(204a, 204b, 204c)를 포함한다. 데이터 센터(204a, 204b, 및 204c)는 클라우드 컴퓨팅 서비스를 클라우드(202)에 연결된 컴퓨터 시스템(206a, 206b, 206c, 206d, 206e, 및 206f)에 제공한다.
클라우드 컴퓨팅 환경(200)은 하나 이상의 클라우드 데이터 센터를 포함한다. 일반적으로, 클라우드 데이터 센터, 예를 들어 도 2에 도시된 클라우드 데이터 센터(204a)는 클라우드, 예를 들어 도 2에 도시된 클라우드(202) 또는 클라우드의 특정 부분을 구성하는 서버의 물리적 배열체를 지칭한다. 예를 들어, 서버는 클라우드 데이터센터 내에 룸, 그룹, 로우(row), 및 랙(rack)으로 물리적으로 배열된다. 클라우드 데이터센터는 하나 이상의 서버의 룸을 포함하는 하나 이상의 구역을 갖는다. 각각의 룸은 하나 이상의 서버 로우를 가지며, 각각의 로우는 하나 이상의 랙을 포함한다. 각각의 랙은 하나 이상의 개별 서버 노드를 포함한다. 일부 구현예에서, 구역, 룸, 랙, 및/또는 로우 내의 서버는, 전력 요건, 에너지 요건, 열적 요건, 가열 요건 및/또는 다른 요건을 포함하는, 데이터센터 설비의 물리적 인프라스트럭처 요건에 기초하여 그룹으로 배열된다. 일 실시예에서, 서버 노드는 도 3에서 기술된 컴퓨터 시스템과 유사하다. 데이터 센터(204a)는 다수의 랙을 통해 분산된 다수의 컴퓨팅 시스템을 갖는다.
클라우드(202)는, 클라우드 데이터 센터(204a, 204b, 및 204c)를 상호연결하고 그리고 클라우드 컴퓨팅 서비스에 대한 컴퓨팅 시스템(206a 내지 206f)의 액세스를 용이하게 하는 것을 보조하는 네트워크 및 네트워킹 리소스(예를 들어, 네트워킹 장비, 노드, 라우터, 스위치, 및 네트워킹 케이블)와 함께 클라우드 데이터 센터(204a, 204b, 204c)를 포함한다. 일 실시예에서, 네트워크는 지상 또는 위성 연결을 사용하여 배치된 유선 또는 무선 링크를 사용하여 결합된 하나 이상의 로컬 네트워크, 광역 네트워크, 또는 인터네트워크의 임의의 조합을 나타낸다. 네트워크를 거쳐 교환되는 데이터는 IP(Internet Protocol), MPLS(Multiprotocol Label Switching), ATM(Asynchronous Transfer Mode) 및 프레임 릴레이 등과 같은 임의 수의 네트워크 계층 프로토콜을 사용하여 송신될 수 있다. 또한, 네트워크가 다수의 서브 네트워크의 조합을 나타내는 실시예에서, 상이한 네트워크 계층 프로토콜은 기저 서브 네트워크(underlying sub-networks)의 각각에서 사용될 수 있다. 일부 실시예에서, 네트워크는 공중 인터넷과 같은 하나 이상의 상호연결된 인터네트워크를 나타낸다.
컴퓨팅 시스템(206a 내지 206f) 또는 클라우드 컴퓨팅 서비스 소비자는 네트워크 링크 및 네트워크 어댑터를 통해 클라우드(202)에 연결된다. 일 실시예에서, 컴퓨팅 시스템(206a 내지 206f)은 다양한 컴퓨팅 디바이스, 예를 들어 서버, 데스크톱, 랩톱, 태블릿, 스마트폰, IoT(Internet of Things) 디바이스, 자율 주행 차량(자동차, 드론, 셔틀, 기차, 버스 등을 포함) 및 소비자 전자기기로서 구현된다. 일 실시예에서, 컴퓨팅 시스템(206a 내지 206f)은 다른 시스템 내에 또는 그 일부로서 구현된다.
도 3은 컴퓨터 시스템(300)을 도시한다. 일 구현에서, 컴퓨터 시스템(300)은 특수 목적 컴퓨팅 디바이스이다. 특수-목적 컴퓨팅 디바이스는 이러한 기술을 수행하기 위해 고정-배선되거나 또는 이러한 기술을 수행하도록 지속적으로 프로그램되는 하나 이상의 ASICs(application-specific integrated circuits) 또는 FPGAs(field programmable gate arrays)와 같은 디지털 전자 디바이스를 포함하거나, 펌웨어, 메모리, 다른 저장 장치, 또는 조합 내의 프로그램 명령(program instruction)에 따라 이러한 기술을 수행하도록 프로그램된 하나 이상의 범용 하드웨어 프로세서를 포함할 수 있다. 또한, 그러한 특수-목적 컴퓨팅 디바이스는 커스텀 고정-배선 로직, ASICs, 또는 FPGAs를 커스텀 프로그래밍과 조합하여 이러한 기술을 달성할 수 있다. 다양한 실시예에서, 특수-목적 컴퓨팅 디바이스는 기술을 구현하기 위한 고정-배선 및/또는 프로그램 로직을 포함하는 데스크톱 컴퓨터 시스템, 포터블 컴퓨터 시스템, 휴대용 디바이스, 네트워크 디바이스, 또는 임의의 다른 디바이스일 수 있다.
일 실시예에서, 컴퓨터 시스템(300)은 정보를 통신하기 위한 버스(302) 또는 다른 통신 메커니즘, 및 정보를 프로세싱하기 위해 버스(302)와 결합된 하드웨어 프로세서(304)를 포함한다. 하드웨어 프로세서(304)는, 예를 들어, 범용 마이크로프로세서이다. 또한, 컴퓨터 시스템(300)은 프로세서(304)에 의해 실행될 명령 및 정보를 저장하기 위해 버스(302)에 결합된 RAM(random-access memory)과 같은 메인 메모리(306) 또는 다른 동적 저장 디바이스를 포함한다. 일 구현예에서, 메인 메모리(306)는 프로세서(304)에 의해 실행될 명령의 실행 동안 일시적 변수 또는 다른 중간 정보를 저장하기 위해 사용된다. 이러한 명령은 프로세서(304)에 액세스 가능한 비-일시적 저장 매체에서 저장될 때, 컴퓨터 시스템(300)을 명령에서 특정된 동작을 수행하도록 커스터마이징된 특수-목적 머신으로 렌더링한다.
일 실시예에서, 컴퓨터 시스템(300)은, 프로세서(304)를 위한 정적 정보 및 명령을 저장하기 위해 버스(302)와 결합된 ROM(read only memory)(308) 또는 다른 정적 저장 디바이스를 포함한다. 자기 디스크, 광 디스크, 솔리드-스테이트 드라이브, 또는 3차원 크로스 포인트 메모리와 같은 저장 디바이스(310)가 제공되고 정보 및 명령을 저장하기 위해 버스(302)에 결합된다.
일 실시예에서, 컴퓨터 시스템(300)은 버스(302)를 통해, 정보를 컴퓨터 사용자에게 디스플레이하기 위한 CRT(cathode ray tube), LCD(liquid crystal display), 플라즈마 디스플레이, LED(light emitting diode) 디스플레이, 또는 OLED(organic light emitting diode) 디스플레이와 같은 디스플레이(312)에 결합된다. 정보 및 커맨드 선택을 프로세서(304)에 통신하기 위한 문자 숫자식 키 또는 다른 키를 포함하는 입력 디바이스(314)가 버스(302)에 결합된다. 다른 타입의 사용자 입력 디바이스는, 디스플레이(312) 상에서 커서 움직임을 제어하고 프로세서(304)에 방향 정보 및 커맨드 선택을 통신하기 위한, 마우스, 트랙볼, 터치식 디스플레이 또는 커서 방향 키와 같은 커서 제어기(316)이다. 이 입력 디바이스는 전형적으로, 디바이스가 평면에서 위치를 특정할 수 있게 하는 2개의 축, 제1 축(예를 들어, x-축) 및 제2 축(예를 들어, y-축)에서의 2 자유도를 갖는다.
일 실시예에 따르면, 본원의 기술은 프로세서(304)가 메인 메모리(306)에 포함된 하나 이상의 명령의 하나 이상의 시퀀스를 실행하는 것에 응답하여 컴퓨터 시스템(300)에 의해 수행된다. 이러한 명령은 저장 디바이스(310)와 같은 다른 저장 매체로부터 메인 메모리(306) 내로 판독될 수 있다. 메인 메모리(306)에 포함된 명령의 시퀀스의 실행은 프로세서(304)로 하여금 본원에서 기술된 프로세스 단계를 수행하게 한다. 대안적 실시예에서는, 소프트웨어 명령 대신에 또는 소프트웨어 명령과 조합하여 고정-배선 회로가 사용될 수 있다.
본원에서 사용된 바와 같이, 용어 "저장 매체"는 머신이 특정 방식으로 동작하게 하는 데이터 및/또는 명령을 저장하는 임의의 비-일시적 매체를 지칭한다. 그러한 저장 매체는 비-휘발성 매체 및/또는 휘발성 매체를 포함한다. 비-휘발성 매체는 예를 들어, 광 디스크, 자기 디스크, 솔리드-스테이트 드라이브, 또는 3차원 크로스 포인트 메모리, 예를 들어 저장 디바이스(310)를 포함한다. 휘발성 매체는 동적 메모리, 예를 들어 메인 메모리(306)를 포함한다. 저장 매체의 일반적인 형태는, 예를 들어 플로피 디스크, 플렉서블 디스크, 하드 디스크, 솔리드-스테이트 드라이브, 자기 테이프 또는 임의의 다른 자기 데이터 저장 매체, CD-ROM, 임의의 다른 광학 데이터 저장 매체, 홀의 패턴을 갖춘 임의의 물리적 매체, RAM, PROM, 및 EPROM, FLASH-EPROM, NV-RAM, 또는 임의의 다른 메모리 칩, 또는 카트리지를 포함한다.
저장 매체는 송신 매체와 별개이지만 송신 매체와 함께 사용될 수 있다. 송신 매체는 저장 매체 간에 정보를 전달하는 데 참여한다. 예를 들어, 송신 매체는 버스(302)를 포함하는 와이어를 포함하는 동축 케이블, 구리 와이어 및 광섬유를 포함한다. 또한, 송신 매체는 라디오-파 및 적외선 데이터 통신 동안 생성되는 것과 같은 광파 또는 음향파의 형태를 취할 수 있다.
일 실시예에서, 실행을 위해 하나 이상의 명령의 하나 이상의 시퀀스를 프로세서(304)에 반송하는데 다양한 형태의 매체가 수반된다. 예를 들어, 명령은 초기에 원격 컴퓨터의 자기 디스크 또는 솔리드-스테이트 드라이브에 보유된다. 원격 컴퓨터는 동적 메모리에 명령을 로딩하고 모뎀을 사용하여 전화선을 통해 명령을 전송할 수 있다. 컴퓨터 시스템(300)에 로컬 접속된 모뎀은 전화선 상에서 데이터를 수신하고 적외선 송신기를 사용하여 데이터를 적외선 신호로 변환한다. 적외선 검출기는 적외선 신호 내에 반송된 데이터를 수신하고 적절한 회로는 데이터를 버스(302)에 배치한다. 버스(302)는 메인 메모리(306)로 데이터를 반송하고, 프로세서(304)는 메인 메모리로부터 명령을 검색 및 실행한다. 메인 메모리(306)에 의해 수신된 명령은 프로세서(304)에 의해 실행되기 전이나 실행된 후에 선택적으로 저장 디바이스(310)에 저장될 수 있다.
컴퓨터 시스템(300)은 버스(302)와 결합된 통신 인터페이스(318)도 포함한다. 통신 인터페이스(318)는 로컬 네트워크(322)에 연결된 네트워크 링크(320)에 결합된 2-웨이 데이터 통신(two-way data communication)을 제공한다. 예를 들어, 통신 인터페이스(318)는 ISDN(integrated service digital network) 카드, 케이블 모뎀, 위성 모뎀, 또는 대응하는 타입의 전화선에 데이터 통신 연결을 제공하기 위한 모뎀일 수 있다. 다른 예로서, 통신 인터페이스(318)는 호환 가능한 LAN(local area network)에 데이터 통신 연결을 제공하기 LAN 카드일 수 있다. 일부 구현예에서는, 무선 링크도 구현된다. 임의의 이러한 구현예에서, 통신 인터페이스(318)는 다양한 타입의 정보를 나타내는 디지털 데이터 스트림을 반송하는 전기 신호, 전자기 신호, 또는 광학 신호를 전송 및 수신한다.
네트워크 링크(320)는 전형적으로 하나 이상의 네트워크를 통한 다른 데이터 디바이스로의 데이터 통신을 제공한다. 예를 들어, 네트워크 링크(320)는 로컬 네트워크(322)를 통해 호스트 컴퓨터(324)로의 연결 또는 ISP(Internet Service Provider)(326)에 의해 동작되는 클라우드 데이터 센터 또는 장비로의 연결을 제공할 수 있다. 이후에, ISP(326)는 이제 "인터넷"(328)으로 일반적으로 지칭되는 월드-와이드 패킷 데이터 통신 네트워크를 통해서 데이터 통신 서비스를 제공한다. 로컬 네트워크(322) 및 인터넷(328) 양자 모두는 디지털 데이터 스트림을 반송하는 전기, 전자기 또는 광학 신호를 사용한다. 다양한 네트워크를 통한 신호 및 컴퓨터 시스템(300)으로 그리고 컴퓨터 시스템(300)으로부터 디지털 데이터를 반송하는 통신 인터페이스(318)를 통한 네트워크 링크(320) 상의 신호는 송신 매체의 예시적인 형태이다. 실시예에서, 네트워크(320)는 전술된 클라우드(202) 또는 클라우드(202)의 일부를 포함한다.
컴퓨터 시스템(300)은 네트워크(들), 네트워크 링크(320) 및 통신 인터페이스(318)를 통해 프로그램 코드를 포함하는 메시지 및 데이터를 전송 및 수신할 수 있다. 일 실시예에서, 컴퓨터 시스템(300)은 프로세싱을 위한 코드를 수신한다. 수신된 코드는 수신될 때 프로세서(304)에 의해 실행되고 및/또는, 이후의 실행을 위해 저장 디바이스(310) 또는 다른 비-휘발성 저장 디바이스에 저장된다.
자율 주행 차량 아키텍처
도 4는 자율 주행 차량(예를 들어, 도 1에 도시된 차량(100))을 위한 예시적인 아키텍처(400)를 도시한다. 아키텍처(400)는 인지 모듈(402)(때때로 인지 회로라고 지칭됨), 계획 모듈(planning module)(404)(때때로 계획 회로라고 지칭됨), 제어 모듈(406)(때때로 제어 회로라고 지칭됨), 로컬화 모듈(localization module)(408)(때때로 로컬화 회로라고 지칭됨), 및 데이터베이스 모듈(410)(때때로 데이터베이스 회로라고 지칭됨)을 포함한다. 각각의 모듈은 차량(100)의 동작에서 역할을 수행한다. 그와 함께, 모듈(402, 404, 406, 408 및 410)은 도 1에 도시된 AV 시스템(120)의 일부일 수 있다. 일부 실시예에서, 모듈(402, 404, 406, 408 및 410) 중 임의의 모듈은 컴퓨터 소프트웨어(예를 들어, 컴퓨터 판독 가능 매체 상에 저장된 실행 가능한 코드) 및 컴퓨터 하드웨어(예를 들어, 하나 이상의 마이크로프로세서, 마이크로컨트롤러, ASICs(application-specific integrated circuits), 하드웨어 메모리 디바이스, 다른 타입의 집적 회로, 다른 타입의 컴퓨터 하드웨어, 또는 이러한 것 중 임의의 것 또는 모든 것의 조합)의 조합이다.
사용 시, 계획 모듈(404)은 목적지(412)를 나타내는 데이터를 수신하고, 차량(100)에 의해 진행될 수 있는 궤적(414)(때때로 루트로 지칭됨)을 나타내는 데이터가 목적지(412)에 도달하는지(예를 들어, 목적지에 도착하는지)를 결정한다. 계획 모듈(404)이 궤적(414)을 나타내는 데이터를 결정하기 위해, 계획 모듈(404)은 인지 모듈(402), 로컬화 모듈(408) 및 데이터베이스 모듈(410)로부터 데이터를 수신한다.
또한, 인지 모듈(402)은 예를 들어, 도 1에도 도시된 바와 같이, 하나 이상의 센서(121)를 사용하여 인근의 물리적 대상체를 식별한다. 대상체는 분류되고(예를 들어, 보행자, 자전거, 자동차, 교통 표지 등과 같은 타입으로 그룹화되고), 분류된 대상체(416)를 포함하는 장면 묘사는 계획 모듈(404)에 제공된다.
또한, 계획 모듈(404)은 로컬화 모듈(408)로부터 AV 위치(418)를 나타내는 데이터를 수신한다. 로컬화 모듈(408)은 위치를 계산하기 위해 센서(121)로부터의 데이터 및 데이터베이스 모듈(410)로부터의 데이터(예를 들어, 지리적 데이터)를 사용하여 AV 위치를 결정한다. 예를 들어, 로컬화 모듈(408)은 GNSS(Global Navigation Satellite System) 센서로부터의 데이터 및 지리적 데이터를 사용하여 AV의 경도 및 위도를 계산한다. 일 실시예에서, 로컬화 모듈(408)에 의해 사용되는 데이터는 도로 기하학적 특성의 고-정밀 맵, 도로망 연결 특성을 기술하는 맵, 도로 물리적 특성(예를 들어, 제한 속력, 교통량, 차량 및 자전거 운전자 교통 차선의 수, 차선 폭, 차선 방향, 또는 차선 마커 타입 및 위치, 또는 이의 조합)을 기술하는 맵, 및 도로 특징부, 예를 들어 횡단보도, 교통 신호 또는 다양한 타입의 다른 진행 신호(travel signal)의 공간적 위치를 기술하는 맵을 포함한다.
제어 모듈(406)은 궤적(414)을 나타내는 데이터 및 AV 위치(418)를 나타내는 데이터를 수신하고, 차량(100)이 목적지(412)로 궤적(414)을 따라 진행시키게 할 방식으로 AV의 제어 기능(420a 내지 420c)(예를 들어, 조향, 스로틀링, 제동, 점화)을 동작시킨다. 예를 들어, 궤적(414)이 좌회전을 포함하면, 조향 기능의 조향 각도가 차량(100)을 좌측으로 회전하게 하고 스로틀링 및 제동이 회전이 이루어지기 전에 지나가는 보행자 또는 차량을 위해 차량(100)을 일시 정지 및 대기하게 하는 방식으로 제어 모듈(406)은 제어 기능(420a 내지 420c)을 동작시킬 것이다.
자율 주행 차량 입력
도 5는 인지 모듈(402)(도 4)에 의해 사용되는 입력(502a 내지 502d)(예를 들어, 도 1에 도시된 센서(121)) 및 출력(504a 내지 504d)(예를 들어, 센서 데이터)의 예를 도시한다. 하나의 입력(502a)은 LiDAR(Light Detection and Ranging) 시스템(예를 들어, 도 1에 도시된 LiDAR(123))이다. LiDAR은 그의 시선에 있는 물리적 대상체에 관한 데이터를 획득하기 위해 광(예를 들어, 적외선 광과 같은 광의 버스트)을 사용하는 기술이다. LiDAR 시스템은 출력(504a)으로서 LiDAR 데이터를 생성한다. 예를 들어, LiDAR 데이터는 환경(190)의 표현을 구성하는 데 사용되는 3D 또는 2D 포인트(포인트 클라우드로도 알려짐)의 집합체(collection)이다.
다른 입력(502b)은 RADAR 시스템이다. RADAR은 인근의 물리적 대상체에 관한 데이터를 획득하기 위해 라디오 파를 사용하는 기술이다. RADARs는 LiDAR 시스템의 시선 내에 있지 않은 대상체에 관한 데이터를 획득할 수 있다. RADAR 시스템(502b)은 출력(504b)으로서 RADAR 데이터를 생성한다. 예를 들어, RADAR 데이터는 환경(190)의 표현을 구성하는 데 사용되는 하나 이상의 라디오 주파수 전자기 신호이다.
다른 입력(502c)은 카메라 시스템이다. 카메라 시스템은 인근의 물리적 대상체에 관한 정보를 획득하기 위해 하나 이상의 카메라(예를 들어, CCD(charge-coupled device)와 같은 광 센서를 사용하는 디지털 카메라)를 사용한다. 카메라 시스템은 출력(504c)으로 카메라 데이터를 생성한다. 카메라 데이터는 종종 이미지 데이터(예를 들어, RAW, JPEG, PNG 등과 같은 이미지 데이터 포맷의 데이터)의 형태를 취한다. 일부 예에서, 카메라 시스템은, 카메라 시스템이 심도를 인지할 수 있게 하는, 예를 들어 입체시(stereopsis)(스테레오 비전)를 위한, 다수의 독립적인 카메라를 갖는다. 카메라 시스템에 의해 인지되는 대상체가 본원에서는 "인근"으로서 기술되었지만, 이는 AV에 대해 상대적인 것이다. 사용 시, 카메라 시스템은, 예를 들어 AV의 전방 1 킬로미터 이상까지 떨어진 "대상체"를 "보도록" 구성될 수 있다. 따라서, 카메라 시스템은 멀리 떨어져 있는 대상체를 인지하기 위해 최적화되는 센서 및 렌즈와 같은 특징부를 가질 수 있다.
다른 입력(502d)은 TLD(traffic light detection) 시스템이다. TLD 시스템은 시각적 운행 정보를 제공하는 신호등, 거리 표지, 및 다른 물리적 대상체에 대한 정보를 획득하기 위해 하나 이상의 카메라를 사용한다. TLD 시스템은 출력(504d)으로 TLD 데이터를 생성한다. TLD 데이터는 종종 이미지 데이터(예를 들어, RAW, JPEG, PNG 등과 같은 이미지 데이터 포맷의 데이터)의 형태를 취한다. TLD 시스템은 가능한 시각적 운행 정보를 제공하는 다수의 물리적 대상체에 대한 정보를 획득하기 위해 넓은 시계(예를 들어, 광각 렌즈 또는 어안 렌즈를 사용함)를 갖는 카메라를 사용하여, 차량(100)이 그러한 대상체에 의해 제공되는 모든 관련 운행 정보에 대한 액세스를 갖는다는 점에서, TLD 시스템은 카메라를 통합한 시스템과 상이하다. 예를 들어, TLD 시스템의 시야각은 약 120도 이상일 수 있다.
일부 실시예에서, 출력(504a 내지 504d)은 센서 융합 기술을 사용하여 조합된다. 따라서, 개별 출력부(504a 내지 504d)는 차량(100)의 다른 시스템에 제공(예를 들어, 도 4에 도시된 계획 모듈(404)에 제공)될 수 있거나, 조합된 출력은 동일한 타입(예를 들어, 동일한 조합 기술을 사용하거나 또는 동일한 출력들을 조합하거나 또는 양자 모두) 또는 상이한 타입(예를 들어, 상이한 개별 조합 기술을 사용하거나 또는 상이한 개별 출력들을 조합하거나 또는 양자 모두)의 단일 조합 출력 또는 다중 조합 출력의 형태로 다른 시스템에 제공될 수 있다. 일부 실시예에서, 조기 융합 기술이 사용된다. 조기 융합(early fusion) 기술은 하나 이상의 데이터 프로세싱 단계가 조합 출력에 적용되기 전에 출력을 조합하는 것을 특징으로 한다. 일부 실시예에서, 늦은 융합(late fusion) 기술이 사용된다. 늦은 융합 기술은 하나 이상의 데이터 프로세싱 단계가 개별 출력에 적용된 후에 출력을 조합하는 것을 특징으로 한다.
도 6은 LiDAR 시스템(602)(예를 들어, 도 5에 도시된 입력(502a))의 일 예를 도시한다. LiDAR 시스템(602)은 광 이미터(606)(예를 들어, 레이저 송신기)로부터 광(604a 내지 604c)을 방출한다. LiDAR 시스템에 의해 방출된 광은 전형적으로 가시 스펙트럼에 있지 않으며, 예를 들어 적외선 광이 종종 사용된다. 방출된 광(604b)의 일부는 물리적 대상체(608)(예를 들어, 차량)와 조우하고, LiDAR 시스템(602)으로 다시 반사된다. (LiDAR 시스템으로부터 방출된 광은 전형적으로 물리적 대상체, 예를 들어 고체 형태의 물리적 대상체를 관통하지 않음). 또한, LiDAR 시스템(602)은 반사된 광을 검출하는 하나 이상의 광 검출기(610)를 갖는다. 일 실시예에서, LiDAR 시스템과 연계된 하나 이상의 데이터 프로세싱 시스템은 LiDAR 시스템의 시계(614)를 나타내는 이미지(612)를 생성한다. 이미지(612)는 물리적 대상체(608)의 경계(616)를 나타내는 정보를 포함한다. 이러한 방식으로, 이미지(612)는 AV 인근의 하나 이상의 물리적 대상체의 경계(616)를 결정하는데 사용된다.
도 7은 동작 중인 LiDAR 시스템(602)을 도시한다. 이 도면에 도시된 시나리오에서, 차량(100)은 이미지(702) 형태의 카메라 시스템 출력(504c) 및 LiDAR 데이터 포인트(704) 형태의 LiDAR 시스템 출력(504a) 양자 모두를 수신한다. 사용 시, 차량(100)의 데이터 프로세싱 시스템은 이미지(702)를 데이터 포인트(704)에 비교한다. 특히, 이미지(702)에서 식별된 물리적 대상체(706)도 데이터 포인트(704) 사이에서 식별된다. 이러한 방식으로, 차량(100)은 데이터 포인트(704)의 윤곽 및 밀도에 기초하여 물리적 대상체의 경계를 인지한다.
도 8은 LiDAR 시스템(602)의 동작을 더 상세히 도시한다. 전술된 바와 같이, 차량(100)은 LiDAR 시스템(602)에 의해 검출된 데이터 포인트의 특성에 기초하여 물리적 대상체의 경계를 검출한다. 도 8에 도시된 바와 같이, 지면(802)과 같은 평평한 대상체는 일관된 방식으로 LiDAR 시스템(602)으로부터 방출된 광(804a 내지 804d)을 반사할 것이다. 달리 말하면, LiDAR 시스템(602)이 일관된 간격을 사용하여 광을 방출하기 때문에, 지면(802)은 광을 동일한 일관된 간격으로 LiDAR 시스템(602)으로 다시 반사할 것이다. 차량(100)이 지면(802) 위로 진행할 때, LiDAR 시스템(602)은 아무것도 도로를 방해하지 않을 경우 다음 유효 지면 포인트(806)에 의해 반사된 광을 지속적으로 검출할 것이다. 그러나, 대상체(808)가 도로를 방해하는 경우, LiDAR 시스템(602)에 의해 방출된 광(804e 내지 804f)은 예상되는 일관된 방식과 불일치하는 방식으로 포인트(810a 내지 810b)로부터 반사될 것이다. 이 정보로부터, 차량(100)은 대상체(808)가 존재한다는 것을 결정할 수 있다.
경로 계획
도 9는 (예를 들어, 도 4에 도시된 바와 같은) 계획 모듈(404)의 입력과 출력 사이의 관계의 블록도(900)를 도시한다. 일반적으로, 계획 모듈(404)의 출력은 시작 포인트(904)(예를 들어, 소스 위치 또는 최초의 위치)로부터의 루트(902), 및 종료 포인트(906)(예를 들어, 목적지 또는 최종 위치)이다. 루트(902)는 전형적으로 하나 이상의 세그먼트에 의해 규정된다. 예를 들어, 일 세그먼트는 거리, 도로, 공도, 사유 도로, 또는 자동차 진행에 적절한 다른 물리적 영역의 적어도 일 부분에 걸쳐 진행되는 거리이다. 일부 예에서, 예를 들어 차량(100)이 4WD(four-wheel-drive) 또는 AWD(all-wheel-drive) 자동차, SUV, 픽업 트럭 등과 같은 오프-로드 주행 가능 차량인 경우, 루트(902)는 비포장 경로 또는 개방 필드와 같은 "오프-로드" 세그먼트를 포함한다.
루트(902)에 추가하여, 계획 모듈은 차선-레벨 루트 계획 데이터(908)도 출력한다. 차선-레벨 루트 계획 수립 데이터(908)는 특정 시간에 세그먼트의 조건에 기초하여 루트(902)의 세그먼트를 횡단하는 데 사용된다. 예를 들어, 루트(902)가 다차선 공도를 포함하는 경우, 차선-레벨 루트 계획 데이터(908)는, 예를 들어, 출구에 접근하고 있는지 여부, 하나 이상의 차선에 다른 차량이 있는지 여부, 또는 몇 분 이하의 코스에 대해 변화하는 다른 인자에 기초하여, 다차선 중에서 한 차선을 선택하기 위해 차량(100)이 사용할 수 있는 궤적 계획 데이터(910)를 포함한다. 유사하게, 일부 구현예에서, 차선-레벨 루트 계획 데이터(908)는 루트(902)의 세그먼트에 특정한 속력 제약(912)을 포함한다. 예를 들어, 세그먼트가 보행자 또는 비-예측 교통상황을 포함하는 경우, 속력 제약(912)은 차량(100)을 예상 속력, 예를 들어 세그먼트에 대한 속력 제한 데이터에 기초한 속력보다 느린 진행 속력으로 제한할 수 있다.
일 실시예에서, 계획 모듈(404)로의 입력은 (예를 들어, 도 4에 도시된 데이터베이스 모듈(410)로부터의) 데이터베이스 데이터(914), 현재 위치 데이터(916)(예를 들어, 도 4에 도시된 AV 위치(418)), (예를 들어, 도 4에 도시된 목적지(412)를 위한) 목적지 데이터(918), 및 대상체 데이터(920)(예를 들어, 도 4에 도시된 인지 모듈(402)에 의해 인지되는 분류된 대상체(416))를 포함한다. 일부 실시예에서, 데이터베이스 데이터(914)는 계획에 사용되는 규칙을 포함한다. 규칙은 예를 들어, 불리언 로직을 사용하는 형식 언어를 사용하여 특정된다. 차량(100)이 조우하는 임의의 주어진 상황에서, 규칙 중 적어도 일부가 상황에 적용될 것이다. 규칙이 차량(100)에 이용 가능한 정보에 기초하여 충족되는 조건, 예를 들어 주변 환경에 대한 정보를 갖는 경우에 규칙이 주어진 상황에 적용된다. 규칙은 우선순위를 가질 수 있다. 예를 들어, 규칙에 따르면 "도로가 고속도로인 경우에, 최좌측 차선으로의 이동"은 "1 마일 내에서 출구에 접근하고 있는 경우, 최우측 차선으로 이동"보다 낮은 우선순위를 가질 수 있다.
도 10은 예를 들어, 계획 모듈(404)(도 4)에 의해 경로 계획 수립에 사용되는 방향 그래프(1000)를 도시한다. 일반적으로, 도 10에 도시된 것과 같은 방향 그래프(1000)는 임의의 시작 포인트(1002)와 종료 포인트(1004) 사이의 경로를 결정하는 데 사용된다. 현실 세계에서는, 시작 포인트(1002)와 종료 포인트(1004)를 분리하는 거리는 비교적 클 수 있거나(예를 들어, 2개의 상이한 대도시 지역 내) 또는 비교적 작을 수 있다(예를 들어, 도시 블록과 맞접하는 2개의 교차점 또는 다차선 도로의 2개의 차선).
일 실시예에서, 방향 그래프(1000)는, 차량(100)에 의해서 점유될 수 있는 시작 포인트(1002)와 종료 포인트(1004) 사이의 상이한 위치를 나타내는 노드(1006a 내지 1006d)를 갖는다. 일부 예에서, 예를 들어 시작 포인트(1002) 및 종료 포인트(1004)가 상이한 대도시 지역을 나타낼 때, 노드(1006a 내지 1006d)는 도로의 세그먼트를 나타낸다. 일부 예에서, 예를 들어, 시작 포인트(1002) 및 종료 포인트(1004)가 동일한 도로 상의 상이한 위치(location)를 나타낼 때, 노드(1006a 내지 1006d)는 해당 도로 상의 상이한 위치(position)를 나타낸다. 이러한 방식으로, 방향 그래프(1000)는 가변 레벨의 입도(granularity)에서의 정보를 포함한다. 또한, 일 실시예에서, 높은 입도를 갖는 방향 그래프는 더 큰 스케일을 갖는 다른 방향 그래프의 하위그래프이다. 또한, 예를 들어, 시작 포인트(1002) 및 종료 포인트(1004)가 멀리 떨어져 있는(예를 들어, 다수 마일 떨어져있는) 방향 그래프는 낮은 입도에서의 그 정보의 대부분을 갖고, 저장된 데이터에 기초하지만, 차량(100)의 시계 내의 물리적 위치를 나타내는 그래프의 부분에 대한 일부 높은 입도 정보를 포함한다.
노드(1006a 내지 1006d)는 노드와 중첩할 수 없는 대상체(1008a 내지 1008b)와 별개이다. 일 실시예에서, 입도가 낮을 때, 대상체(1008a 내지 1008b)는 자동차에 의해 횡단될 수 없는 구역, 예를 들어 거리 또는 도로가 없는 영역을 나타낸다. 입도가 높으면, 대상체(1008a, 1008b)는 차량(100)의 시계 내의 물리적 대상체, 예를 들어, 차량(100)이 물리적 공간을 공유할 수 없는 다른 자동차, 보행자, 또는 다른 엔티티를 나타낸다. 일 실시예에서, 대상체(1008a, 1008b)의 일부 또는 전부는 정적 대상체(예를 들어, 가로등 또는 전신주와 같이 위치를 변경하지 않는 대상체) 또는 동적 대상체(예를 들어, 보행자 또는 다른 자동차와 같이 위치를 변경할 수 있는 대상체)이다.
노드(1006a 내지 1006d)는 에지(1010a 내지 1010c)에 의해 연결된다. 2개의 노드(1006a 내지 1006b)가 에지(1010a)에 의해 연결되면, 예를 들어, 다른 노드(1006b)에 도착하기 전에 중간 노드로 진행할 필요 없이 차량(100)이 하나의 노드(1006a)와 다른 노드(1006b) 사이에서 진행하는 것이 가능하다. (노드 사이를 진행하는 차량(100)이 언급되었지만, 이는 차량(100)이 각각의 노드가 나타내는 2개의 물리적 위치 사이에서 진행하는 것을 의미한다.) 에지(1010a 내지 1010c)는, 차량(100)이 제1 노드로부터 제2 노드로 또는 제2 노드로부터 제1 노드로 진행한다는 점에서 종종 양방향성이다. 일 실시예에서, 에지(1010a 내지 1010c)는, 차량(100)이 제1 노드로부터 제2 노드로 진행할 수 있지만 차량(100)은 제2 노드로부터 제1 노드로 진행할 수 없다는 점에서 단방향성이다. 에지(1010a 내지 1010c)는, 예를 들어, 일방통행로, 거리, 도로, 또는 공도의 개별 차선, 또는 법적 또는 물리적 제약으로 인해 일 방향으로만 횡단될 수 있는 다른 특징을 나타낼 때 단방향이다.
일 실시예에서, 계획 모듈(404)은 방향 그래프(1000)를 사용하여 시작 포인트(1002)와 종료 포인트(1004) 사이의 노드 및 에지로 이루어진 경로(1012)를 식별한다.
에지(1010a 내지 1010c)는 연계된 비용(1014a 내지 1014b)을 갖는다. 비용(1014a, 1014b)은 차량(100)이 에지를 선택하는 경우 소모될 리소스를 나타내는 값이다. 전형적인 리소스는 시간이다. 예를 들어, 하나의 에지(1010a)가 다른 에지(1010b)의 물리적 거리에 2배인 물리적 거리를 나타내면, 제1 에지(1010a)의 연계된 비용(1014a)은 제2 에지(1010b)의 연계된 비용(1014b)의 2배일 수 있다. 시간에 영향을 미치는 다른 인자는 예상되는 교통상황, 교차로의 수, 속력 제한 등을 포함한다. 다른 전형적인 리소스는 연비(fuel economy)이다. 2개의 에지(1010a 및 1010b)는 동일한 물리적 거리를 나타낼 수 있지만, 예를 들어 도로 조건, 예상된 날씨 등으로 인해, 하나의 에지(1010a)는 다른 에지(1010b) 보다 많은 연료를 요구할 수 있다.
계획 모듈(404)이 시작 포인트(1002)와 종료 포인트(1004) 사이의 경로(1012)를 식별할 때, 계획 모듈(404)은 전형적으로, 비용에 최적화된 경로, 예를 들어 에지의 개별 비용이 함께 추가될 때 최소 전체 비용을 갖는 경로를 선택한다.
자율 주행 차량 제어
도 11은 (예를 들어, 도 4에 도시된) 제어 모듈(406)의 입력 및 출력의 블록도(1100)를 도시한다. 제어 모듈은, 예를 들어 프로세서(304)와 유사한 하나 이상의 프로세서(예를 들어, 마이크로프로세서 또는 마이크로컨트롤러 또는 양자 모두와 같은 하나 이상의 컴퓨터 프로세서), 메인 메모리(306)와 유사한 단기 및/또는 장기 데이터 저장 장치(예를 들어, 메모리 랜덤-액세스 메모리 또는 플래시 메모리 또는 양자 모두), ROM(1308), 및 저장 디바이스(210)를 포함하는 제어기(1102), 및 메모리 내에 저장된 명령에 따라 동작하는데, 상기 명령은 명령이 (예를 들어, 하나 이상의 프로세서에 의해) 실행될 때 제어기(1102)의 동작을 수행한다.
일 실시예에서, 제어기(1102)는 원하는 출력(1104)을 나타내는 데이터를 수신한다. 원하는 출력(1104)은 전형적으로 속도, 예를 들어 속력 및 방향을 포함한다. 원하는 출력(1104)은, 예를 들어, 계획 모듈(404)(예를 들어, 도 4에 도시됨)로부터 수신된 데이터에 기초할 수 있다. 원하는 출력(1104)에 따라, 제어기(1102)는 스로틀 입력(1106) 및 조향 입력(1108)으로 사용 가능한 데이터를 생성한다. 스로틀 입력(1106)은, 원하는 출력(1104)를 달성하기 위해, 예를 들어 조향 페달에 관여하거나 또는 다른 스로틀 제어에 관여함으로써, 차량(100)의 스로틀(예를 들어, 가속 제어)에 관여하는 정도를 나타낸다. 일부 예에서, 스로틀 입력(1106)은 또한 차량(100)의 브레이크(예를 들어, 감속 제어)에 관여하는데 사용 가능한 데이터를 포함한다. 조향 입력(1108)은 조향 각도, 예를 들어 AV의 조향 제어(예를 들어, 조향 휠, 조향 각도 액추에이터, 또는 조향 각도를 제어하기 위한 다른 기능성)가 원하는 출력(1104)을 달성하도록 위치설정되어야 하는 각도를 나타낸다.
일 실시예에서, 제어기(1102)는 스로틀 및 조향에 제공되는 입력을 조정하는데 사용되는 피드백을 수신한다. 예를 들어, 차량(100)이 언덕과 같은 방해물(1110)과 조우하면, 차량(100)의 측정된 속력(1112)은 원하는 출력 속력 아래로 감속된다. 일 실시예에서, 임의의 측정된 출력(1114)은, 예를 들어 측정된 속력과 원하는 출력 사이의 차분(1113)에 기초하여, 필요한 조정이 수행되도록 제어기(1102)에 제공된다. 측정된 출력(1114)은 측정된 위치(1116), 측정된 속도(1118)(속력 및 방향을 포함), 측정된 가속도(1120), 및 차량(100)의 센서에 의해 측정 가능한 다른 출력을 포함한다.
일 실시예에서, 방해물(1110)에 관한 정보는 예를 들어, 카메라 또는 LiDAR 센서와 같은 센서에 의해 미리 검출되고, 예측 피드백 모듈(1122)에 제공된다. 이후, 예측 피드백 모듈(1122)은 정보를 제어기(1102)에 제공하며, 제어기(1102)는 그에 따른 조정에 이 정보를 사용할 수 있다. 예를 들어, 차량(100)의 센서가 언덕을 검출하면("보면"), 이 정보는 상당한 감속을 회피하기 위해 적절한 시간에 스로틀에 관여하도록 준비하기 위해 제어기(1102)에 의해 사용될 수 있다.
도 12는 제어기(1102)의 입력, 출력, 및 컴포넌트의 블록도(1200)를 도시한다. 제어기(1102)는 스로틀/브레이크 제어기(1204)의 동작에 영향을 미치는 속력 프로파일러(1202)를 갖는다. 예를 들어, 속력 프로파일러(1202)는 예를 들어, 제어기(1102)에 의해 수신되고 속력 프로파일러(1202)에 의해 프로세싱되는 피드백에 따라 스로틀/브레이크(1206)를 사용하여 가속에 관여하거나 감속에 관여하도록 스로틀/브레이크 제어기(1204)에 명령한다.
또한, 제어기(1102)는 조향 제어기(1210)의 동작에 영향을 미치는 측방향 추적 제어기(1208)를 갖는다. 예를 들어, 측방향 추적 제어기(1208)는 예를 들어, 제어기(1102)에 의해 수신되고 측방향 추적 제어기(1208)에 의해 프로세싱되는 피드백에 따라 조향 각도 액추에이터(1212)의 위치를 조정하도록 조향 제어기(1204)에 명령한다.
제어기(1102)는 스로틀/브레이크(1206) 및 조향 각도 액추에이터(1212)를 제어하는 방법을 결정하기 위해 사용되는 몇몇 입력을 수신한다. 계획 모듈(404)은, 예를 들어, 차량(100)이 동작을 시작할 때의 방향을 선택하고 차량(100)이 교차로에 도달했을 때 횡단할 도로 세그먼트가 어느 것인지를 결정하기 위해, 제어기(1102)에 의해 사용되는 정보를 제공한다. 로컬화 모듈(408)은 예를 들어, 정보를 제어기(1102)에 제공하여 차량(100)의 현재 위치를 기술하여, 제어기(1102)는 스로틀/브레이크(1206) 및 조향 각도 액추에이터(1212)가 제어되고 있는 방식에 기초하여 예상되는 위치에 차량(100)이 있는지를 결정할 수 있다. 일 실시예에서, 제어기(1102)는 다른 입력(1214)으로부터의 정보, 예를 들어, 데이터베이스, 컴퓨터 네트워크 등으로부터 수신된 정보를 수신한다.
차량용 프로세서의 안전한 부팅
도 13은 자율 주행 성능을 갖는 차량(1300) 내의 안전한 부팅 시스템의 일 예를 도시하고 있다. 차량(1300)의 AV 시스템(1320)이 제어기(1348), 프로세서(1346a, 1346b 및 1346c)와 같은 하나 이상의 컴퓨터 프로세서; 데이터 저장 유닛(1342)과 같은 로컬 저장 장치; 전원(1350); 스위치(1352a, 1352b 및 1352c)와 같은, 프로세서에 전원(1350)을 연결하는 스위치; 및 통신 디바이스(1340)를 포함한다.
일부 실시예에서, 차량(1300)은 차량(100)의 일 예이며, AV 시스템(1320)은 AV 시스템(120)과 유사하다. 이러한 실시예에서, 제어기(1348)는 제어기(148)와 유사하고; 프로세서(1346a, 1346b, 1346c)는 각각 프로세서(146)와 유사하고; 데이터 저장 유닛(1342)은 데이터 저장 유닛(142)과 유사하고; 통신 디바이스(1340)는 통신 디바이스(140)와 유사하고; 서버(1336)는 서버(136)와 유사하고; 원격에 위치된 데이터베이스(1334)는 원격에 위치된 데이터베이스(134)와 유사하다. 따라서, 후속하는 섹션에서 기술된 차량(1300)의 AV 시스템(1320)의 동작은 일부 실시예의 차량(100)의 AV 시스템(120)에 적용 가능하다. 그러나, 다른 실시예에서, AV 시스템(1320)의 동작은 또한 AV 시스템(120) 이외의 AV 시스템에 적용 가능하다.
제어기(1348)는 프로세서(1346a, 1346b 및 1346c)와 같은, 차량 내의 프로세서의 부팅을 제어하도록 장치된다. 일 실시예에서, 제어기(1348)는 차량(1300) 내의 별개의 내장형 디바이스이다. 예를 들어, 제어기(1348)는 내장형 마이크로컨트롤러 또는 마이크로프로세서일 수 있다. 제어기(1348)는 네트워크 연결(1354)을 통해 프로세서(1346a, 1346b, 1346c)에 연결된다. 일 실시예에서, 네트워크 연결(1354)은 LAN(local area connection)이다. LAN은 예를 들어 이더넷 LAN일 수 있다. 대안적으로, LAN은 무선 LAN일 수 있다. 또한, 제어기(1348)는 데이터 저장 유닛(1342)과 같은, 차량(1300) 내 로컬 저장 장치에 연결된다.
전원(1350)은 프로세서(1346a, 1346b 및 1346c)에 전력을 제공한다. 일 실시예에서, 전원(1350)은 배터리 전원이다. 다른 실시예에서, 전원(1350)은 연료를 연소시킴으로써 전력을 생성하는 엔진이다. 전원(1350)은 각각의 스위치(1352a, 1352b 및 1352c)를 통해 프로세서(1346a, 1346b 및 1346c)에 연결된다. 일 실시예에서, 스위치(1352a, 1352b 또는 1352c) 중 하나 이상은 솔리드 스테이트 스위치이다. 일 실시예에서, 스위치(1352a, 1352b 또는 1352c) 중 하나 이상은 기계적 릴레이이다. 일 실시예에서, 스위치(1352a, 1352b 또는 1352c) 중 하나 이상은 전원(1350)으로부터 각각의 프로세서(1346a, 1346b 및 1346c)로의 전류 서지(current surge)를 제한하기 위해 큰 커패시턴스 값(예를 들어, 대략 1 또는 2 패럿 이상)을 갖는다.
일 실시예에서, 제어기(1348)는 각각의 스위치(1352a, 1352b, 및 1352c)의 상태, 예를 들어 스위치 폐쇄 및 개방을 제어함으로써 프로세서(1346a, 1346b 및 1346c)의 전력 순환(power cycling), 예를 들어 턴 온 또는 오프(turning ON or OFF)를 제어한다.
통신 디바이스(1340)는 AV 시스템(1320)이 원격 서버(1336), 또는 원격에 위치된 데이터베이스(1334) 또는 양자 모두와 같은 외부 엔티티와 통신할 수 있게 한다. 일 실시예에서, 제어기(1348)는 통신 디바이스(1340)의 통신 인터페이스를 통해 원격 서버(1336) 또는 원격에 위치된 데이터베이스(1334) 또는 양자 모두와 네트워크 연결을 설정한다. 네트워크 연결은 예를 들어 통신 디바이스(140)를 참조하여 기술된 바와 같이, 유선 또는 무선 연결일 수 있다. 일 실시예에서, 제어기(1348)는 네트워크 연결을 거쳐 서버(1336) 또는 데이터베이스(1334) 또는 양자 모두에 안전 터널(secure tunnel)을 설정한다. 예를 들어, 일 실시예에서, 제어기(1348)는 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 확보되는 서버(1336)에 TCP/IP 연결을 설정한다. 후술되는 바와 같이, 제어기(1348)는, 서버(1336)로부터 안전 터널을 거쳐, 프로세서(1346a, 1346b, 및 1346c)를 위한 부트 파일을 획득한다.
일 실시예에서, 차량(1300)이 턴 온 상태일 때, 제어기(1348)는 강건하고 안전한 방식으로 프로세서(1346a, 1346b 및 1346c)를 부팅하는 것을 관리한다. 차량이 턴 온 상태일 때, 제어기(1348)는 프로세서(1346a, 1346b, 1346c)와 같은 차량(1300) 내의 프로세서에 대한 부트 파일의 가장 최신 버전의 요청을 서버(1336)에 전송한다. 이 요청은 차량(1300)에 대한 식별자를 포함한다. 식별자는 예를 들어, 차량에 고유한 VIN(vehicle identification number)일 수 있다. 요청에 응답하여, 제어기(1348)는 차량(1300) 내의 프로세서에 대한 부트 파일의 가장 최신 버전에 대한 정보를 포함하는 매니페스트 파일을 서버(1336)로부터 수신한다. 일 실시예에서, 매니페스트 파일 또는 부트 파일의 가장 최신 버전 또는 양자 모두는 서버(1336)와 함께 설정된 안전 터널을 통해 수신된다. 매니페스트 파일에 추가하여, 제어기(1348)는 또한 서버(1336), 프로세서에 대한 부트 파일의 블랙리스트, 또는 프로세서에 대한 부트 파일의 화이트리스트, 또는 양자 모두를 수신한다(아래에서 더 상세히 기술됨).
일 실시예에서, 매니페스트 파일은, 차량(1300)과 같은 차량 내 프로세서에 대한 부트 파일, 부트 파일이 사용되어야 하는 방법, 및 차량의 AV 시스템을 위한 동작 플랫폼에 대한 구성, 예를 들어, AV 시스템(1320)을 기술하는 소프트웨어 파일이다. 매니페스트 파일은 각각의 프로세서에 대해, 프로세서 상에서 구동되는 소프트웨어(예를 들어, 부트 파일)의 구체적인 기술 및 소프트웨어가 구성 및 실행되어야 하는 방법을 포함한다. 따라서, 차량용 매니페스트 파일은 차량의 AV 시스템을 위한 전체 소프트웨어 스택을 특정한다. 후속하는 섹션에서 기술되는 바와 같이, 제어기는 각각의 프로세서가 성공적으로 전력이 공급되는 것을 보장하는 것을 담당한다. 각각의 프로세서는 적절한 소프트웨어를 시작하기 위해 매니페스트 파일 내의 정보를 사용한다.
일 실시예에서, 매니페스트 파일은 예를 들어 차량의 VIN을 사용하여 차량에 매핑된 특정 차량에 고유하다. 상이한 차량은 상이한 매니페스트 파일을 갖고, 차량용 매니페스트 파일은 차량 내 프로세서에 대한 부트 파일 및 차량의 AV 시스템을 위한 구성을 기술한다. 일 실시예에서, 매니페스트 파일은 플랫폼에 고유하고, 상이한 매니페스트 파일은 상이한 플랫폼에 대해 특정된다. 예를 들어, 차량은 윈도우즈, 리눅스, 유닉스, 크롬 OS, 안드로이드, MAC OS, iOS 또는 일부 다른 적절한 운영 체제를 사용하는 그 각각의 AV 시스템을 구동할 수 있는데, 각각의 운영 체제 플랫폼에 대해 하나의 매니페스트 파일이 존재한다. 추가적으로 또는 대안적으로, 플랫폼은 차량의 AV 시스템을 위한 특정 하드웨어 구성을 특정할 수 있다. 예를 들어, 상이한 AV 시스템은 상이한 프로세서, 센서, 또는 다른 하드웨어를 가질 수 있고, 대응하여 상이한 플랫폼을 가질 수 있다. 또한, 플랫폼은 하드웨어 구성 및 운영 체제 소프트웨어의 조합을 나타낼 수 있다. 동일한 플랫폼을 갖는 차량은 동일한 매니페스트 파일을 가질 수 있지만, 상이한 플랫폼을 갖는 차량과는 상이할 수 있다. 이는, 예를 들어, 동일한 AV 시스템 플랫폼을 구동하는 차량의 하드웨어 및 소프트웨어 구성이 유사하지만 하나의 플랫폼으로부터 다른 플랫폼으로 변화하는 경우일 수 있다.
매니페스트 파일은 매니페스트 파일의 특정 인스턴스를 식별하는 버전 번호를 포함한다. 일 실시예에서, 버전 번호는 감소하지 않고, 예를 들어 매니페스트 파일 내 정보에 대한 업데이트마다, 매니페스트 파일의 버전 번호가 증가된다. 매니페스트 파일 내 특정된 하나 이상의 부트 파일이 추가, 제거 또는 수정될 때, 매니페스트 파일 내 특정된 부트 파일의 실행 순서가 변경될 때, 또는 매니페스트 파일 내 포함된 추가 정보가 변경될 때, 또는 이들의 임의의 조합에서, 매니페스트 파일이 업데이트된다.
일 실시예에서, 매니페스트 파일은 매니페스트 파일에 대응하는 플랫폼 또는 차량 내의 모든 프로세서에 대한 별개의 도커 컨테이너를 포함하는데, 각각의 도커 컨테이너는 대응하는 프로세서에 대한 부트 파일을 패키징한다. 이와 관련하여, 도커 컨테이너는 프로세서를 위한 부트 가능 소프트웨어 패키지이다. 후속하는 섹션에서, 프로세서에 대한 부트 파일을 언급할 때 도커 컨테이너에 대한 참조 및 부트 파일에 대한 참조는 호환 가능하게 사용된다.
일 실시예에서, 프로세서에 대한 부트 파일은 프로세서에 대한 커널 또는 운영 체제 이미지를 포함하는데, 이는 프로세서를 동작 상태로 올리기 위해 실행 가능한 기본 운영 체제 소프트웨어를 특정한다. 일 실시예에서, 프로세서에 대한 부트 파일은 프로세서에 의해 실행될 애플리케이션 소프트웨어, 예를 들어, 특히 하나 이상의 센서를 관리하기 위한 인지 소프트웨어, 조향 또는 제동을 제어하기 위한 제어 소프트웨어와 같이, 차량의 AV 시스템에 대한 다양한 기능을 수행하기 위한 소프트웨어를 포함한다.
일 실시예에서, 도커 컨테이너는 프로세서에 고유한 식별자를 사용하여 특정 프로세서와 연계된다. 예를 들어, 일 실시예에서, AV 시스템 내 각각의 프로세서는 이더넷 MAC(medium access control) 하드웨어 어드레스 또는 정적 IP(Internet Protocol) 어드레스와 같은 고유한 네트워크 어드레스를 갖는다. 이 경우, 매니페스트 파일에 포함되는 구성 정보는 매니페스트 파일 내 어느 도커 컨테이너가 AV 시스템 내 어느 네트워크 어드레스에 대해 의도되는지를 특정한다. 상이한 프로세서는 매니페스트 파일 내에서 서로로부터 명확하게 분리되는 상이한 도커 컨테이너를 갖는다.
일 실시예에서, 부트 파일의 블랙리스트는 대응 프로세서를 부팅하는데 사용되지 않는 하나 이상의 부트 파일, 또는 부트 파일의 특정 버전을 식별하는 전자 파일이다. 식별된 파일은 예를 들어, 공격자로부터의 보안 공격에서 이전에 손상되었거나, 손상에 취약하거나 또는 부정확한 하드웨어 또는 소프트웨어 파라미터를 특정하거나 또는 이들의 임의의 적절한 조합인 부트 파일 버전일 수 있다.
일 실시예에서, 부트 파일의 화이트리스트는, 대응 프로세서 부팅에 사용되도록 승인된 하나 이상의 부트 파일, 또는 부트 파일의 특정 버전을 식별하는 전자 파일이다. 식별된 파일은, 예를 들어, 특히, 공격자로부터의 보안 공격을 저항하기 위해 강건하도록 테스트되었거나 또는 프로세서의 올바른 동작을 위한 하드웨어 또는 소프트웨어 파라미터의 원하는 값을 특정하는 부트 파일의 버전일 수 있다.
일 실시예에서, 서버(1336)는 암호 인증 키를 사용하여 각각의 부트 파일에 디지털 서명하고, 각각의 도커 컨테이너 내의 대응하는 부트 파일과 함께 디지털 서명을 포함한다. 각각의 프로세서는 부트 파일을 실행하기 전에 부트 파일에 대한 디지털 서명을 인증한다. 일 실시예에서, 서버(1336)는 상이한 프로세서에 대한 부트 파일에 서명하기 위해 상이한 인증 키를 사용한다. 예를 들어, 서버(1336)는 프로세서(1346a)에 대한 부트 파일에 서명하기 위한 제1 인증 키, 프로세서(1346b)에 대한 부트 파일에 서명하기 위한 상이한 인증 키, 및 프로세서(1346c)에 대한 부트 파일을 서명하기 위한 다른 제3 인증 키를 사용할 수 있다.
일 실시예에서, 서버(1336)는 특정 타입 또는 클래스의 프로세서에 대한 부트 파일에 서명하기 위한 공통 클래스 인증 키를 사용하는데, 상이한 타입 또는 클래스의 프로세서에 대한 상이한 클래스 인증 키가 존재한다. 예를 들어, 프로세서(1346a)는 그 각각의 차량에 대한 조향을 제어하는데 사용되는 프로세서의 클래스에 속할 수 있는데, 프로세서(1346a)는 차량(1300)에 대한 조향을 제어하는데 사용된다. 대조적으로, 프로세서(1346b)는 그 각각의 차량에 대한 제동을 제어하는데 사용되는 프로세서의 클래스에 속할 수 있는데, 프로세서(1346b)는 차량(1300)에 대한 제동을 제어하는데 사용되고; 프로세서(1346c)는 그 각각의 차량에 대한 특정 센서를 관리하는데 사용되는 프로세서의 클래스에 속할 수 있는데, 프로세서(1346c)는 차량(1300)에 대한 특정 센서를 관리하는데 사용된다. 이러한 경우에, 서버(1336)는, 차량(1300) 내 프로세서(1346a)와 같은 그 각각의 차량에 대한 조향을 제어하는데 사용되는 프로세서의 클래스 및 다른 차량 내 다른 조향 제어 프로세서에 대한 부트 파일에 서명하는데 제1 클래스 인증 키를 사용할 수 있다. 또한, 서버(1336)는 차량(1300) 내 프로세서(1346b)와 같이 그 각각의 차량에 대한 제동을 제어하는데 사용되는 프로세서의 클래스 및 다른 차량 내 다른 제동 제어 프로세서에 대한 부트 파일에 서명하기 위해 제2 클래스 인증 키를 사용하고; 차량(1300) 내 프로세서(1346c)과 같은 그 각각의 차량에 대한 특정 센서를 관리하는데 사용되는 프로세서의 클래스 및 다른 차량 내 다른 센서 제어 프로세서에 대한 부트 파일에 서명하기 위해 제3 클래스 인증 키를 사용한다.
일 실시예에서, 서버(1336)는 또한 각각의 암호 인증 키를 사용하여 블랙리스트 또는 화이트리스트 또는 양자 모두를 디지털 서명하고, 매니페스트 파일 내의 각각의 리스트를 갖는 대응 디지털 서명을 포함한다.
차량 내의 각각의 프로세서는 대응하는 부트 파일 상의 디지털 서명 및 블랙리스트 또는 화이트리스트 또는 양자 모두를 검증하기 위해 하나 이상의 인증 키를 저장한다. 예를 들어, 일 실시예에서, 프로세서는 각각의 부트 파일에 대한 대응하는 클래스 인증 키를 저장하고, 블랙리스트, 화이트리스트 또는 양자 모두를 위한 인증 키도 저장한다. 일 실시예에서, 서버(1336)는 클래스 인증 키 및 블랙리스트/화이트리스트 인증 키를 공유하는데, 각각의 프로세서는 키 교환 메커니즘을 사용한다. 예를 들어, 서버(1336)는, 예를 들어 다른 암호 키를 암호화하는데 사용되는 암호 키인 KEKs(key encryption keys)를 사용하여 암호화된 형태로 차량 내 프로세서에 인증 키를 전송한다. 서버는 암호화된 형태로 인증 키의 초기 값을 전송하기 위해 그리고 인증 키의 값에 대한 임의의 후속하는 업데이트를 위해 KEKs를 사용한다.
일 실시예에서, 서버(1336)는 KEKs에 대한 공개 키 암호(public key cryptography)를 사용한다. 예를 들어, 서버는 2048-비트 또는 4096-비트 Rivest-Shamir-Adleman 공개 키 프로토콜(RSA 2048 또는 RSA 4096)을 사용할 수 있다. 이러한 경우, 서버(1336)는 서버에만 알려진 개인 키(private key)를 사용하여 인증 키를 암호화하는데, 대응하는 공개 키는 프로세서에 알려져 있다. 예를 들어, 통신 디바이스(1340)를 사용하여 네트워크 연결 경로를 거쳐 안전 터널을 통해 암호화된 통신을 수신하면, 프로세서가 대응하는 공개 키를 사용하여 비암호화될 수 있고, 클래스 인증 키, 및 블랙리스트 또는 화이트리스트 키, 또는 양자 모두를 검색할 수 있다. 일 실시예에서, 서버(1336)는 상이한 프로세서의 클래스에 대해 상이한 KEKs, 예를 들어 상이한 공개/개인 키 쌍을 사용하고, 블랙리스트 및 화이트리스트에 대해 상이한 KEKs를 사용한다. 이러한 경우, 각각의 프로세서는 그 자신의 클래스에 대응하는 공개 키, 및 블랙리스트 및 화이트리스트에 대한 공개 키를 알고 있다. 따라서, 각각의 프로세서는 블랙리스트 및 화이트리스트 인증 키와 별개로, 그 자신의 클래스를 위한 클래스 인증 키를 획득할 수 있다.
도 13으로 돌아가서, 서버(1336)로부터 매니페스트 파일을 수신하면, 제어기(1348)는 매니페스트 파일을 검사하고, 차량(1300) 내 프로세서에 대한 부트 파일의 가장 최신 버전이 로컬적으로 이용 가능한지, 예를 들어 데이터 저장 유닛(1342)에 저장되어 있는지 여부를 결정한다. 이는, 예를 들어, 제어기(1348)가 서버(1336)로부터 부트 파일을 페치한 마지막 시간 이후에 부트 파일에 대한 변화가 없었을 때, 경우일 수 있다. 제어기(1348)가 차량(1300) 내 프로세서에 대한 부트 파일의 가장 최신 버전이 로컬적으로 이용 가능하다고 결정하면, 제어기는 로컬 저장 장치로부터, 예를 들어 데이터 저장 유닛(1342)로부터 부트 파일의 가장 최신 버전을 검색하고 검색된 부트 파일을 사용하여 프로세서의 부팅을 진행한다. 반면에, 제어기(1348)가 차량(1300) 내 프로세서에 대한 부트 파일의 가장 최신 버전이 로컬적으로 이용 가능하지 않다고 결정하면, 예를 들어 제어기(1348)가 서버(1336)로부터 부트 파일을 페치한 마지막 시간 이후에 서버(1336)가 프로세서에 대한 부트 파일을 업데이트하면, 제어기(1348)는 서버(1336)로부터 부트 파일의 가장 최신 버전을 획득한다. 일 실시예에서, 제어기(1348)는 서버(1336)로부터 직접 부트 파일의 가장 최신 버전을 페치한다. 다른 실시예에서, 제어기(1348)는 원격 네트워크 저장 장치, 예를 들어 데이터베이스(1334)로부터 부트 파일의 가장 최신 버전을 페치한다. 데이터베이스(1334) 내의 부트 파일의 위치는, 예를 들어 부트 파일에 대한 요청에 응답하여 서버(1336)가 나타내거나 또는 매니페스트 파일에 포함된 정보 내에서 특정된다. 제어기(1348)는 서버(1336)로부터 수신된 부트 파일의 가장 최신 버전을 로컬 저장 장치, 예를 들어 데이터 저장 유닛(1342)에 세이브하고, 새롭게 페치된 부트 파일을 사용하여 프로세서의 부팅을 진행한다.
일 실시예에서, 제어기(1348)는, 예를 들어 통신 디바이스(1340)와 서버(1336) 사이의 네트워크 연결이 끊어지기 때문에, 차량(1300)이 턴 온 상태일 때 서버(1336)와 통신할 수 없다. 이 경우에, 제어기(1348)가 특정 시간 기간 내에 서버(1336)로부터 응답을 수신하지 않을 때, 제어기(1348)는 로컬 저장 장치, 예를 들어 데이터 저장 유닛(1342)에서 이용 가능한 부트 파일을 사용하여 프로세서를 부팅한다. 이후에, 서버(1336)와의 네트워크 연결이 재설정될 때, 제어기(1348)는 서버(1336)로부터 부트 파일의 가장 최신 버전을 페치하고, 로컬 저장 장치에 부트 파일의 가장 최신 버전을 세이브하고, 새롭게 페치된 부트 파일을 사용하여 프로세서의 재부팅을 진행한다.
일 실시예에서, 제어기(1348)는 차량(1300)이 지정된 안전 위치에서 정지한 상태일 때 프로세서(1346a, 1346b, 1346c)를 부팅한다. 지정된 안전 위치는 비 사용 시 연장된 기간 동안 차량이 통상적으로 머무는 차량의 홈 위치(home location), 예를 들어 차고, 또는 주차장일 수 있다. 일 실시예에서, 차량의 메모리, 예를 들어 데이터 저장 유닛(1342) 내에 저장된 차량에 대해 특정된 지정된 안전 위치는 제어기(1348)에 알려져 있다. 차량에 전력이 공급될 때, 제어기(1348)는 서버(1336)로부터 새로운 부트 파일 및 매니페스트 파일을 페치하기 전에 차량이 지정된 안전 위치에 있는지 여부를 검사한다. 차량이 지정된 안전 위치에 있지 않으면, 제어기(1348)는 메모리 내에 캐싱된 부트 파일을 사용하여, 예를 들어 데이터 저장 유닛(1342)에 저장된 부트 파일을 사용하여 프로세서를 부팅한다.
일 실시예에서, 서버(1336)로부터 매니페스트 파일을 수신하면, 제어기(1348)는 프로세서를 부팅하기 위해 매니페스트 파일을 사용하여 전에 매니페스트 파일 내에 기재된 버전 번호를 검사한다. 제어기(1348)는 제어기(1348)가 서버(1346)로부터 이전에 수신된 매니페스트 파일의 가장 최신 버전의 값을 저장하는 카운터를 유지한다. 일 실시예에서, 카운터는 하드웨어, 예를 들어, 제어기(1348) 내의 레지스터, 제어기 칩 패키지 내부의 일회용 프로그램 가능 메모리(one-time programmable memory), 또는 AV 시스템(1320) 내의 TPM(trusted platform module) 칩에 내장된다. 이와 관련하여, TPM 칩은 암호 키 및/또는 하드웨어 인증을 위한 호스트 시스템에 특정된 다른 보안 정보를 저장하는 전문 칩이다. 예를 들어, 일 실시예에서, 각각의 TPM 칩은 대응 프로세서, KEKs 및 카운터 값에 대한 클래스 인증 키를 저장한다. 키 및 카운터 값은 칩 내부에 유지되고 외부 소프트웨어에 의해 액세스될 수 없다. 다른 실시예에서, 카운터는 소프트웨어 카운터, 예를 들어 데이터 저장 유닛(1342)과 같이 차량(1300)의 로컬 메모리에 카운터 값을 저장하는 데이터 구조이다.
서버(1336)로부터 새롭게 수신된 매니페스트 파일에 기재된 버전 값이 제어기의 카운터에 저장된 버전 값 미만이면, 새롭게 수신된 매니페스트 파일은 서버(1336)로부터 이전에 수신된 가장 최신 버전보다 오래된 것이다. 예를 들어, 매니페스트 파일이 일부 방식으로 손상되는 경우가 이에 해당할 수 있다. 대안적으로, 이는 공격자(adversary)로부터의 롤백 공격(rollback attack)의 전조일 수 있다. 예를 들어, 보안 취약성을 갖는 매니페스트 파일의 구버전을 (예를 들어, 도청에 의해) 이전에 획득한 공격자가 상기 구버전 매니페스트 파일을 사용하도록 제어기를 강제하려고 시도하여, 공격자는 보안 취약성을 악용할 수 있다. 이러한 경우, 제어기(1348)는 새롭게 수신된 매니페스트 파일을 거부한다. 일 실시예에서, 제어기(1348)는 또한 예를 들어 서버(1336)에 안전성의 잠재적 위반을 나타내는 경고 메시지를 서버에 전송함으로써 서버(1336)에 통지한다. 매니페스트 파일 또는 부트 파일 또는 양자 모두를 관리하는 서버 관리자는 경고 메시지를 수신하면 교정 액션을 취할 수 있다.
새롭게 수신된 매니페스트 파일에 기재된 버전 값이 제어기의 카운터에 저장된 버전 값과 동일하면, 새롭게 수신된 매니페스트 파일은 서버(1336)로부터 이전에 수신되어 AV 시스템(1320)의 현재 구성을 위한 기초(basis)로서 사용되는 가장 최신 버전과 동일하다. 이는 예를 들어 서버(1336)에서 매니페스트 파일의 변화가 없는 경우에 해당할 수 있다. 그러한 경우, 제어기(1348)는 로컬 메모리, 예를 들어 데이터 저장 유닛(1342) 내에 저장된 마지막 라운드에서 수신된 부트 파일을 사용하여 차량(1300) 내의 프로세서를 부팅한다.
새롭게 수신된 매니페스트 파일에 기재된 버전 값이 제어기의 카운터에 저장된 버전 값보다 더 크면, 새롭게 수신된 매니페스트 파일은 서버(1336)로부터 이전에 수신된 가장 최신 버전보다 더 최신이며, 이는 서버(1336)가 제어기(1348)에 알려진 마지막 변화 이후에 차량(1300)에 대한 구성을 업데이트하였다는 것을 나타낸다. 그러한 경우, 제어기(1348)는 새롭게 수신된 매니페스트 파일을 수락하고 새로운 매니페스트 파일 내에 포함된 정보를 조사한다. 또한, 제어기(1348)는 새롭게 수신된 매니페스트 파일이 나타내는 버전 번호와 동일하도록 그 카운터의 값을 업데이트한다. 이러한 방식으로, 감소하지 않은 버전 번호를 갖는 매니페스트 파일을 수락함으로써, 제어기(1348)는 롤백 공격이 방지되는 것을 보장한다.
일 실시예에서, 새로운 매니페스트 파일을 수락하면, 제어기(1348)는 매니페스트 파일을 판독하고 부트 파일의 특정 버전들이 서로 일치한다는 것, 예를 들어 서로 협력하여 구동할 수 있다는 것을 결정한다. 이러한 검사는 공격자가 하나의 부트 파일을 롤백하는, 예를 들어 이전의 취약한 버전을 특정하는 공격을 방지할 수 있다. 제어기에 의한 일치성 검사는 이전의 버전이 구동하는 것을 방지할 것이다. 일치성 검사가 성공적이면, 제어기는 각각의 도커 컨테이너에 대해 부트 파일의 특정된 버전이 이미 로컬적으로 이용 가능한지, 예를 들어 이전의 교환 동안 서버(1336)로부터 페치되고 데이터 저장 유닛(1342)에 저장되었는지를 추가로 검사한다. 로컬적으로 이용 가능한 부트 파일에 대해, 제어기(1348)는 로컬 저장 장치로부터 상기 파일을 검색한다. 로컬적으로 이용 가능하지 않은, 예를 들어 매니페스트 파일 내 특정된 버전은 로컬 버전 또는 새로운 부트 파일보다 더 최신인 부트 파일에 대해, 제어기는 서버(1336)로부터 부트 파일을 페치하여, 안전 터널에 걸쳐 파일을 다운로드한다. 제어기는 이어서 프로세서를 부팅하여, 각각의 부트 파일을 각각의 프로세서에 제공한다.
일 실시예에서, 제어기(1348)는 순차적으로 프로세서를 부팅한다. 예를 들어, 제어기(1348)는 프로세서(1346a)에 전력을 공급하기 위해 스위치(1352a)를 폐쇄된 상태로 토글하고, 프로세서에 대해 의도된 부트 파일을 갖는 도커 컨테이너를 프로세서(1346a)에 전송한다. 프로세서(1346a)에 전력을 공급한 후에, 제어기(1348)는 프로세서(1346b)에 전력을 공급하기 위해 스위치(1352b)를 폐쇄 상태로 토글하여, 프로세서에 대해 의도된 부트 파일을 갖는 도커 컨테이너를 프로세서(1346b)에 전송한다. 이어서, 제어기(1348)는 프로세서(1346c)에 전력을 공급하기 위해 스위치(1352c)를 폐쇄 상태로 토글하여, 프로세서에 대해 의도된 부트 파일을 갖는 도커 컨테이너를 프로세서(1346c)로 전송한다. 그러나, 다른 실시예에서, 제어기(1348)는 프로세서들을 동시에 부팅한다. 이러한 경우, 제어기(1348)는 스위치(1352a, 1352b 및 1352c)를 폐쇄 상태로 동시에 토글한다. 각각의 프로세서에 전력이 공급됨에 따라, 제어기(1348)는 프로세서에 대해 의도된 부트 파일을 갖는 각각의 도커 컨테이너를 프로세서에 전송한다.
일 실시예에서, 각각의 도커 컨테이너를 프로세서로 전송한 후에, 제어기(1348)는 프로세서가 성공적으로 부팅되었다는 지시를 수신하기 위해 대기한다. 예를 들어, 제어기는 프로세서가 도커 컨테이너 내의 부트 파일을 성공적으로 실행했다는 것을 나타내는 프로세서로부터의 확인 응답 메시지를 대기한다.
제어기(1348)가 특정된 타임아웃 기간에 프로세서로부터 확인 응답 메시지를 수신하지 않으면, 제어기는 예를 들어 프로세서를 재시작하려는 시도에서 대응 스위치를 개방한 후 다시 폐쇄하도록 토글하여 프로세서에 전력을 순환시킨다(power cycles). 일 실시예에서, 특정된 타임아웃 기간은 대략 수 마이크로초 또는 초이다.
일 실시예에서, 제어기(1348)는 비응답 프로세서에 반복적으로 특정 횟수, 예를 들어, 3, 4, 또는 5회 전력을 순환시킨다. 전술한 바와 같이, 프로세서를 전원(1350)에 연결하는 스위치는 프로세서에 대한 임의의 전력 서지를 제한하는 높은 커패시턴스 값을 갖는다. 따라서, 반복된 전력 순환 시 전류 서지로 인해 프로세서를 손상을 주는 위험이 억제된다. 제어기가 특정 수의 시도 후에 프로세서로부터 확인 응답을 수신하지 않으면, 제어기는 프로세서가 하드웨어 고장을 겪은 것으로 간주된다.
일 실시예에서, 제어기(1348)는 시퀀스에서 더 이전에 전원(1350)에 연결된 프로세서로부터 확인 응답을 수신하기 위해 대기할 때에도, 순차적 순서로 연속적인 프로세서에 전력을 공급한다. 예를 들어, 제어기(1348)는 프로세서(1346a)로부터 확인 응답 메시지를 수신하기 위해 제어기가 대기중일 때에도 전원(1350)에 프로세서(1346b)를 연결할 수 있다. 그러한 경우, 프로세서(1346b)는 시퀀스에서 이전에 전력이 공급되었던 다른 프로세서, 예를 들어 프로세서(1346a) 이전에 그 부팅을 완료할 수 있다. 그러나, 다른 실시예에서, 제어기(1348)는 순차적 순서로 후속 프로세서들에 대한 전력 공급을 진행하기 전에 프로세서로부터 확인 응답을 수신하기 위해 대기한다. 이러한 경우, 제어기(1348)는 전력이 공급될 가장 최신의 프로세서로부터의 확인 응답 메시지를 수신할 때에만 또는 가장 최신 프로세서가 프로세서에 전력을 공급하려는 특정 수의 시도에 후속하여 하드웨어 고장을 경험하는 것으로 간주된 후에만 다음 프로세서로 이동한다.
차량(1300) 내 프로세서, 예를 들어 프로세서(1346a, 1346b, 및 1346c)로 돌아가면, 각각의 프로세서는, 성공적인 부팅 후에, 예를 들어 전술한 바와 같이 확인 응답 메시지를 전송함으로써 제어기(1348)를 핑(ping)한다. 일 실시예에서, LAN(1354)을 거치는 제어기(1348)와 프로세서 사이의 통신이 암호화된다. 예를 들어, 일부의 경우에, 제어기(1348)와 프로세서(1346a, 1346b, 및 1346c) 사이에서 교환된 메시지는 SSH 및 PKCS 버전 11(PKCS #11)과 같은 적절한 PKCS(public key cryptography standard)를 사용하여 암호화된다.
프로세서에 전력이 공급된 후에, 프로세서는 프로세서에 특정된 도커 컨테이너를 제어기로부터 수신한다. 예를 들어, 각각의 도커 컨테이너는 전술한 바와 같이 대응하는 프로세서의 고유 네트워크 식별자로 태깅된다. 또한, 프로세서는 각각의 디지털 서명과 함께, 제어기(1348)로부터 블랙리스트 또는 화이트리스트 또는 양자 모두를 수신한다. 일 실시예에서, 각각의 프로세서는 씬 클라이언트(thin client)여서, 예를 들어 프로세서가 일시적 캐시 메모리를 갖는 경우에도 프로세서는 임의의 장기 로컬 저장 장치(long term local storage)을 갖지 않는다. 이러한 경우에, 프로세서는, 다른 소스, 예를 들어, 제어기(1348)로부터 부트 파일을 수신하고 그 부트 파일을 실행할 때에만 그 지정된 기능을 수행할 수 있다.
부트 파일 및 블랙리스트 또는 화이트리스트 또는 양자 모두를 갖는 도커 컨테이너를 수신하면, 프로세서는 부트 파일과 함께 전송된 디지털 서명을 검증함으로써 각각의 부트 파일을 인증한다. 일 실시예에서, 프로세서에 대한 부트 파일은 프로세서가 속하는 특정 클래스에 공통적이다. 예를 들어, 프로세서(1346a)는 그 각각의 차량에 대한 조향을 제어하기 위해 사용되는 프로세서의 클래스에 속할 수 있어서, 프로세서(1346a)는 프로세서의 조향 제어 클래스에 대한 클래스 인증 키를 사용하여 제어기(1348)로부터 수신하는 부트 파일 상의 디지털 서명을 인증할 수 있다. 일 실시예에서, 차량(1300) 내 프로세서에 대한 클래스 인증 키, 블랙리스트 및 화이트리스트에 대한 인증 키, 및 KEKs와 같은 다른 암호 키는 차량(1300) 내에 안전한 저장 장치, 예를 들어, TPM(trusted platform module) 칩에 저장된다. 전력이 공급되면, 프로세서는 그 클래스 인증 키 및 블랙리스트 및 화이트리스트에 대한 인증 키를 안전한 저장 장치로부터 검색한다. 클래스 인증 키를 사용하여, 프로세서는 전술한 바와 같이 서버(1336)에 의해 서명된 도커 컨테이너 내 부트 파일 상의 디지털 서명을 검증한다. 프로세서는 대응하는 디지털 서명이 서버(1336) 또는 신뢰 기관과 같은 신뢰된 엔티티에 의해 서명된 것으로 검증되면 부트 파일이 인증된 것으로 결정한다. 이와 관련하여, 신뢰 기관은 인증 기관(Certificate Authority)과 같은 서드 파티 엔티티(third party entity)로서, 즉 암호 동작에 수반되고 서버(1336), 제어기(1348) 및 프로세서(1346a, 1346b, 및 1346c)와 같은 시스템 내의 다른 엔티티에 의해 신뢰된다. 예를 들어, 신뢰 기관은 서드 파티를 양자 모두가 신뢰하는 서버(1336) 및 제어기(1348)와 같이, 다른 파티 사이의 상호작용을 용이하게 한다. 신뢰 기관은 파티 사이의 트랜잭션 통신을 검토하고 검증할 수 있다. 신뢰 당사자(relying party)는 이 신뢰를 사용하여 그 자신의 상호작용을 보장한다.
또한, 프로세서는 임의의 부트 파일이 블랙리스트에 포함되는지 여부를 검사한다. 블랙리스트를 사용하기 전에, 프로세서는 알려진 암호 서명 검증 기술을 적용함으로써 대응하는 인증 키를 사용하여 블랙리스트(및/또는 화이트리스트)에 대한 디지털 서명을 검증한다.
부트 파일이 인증된 것으로 검증되고 부트 파일(예를 들어, 도커 컨테이너 내 부트 파일의 특정 버전)이 블랙리스트에서 특정되지 않으면, 프로세서는 부트 파일을 실행한다. 부트 파일이 인증된 것으로 검증될 수 없거나, 예를 들어 그 서명이 검증될 수 없거나 또는 부트 파일이 블랙리스트에서 특정되면, 프로세서는 부트 파일을 실행하는 대신에 부트 파일을 거부한다. 프로세서는 파일을 실행하기 전에 모든 부트 파일에 대해 이러한 서명 검증 및 블랙리스트 조회를 수행한다. 일 실시예에서, 예를 들어 암호화 키를 사용하여 부트 파일을 인증하는 것 및 KEKs를 사용하는 인증 키의 교환을 포함하는, 전력이 공급될 때 프로세서에 의해 수행된 초기 검사는 UEFI(Unified Extensible Firmware Interface) 표준을 따른다. 이러한 경우, UEFI 표준은, 운영 체제가 인스톨되어 있지 않은 경우에도, 프로세서(1346a, 1346b, 및 1346c) 중 하나 이상과 같은, AV 시스템(1320)의 컴포넌트의 원격 진단 및 수리를 가능하게 한다. 예를 들어, 서버(1336)의 관리자와 같은 운영자는 AV 시스템(1320)을 원격으로 진단 및 수리할 수 있다.
일 실시예에서, 프로세서는 부트 파일의 인증을 검증하고, 원자 연산(atomic operation)에서 부트 파일을 실행한다. 그러한 경우, 프로세서는, 어떠한 비관련 개입 조작(unrelated intervening operation)도 없는 상태에서, 그 인증을 검증하고 그것이 블랙리스트 내에 없다는 것을 결정하면 바로 다음 동작으로 부트 파일을 실행한다. 이러한 원자 연산에서의 검증 및 실행은, 그의 인증이 검증된 시간과 그것이 실행된 시간 사이의 간격으로 인한 부트 파일의 변조(corruption) 가능성이 존재하지 않는다는 것을 보장한다.
일 실시예에서, 각각의 부트 파일의 인증을 검증하고 블랙리스트를 검사하는 것에 추가하여, 프로세서는 또한 각각의 부트 파일 또는 각각의 부트 파일의 수신된 버전이 매니페스트 파일에 의해 특정되는지 여부를 검사한다. 이러한 경우, 프로세서는 부트 파일이 매니페스트 파일에 의해 특정되는 경우에만 부트 파일을 실행하지만, 부트 파일이 매니페스트 파일에 의해 특정되지 않으면, 부트 파일을 거부한다.
일 실시예에서, 다수의 매니페스트 파일이 플랫폼, 예를 들어 AV 시스템(1320) 내 프로세서(1346a, 1346b 및 1346c) 상에서 구동하는 프로세서를 구성하는데 사용된다. 그러한 경우, 상이한 매니페스트 파일은 프로세서의 별개의 기능성을 향해 지향된 부트 파일을 특정할 수 있다. 예를 들어, 제어기(1348)는, 예를 들어 다른 기능 중에서도 프로세서(1346a, 1346b, 및 1346c)의 초기화, 센서 드라이버 또는 인터페이스의 초기화, 또는 AV 시스템(1320)의 플랫폼 건강성(platform health)의 검증과 같은, 코어 플랫폼 올림(core platform bring up)을 담당하는 부트 파일을 특정하는 하드웨어 매니페스트 파일을 초기에 수신할 수 있다. 하드웨어 매니페스트 파일은 하나 이상의 더 높은 계층 매니페스트 파일, 예를 들어 다른 기능성 중에서도 자율 주행, 센서 데이터 수집, 하나 이상의 프로세서에 대한 시뮬레이션 테스트(simulated testing)의 수행과 같은 애플리케이션-레벨 기능성에 대응하는 매니페스트 파일에 대한 링크를 포함할 수 있다. 일 실시예에서, 하드웨어 매니페스트는 더 높은 계층 매니페스트 파일의 런치(launch)를 트리거링하기 위한 완료 기준(completion criterion)을 포함한다. 코어 플랫폼 부트 파일이 성공적으로 실행되어 프로세서(1346a, 1346b 및 1346c)를 올린 경우, 완료 기준이 트리거링되고, 이는 서버(1336)로부터 애플리케이션 레벨 매니페스트 파일을 페치하도록 제어기(1348)를 재촉한다.
하드웨어 매니페스트 파일 또는 애플리케이션 매니페스트 파일, 또는 양자 모두는, 애플리케이션 매니페스트 파일이 프로세싱된 후에 트리거링되는 추가적인 매니페스트 파일에 대한 링크를 포함할 수 있다. 추가적인 매니페스트 파일은 다른 타입의 애플리케이션에 대한 매니페스트 파일을 포함할 수 있다. 일 실시예에서, 상이한 매니페스트 파일은, 플랫폼 또는 차량의 사용 목적에 따라, 매니페스트 파일의 상이한 실행 순서 또는 매니페스트 파일의 상이한 타입에 대한 트리거를 포함한다. 일 실시예에서, 매니페스트 파일은, 특정 기준에 따라, 다른 매니페스트 파일이 구동하는 것을 차단하는 명령을 포함할 수 있다. 예를 들어, 매니페스트 파일은 특정 애플리케이션에 대한 프로세서를 구성하기 위한 부트 파일을 포함할 수 있다. 이 매니페스트 파일은 상이한 애플리케이션 세트에 대해 동일한 프로세서를 구성하기 위한 부트 파일을 포함하는 다른 매니페스트 파일을 차단할 수 있다.
일 실시예에서, 새로운 차량은 예를 들어, AV 시스템의 기본 동작을 초기화하기 위해 사용되는, 예를 들어 제어기가 서버(1336)과의 통신을 설정하게 하는 배송 계층(ship layer) 매니페스트 파일을 제외하고는 그 AV 시스템 소프트웨어의 임의의 특정 구성이 없는 상태에서 빈 상태로 운송될 수 있다. 차량이 목적지에 도달하고 전력이 공급되면, 제어기는 배송 계층 매니페스트 파일을 실행하는데, 이는 차량의 AV 시스템을 구성하는데 사용되는 다른 매니페스트 파일을 서버(1336)로부터 페치하도록 제어기를 재촉하는 트리거를 포함한다.
위 방식에서, 차량(1300) 내 프로세서, 예를 들어 차량(1300) 내 프로세서(1346a, 1346b 및 1346c)는 서버, 예를 들어 서버(1336)로부터 획득된 매니페스트 파일을 사용하여 부트 프로세스를 관리하기 위해 차량 온보드 제어기, 예를 들어 제어기(1348)를 사용하여 안전하게 부팅된다. 일 실시예에서, 서버(1336)는 차량 플리트를 위한 매니페스트 파일을 저장하고 관리한다. 플리트는 AV 시스템 플랫폼에 따라 하나 이상의 집합체로 그룹화된 복수의 차량을 포함한다. 예를 들어, 플리트는 그 AV 시스템에 대해 윈도우즈 운영 체제를 사용하는 차량의 집합체, 및 그 AV 시스템에 대해 리눅스 운영 체제를 사용하는 차량의 다른 집합체를 포함할 수 있다. 추가적으로 또는 대안적으로, 플리트는 각각의 집합체에 의해 사용되는 운영 체제 소프트웨어와 무관하게, 특정 하드웨어 구성, 예를 들어 프로세서 및 센서의 특정 세트를 갖는 차량의 집합체, 및 상이한 하드웨어 구성을 갖는 차량의 다른 집합체를 포함할 수 있다. 일 실시예에서, 동일한 하드웨어를 사용하는 집합체 내의 모든 차량은 소프트웨어의 관점에서 동일한데, 예를 들어 그 AV 시스템은 동일한 소프트웨어 릴리즈를 구동하여, 집합체 내의 차량에 대한 일관성을 보장한다.
일 실시예에서, 서버는 네트워크 연결, 예를 들어 차량(1300)의 통신 디바이스(1340)를 사용하는 네트워크 연결을 통해 플리트 내의 모든 차량에 의해서 액세스 가능한 위치에 있다. 일 예로서, 도 14는 중앙 집중식 서버(centralized server)(1436)가 차량 플리트를 위한 매니페스트 파일의 분포를 관리하는 시스템(1400)을 도시한다. 플리트는 차량(1404a, 1404b, 및 1404c)과 같은 차량의 제1 집합체(1404); 및 차량(1406a, 1406b, 1406c)과 같은 차량의 제2 집합체(1406)를 포함한다. 또한, 플리트는 차량의 추가적인 집합체를 포함할 수 있다. 단일 서버(1436)가 도시되어 있지만, 일 실시예에서, 서버(1436)와 유사한 서버의 집합체가 플리트를 위한 매니페스트 파일을 관리하는데 사용된다.
일부 실시예에서, 서버(1436)는 서버(1336)와 유사하고, 차량(1404a, 1404b, 1404c, 1406a, 1406b 또는 1406c) 중 하나 이상은 차량(1300)과 유사하다. 따라서, 후속하는 섹션에서 기술된 서버(1346)의 동작은 일부 실시예에서 서버(1336)에 적용 가능하다. 그러나, 다른 실시예에서, 서버(1436)의 동작은 다른 서버에도 적용 가능하다.
일 실시예에서, 차량 플리트는 하나의 엔티티에 의해 제어, 동작 및/또는 유지되는데, 상이한 플리트는 상이한 엔티티에 의해 관리된다. 예를 들어, 몇몇 상이한 사업체 엔티티는 특정 구역에서 하나 이상의 자율 주행 차량을 각각 동작시킬 수 있다. 서버(1436)는 (예를 들어, AV 시스템에 대한 소프트웨어를 업데이트하거나 차량의 각각에 대한 과업을 자동으로 배정하기 위해) 각각의 플리트에 걸쳐 자율 주행 차량의 동작을 조정할 수 있다.
일 실시예에서, 집합체 내의 차량은 집합체 내의 모든 차량에 대해 유사한 매니페스트 파일을 사용하여 구성된 유사한 소프트웨어를 구동한다. 상이한 집합체 내의 차량은 상이한 매니페스트 파일을 사용하여 구성된 상이한 소프트웨어를 구동할 수 있다. 일 실시예에서, 특정 집합체, 예를 들어, 집합체(1404)에 대한 매니페스트 파일은 임의의 다른 집합체, 예를 들어 집합체(1406)에 대한 매니페스트 파일에 의해 특정된 것과 상이한 적어도 하나의 부트 파일을 특정한다. 일 실시예에서, 특정 집합체, 예를 들어, 집합체(1404)에 대한 매니페스트 파일은 임의의 다른 집합체, 예를 들어 집합체(1406)에 대한 매니페스트 파일에 의해 특정된 부트 파일의 실행 순서와 상이한 부트 파일의 실행 순서를 특정한다.
서버(1436)는 플리트 내의 차량에 대한 매니페스트 파일을 생성한다. 일 실시예에서, 운영자, 예를 들어 플리트의 관리자는 집합체 내의 차량의 동작 요건에 따라 차량의 상이한 집합체에 대한 매니페스트 파일을 준비 및 분산하도록 서버를 제어한다. 일 실시예에서, 운영자로부터 서버(1436)로의 명령은 타깃 플랫폼의 구성, 부트 파일의 사양, 또는 플랫폼 내의 하나 이상의 프로세서에 의한 부트 파일의 실행 순서에 관한 정보를 포함한다.
또한, 매니페스트 파일은, 예를 들어 새로운 특징 또는 보안 패치를 추가하거나 새로운 부트 파일을 추가하거나 또는 기존 부트 파일을 제거하기 위해 하나 이상의 부트 파일의 새로운 버전으로 때때로 업데이트된다. 예를 들어, 일 실시예에서, 운영자는 기존의 매니페스트 파일을 업데이트하기 위해 서버(1436)에 추가 명령을 전송하는데, 이 추가 명령은 타깃 플랫폼의 재구성, 하나 이상의 부트 파일의 업데이트된 사양, 또는 플랫폼 내의 하나 이상의 프로세서에 의한 부트 파일의 업데이트된 실행 순서에 관한 정보를 포함한다.
일 실시예에서, 새로운 매니페스트 파일이 생성되거나 또는 기존의 매니페스트 파일이 업데이트될 때, 서버(1436)는 영향을 받는 매니페스트 파일을 사용하는 차량에 통지를 전송한다. 예를 들어, 운영자는 집합체(1404)에 대한 매니페스트 파일을 생성 또는 업데이트할 수 있다. 그렇게 하면, 운영자는 집합체(1404) 내의 차량, 예를 들어 차량(1404a, 1404b, 및 1404c)에 업데이트된 매니페스트 파일 또는 새로운 매니페스트 파일이 이용 가능하다는 통지를 전송하도록 서버(1436)를 제어한다. 일 실시예에서, 통지는 집합체의 모든 차량에 방송된다. 통지는 각각의 차량 내의 제어기, 예를 들어 차량(1300) 내의 제어기(1348)에 의해 수신되고, 제어기는 이후 예를 들어 도 13을 참조하여 기술된 바와 같이 서버로부터 매니페스트 파일을 페치함으로써 차량의 AV 시스템 소프트웨어의 업데이트를 진행한다.
일 실시예에서, 차량 내의 제어기는 통지를 수신하는 즉시 AV 시스템 소프트웨어를 업데이트하지 않고, 이후에 예를 들어 차량이 지정된 안전 위치에 있을 때 AV 시스템 소프트웨어를 업데이트 한다. 예를 들어, 집합체(1404) 내의 차량은 차량이 도로 상에서 이동하고 있는 시간에 서버(1436)로부터 통지를 수신할 수 있다. 일부의 경우에, 통지를 수신하면, 차량은 도로의 측면에 정차한 후, 서버로부터 매니페스트 파일을 페치함으로써 시스템 소프트웨어의 업데이트를 진행한다. 일부의 경우에, 차량 내의 제어기는 통지를 기록하고, 이후, 예를 들어 차량이 지정된 안전 위치에 있을 때, 매니페스트 파일을 페치한다.
일 실시예에서, 다수의 차량 내의 제어기는 서버(1346)로부터 통지를 수신함과 동시에 그 각각의 소프트웨어를 업데이트한다. 일 실시예에서, 모든 차량이 그 각각의 AV 시스템 소프트웨어가 업데이트됨과 동시에 동작하지 않는 것을 회피하기 위해, 서버는 집합체 또는 플리트 내의 차량의 서브세트에 대한 업데이트를 엇갈리게 수행(staggering)한다. 예를 들어, 운영자는 거의 동시에 집합체(1404 및 1406)에 대한 각각의 매니페스트 파일을 업데이트할 수 있다. 그러나, 제1 시간에 통지가 집합체(1404) 내의 차량에 전송되는 반면에, 상이한 제2 시간에는 통지가 집합체(1406) 내의 차량에 전송된다. 이와 같이 함으로써, 집합체(1404) 내의 차량에 대한 업데이트는 집합체(1406) 내의 차량에 대한 업데이트(예를 들어, 제2 시간)와 비교할 때 상이한 시간(예를 들어 제1 시간)에 트리거링될 수 있다. 일 실시예에서, 이러한 엇갈린 업데이트는 집합체 자체 내의 차량에 대해 수행된다. 예를 들어, 서버(1346)는 서버가 차량(1404c)에 통지하는 시간과 상이한 시간에 차량(1404a 및 1404b)에 통지할 수 있다.
위 방식으로, 한 번에 차량의 그룹에 업데이트를 트리거링하기 위한 통지를 전송함으로써, 시스템(1400)은 유사한 구성을 갖는 다수의 차량을 일괄적으로 프로세싱하는데 사용될 수 있으며, 상이한 구성을 갖는 차량은 개별적으로 프로세싱될 수 있다. 차량에 대한 매니페스트 파일이 차량의 AV 시스템을 위한 소프트웨어 스택을 특정하기 때문에, 운영자는 플리트 내의 각각의 차량에서 구동되는 소프트웨어에 대한 중앙 집중식 제어를 유지하기 위해 서버(1436)를 사용할 수 있다. 이에 따라, 시스템은 플리트 내의 차량을 관리하기 위한 강건하고 안전한 방식을 제공하며, 이는 예를 들어 수동 업데이트에 있어서의 사람의 실수 또는 불일치(discrepancy)에 기인하여 발생할 수 있는, 임의의 차량이 잘못 구성된 플랫폼 상태가 되게 하는 위험을 회피한다. 또한, 시스템은 플리트에 걸쳐 스케일링 가능한 소프트웨어 배포(scalable software deployment)를 제공하며, 이는 플리트 내의 상이한 차량에 대한 전문적인 기술 지식 또는 스킬세트(skillset)을 요구하지 않으면서, 운영자가 중앙 위치에서 일관된 방식으로 차량의 그룹을 구성하거나 또는 차량에서 구동되고 있는 소프트웨어를 쉽게 변경할 수 있게 한다.
차량용 프로세서를 안전하게 부팅하기 위한 예시적인 프로세스
도 15는 차량용 프로세서의 안전 부팅을 제어하기 위한 예시적인 프로세스(1500)를 도시한다. 프로세스(1500)는 본원에 기술된 시스템 중 하나 이상을 사용하여(예를 들어, 특히 하나 이상의 컴퓨터 시스템, AV 시스템, 자율 주행 차량을 사용하여) 적어도 부분적으로 수행된다. 일 실시예에서, 프로세서(1346a, 1346b, 및 1346c) 중 하나 이상과 같은 차량(1300) 내의 하나 이상의 프로세서를 안전하게 부팅하도록(도 13), 프로세스(1500)는 제어기(1348)에 의해 수행된다. 따라서, 프로세스(1500)는 제어기(1348)를 참조하여 후속하는 섹션에서 기술된다. 그러나, 프로세스(1500)는 또한 다른 디바이스에 의해 수행될 수 있다.
프로세스(1500)에서, 제어기는 차량에 대한 고유 식별자를 네트워크 서버(1502)에 전송한다. 예를 들어, 차량(1300)에 전력이 공급될 때, 제어기(1348)는 차량(1300)에 대한 VIN을 서버(1336)에 전송한다.
제어기는 차량(1504) 내의 하나 이상의 프로세서에 대한 하나 이상의 부트 파일에 관한 정보를 갖는 매니페스트 파일을 수신한다. 예를 들어, 차량(1300)의 VIN 번호를 서버(1336)에 전송할 때, 제어기(1348)는 서버(1336)로부터 차량(1300)의 AV 시스템(1320)에 대한 소프트웨어 구성을 특정하는 매니페스트 파일을 수신한다. 매니페스트 파일은 차량(1300) 내의 프로세서에 대한 도커 컨테이너, 예를 들어 프로세서(1346a, 1346b 및 1346c)에 대한 정보를 포함하는데, 각각의 도커 컨테이너는 각각의 프로세서에 대한 부트 파일을 갖는 소프트웨어 패키지이다.
제어기는 매니페스트 파일이 유효한지 여부를 결정한다(1506). 예를 들어, 제어기(1348)는 매니페스트 파일의 버전 번호를 제어기의 버전 카운터의 값과 비교한다.
제어기가 매니페스트 파일이 유효하지 않다고 결정하면, 제어기는 매니페스트 파일을 거부한다(1508). 예를 들어, 매니페스트 파일의 버전 번호가 제어기의 버전 카운터의 값 미만이면, 제어기(1348)는 매니페스트 파일이 사용되지 않아야 하는 구 매니페스트 파일이라고 결정한다. 따라서, 제어기(1348)는 매니페스트 파일을 거부한다. 일 실시예에서, 제어기는 거부와 관련하여 서버(1336)에 통지를 전송한다.
반면에, 제어기가 매니페스트 파일이 유효하다고 결정하면, 제어기는 매니페스트 파일을 판독하고 매니페스트 파일로부터 부트 파일에 관한 정보를 획득한다(1510). 예를 들어, 매니페스트 파일의 버전 번호가 제어기의 버전 카운터의 값보다 큰 경우, 제어기(1348)는 유효 새로운 매니페스트 파일로서 매니페스트 파일을 수락하고 파일을 프로세싱한다. 제어기는 매니페스트 파일의 버전에 대해 그 버전 카운터의 값을 업데이트하고, 매니페스트 파일 내 도커 컨테이너를 조사하여 대응하는 부트 파일의 버전 번호를 획득한다. 제어기는 부트 파일이 서로 일치하는 것을 보장하기 위해 버전 번호를 검사한다.
제어기는 하나 이상의 부트 파일의 가장 최신 버전이 로컬적으로 이용 가능한지 여부를 결정한다(1512). 예를 들어, 제어기(1348)는 도커 컨테이너 내의 부트 파일의 가장 최신 버전이 로컬 저장 장치, 예를 들어 데이터 저장 유닛(1342)에 이미 존재하는지 여부를 검사한다.
하나 이상의 부트 파일의 가장 최신 버전이 로컬적으로 이용 가능하면, 제어기는 로컬 저장 장치로부터 부트 파일의 가장 최신 버전을 획득한다(1514). 예를 들어, 도커 컨테이너 내의 하나 이상의 부트 파일의 버전이 로컬 저장 장치, 예를 들어 데이터 저장 유닛(1342)에 존재한다고 제어기(1348)가 결정하면, 제어기는 로컬 저장 장치로부터 이 부트 파일을 획득한다.
하나 이상의 부트 파일의 가장 최신 버전이 로컬적으로 이용 가능하지 않으면, 제어기는 서버로부터 부트 파일의 가장 최신 버전을 획득한다(1516). 예를 들어, 제어기(1348)가 도커 컨테이너 내의 하나 이상의 부트 파일의 버전이 로컬적으로 이용 가능하지 않다고 결정하면, 제어기는 서버(1336)로부터, 예를 들어 안전 터널을 통해 부트 파일의 이 버전을 페치한다.
제어기는 프로세서를 부팅하여, 대응하는 부트 파일 및 다른 매니페스트 파일 정보를 각각의 프로세서에 제공한다(1518). 예를 들어, 제어기(1348)는 프로세서(1346a, 1346b 및 1346c) 상에서 순차적으로 전력을 공급한다. 각각의 프로세서에 전력이 공급됨에 따라, 제어기(1348)는 프로세서에 의해 사용되는 매니페스트 파일로부터의 다른 정보, 예를 들어 블랙리스트 또는 화이트리스트 또는 양자 모두와 함께, 프로세서에 대해 특정된 도커 컨테이너를 프로세서에 제공한다.
도 16은 차량용 프로세서를 순차적으로 부팅하기 위한 예시적인 프로세스(1600)를 도시한다. 일 실시예에서, 전술된 바와 같이, 제어기(1348)가 프로세서(1346a, 1346b, 및 1346c) 중 하나 이상과 같은, 차량(1300) 내의 프로세서를 부팅함에 따라 프로세스(1600)가 제어기(1348)에 의해 수행된다(1518). 따라서, 프로세스(1600)는 제어기(1348)를 참조하여 후속하는 섹션에서 기술된다. 그러나, 프로세스(1600)는 또한 다른 디바이스에 의해 수행될 수 있다.
프로세스(1600)에서, 제어기가 프로세서에 전력을 공급한다(1602). 예를 들어, 제어기(1348)는 우선 스위치(1352a)를 폐쇄 상태로 토글하여 프로세서(1346a)를 전원에 연결함으로써 프로세서(1346a)에 전력을 공급한다.
제어기는 프로세서의 식별자를 사용하여 매칭된 각각의 부트 파일을 프로세서에 전송한다(1604). 예를 들어, 매니페스트 파일 내의 각각의 도커 컨테이너는 이더넷 MAC 어드레스(고유의 하드웨어 식별자)와 같은, 타깃 프로세서의 고유의 네트워크 식별자로 태깅된다. 제어기(1348)는, 프로세서에 대한 부트 파일을 포함하고 프로세서의 고유 네트워크 식별자로 태깅되는 도커 컨테이너를 프로세서에 전송한다.
제어기는 타임아웃 기간 내에 프로세서로부터 확인 응답이 수신되는지를 검사한다(1606). 예를 들어, 프로세서(1346a)로 도커 컨테이너를 전송한 후에, 제어기(1348)는 프로세서가 성공적으로 부팅된 것을 나타내 프로세서(1346a)로부터의 확인 응답 메시지를 수신하기 위해 특정된 타임아웃 기간을 대기한다.
제어기가 타임아웃 기간 내에 프로세서로부터 확인 응답을 수신하면, 제어기는 프로세서가 성공적으로 부팅된 것으로 결정한다(1608). 예를 들어, 제어기(1348)가 타임아웃 기간의 만료 전에 프로세서(1346a)로부터 확인 응답 메시지를 수신하면, 제어기(1348)는 프로세서(1346a)가 그 도커 컨테이너 내의 부트 파일을 성공적으로 실행하였으며 완전한 동작 상태인 것으로 결정한다.
반면에, 제어기가 타임아웃 기간 내에 프로세서로부터 확인 응답을 수신하지 않으면, 제어기는 프로세서 전력 순환 제한에 도달했는지 여부를 검사한다(1610). 예를 들어, 제어기(1348)가 타임아웃 기간의 만료까지 프로세서(1346a)로부터 확인 응답 메시지를 수신하지 않으면, 제어기(1348)는 비응답 프로세서에 전력을 순환시킨다. 전력 순환 전에, 제어기는 프로세서(1346a)에 대한 전력 순환 제한에 도달하였는지 여부, 예를 들어 프로세서(1346a)에 전력 공급을 특정된 횟수 온 오프하였는지 여부를 검사한다.
프로세서 전력 순환 제한에 도달하지 않았다고 제어기가 결정하면, 제어기는 비응답 프로세서에 전력을 순환시켜, 예를 들어 각각의 스위치를 개방 상태로 토글하고 다시 프로세서에 전력을 공급하도록 폐쇄 상태로 토글함으로써 부팅 프로세스를 반복한다. 반면에, 전력 순환 제한이 비응답 프로세서에 대해 도달했다고 제어기가 결정하면, 제어기는 하드웨어 고장(1612)을 경험하는 것으로 프로세서를 마킹한다.
도 17은 부트 파일을 실행하기 위한 차량용 프로세서에 대한 예시적인 프로세스(1700)를 도시한다. 일 실시예에서, 프로세스(1700)는 전력이 공급될 때 프로세서(1346a, 1346b, 및 1346c)와 같은 차량(1300) 내의 프로세서의 각각에 의해 수행된다. 따라서, 프로세스(1700)는 프로세서(1346a, 1346b, 및 1346c)를 참조하여 후속하는 섹션에서 기술된다. 그러나, 프로세스(1700)는 또한 다른 디바이스에 의해 수행될 수 있다.
프로세스(1700)에서, 프로세서는 제어기로부터 부트 파일을 수신한다(1702). 예를 들어, 전력이 공급되면, 프로세서(1346a)는 그 기능성을 구성하기 위해 프로세서에 의해 실행될 부트 파일을 포함하는 제어기(1348)로부터의 도커 컨테이너를 수신한다. 또한, 프로세서(1346a)는 제어기(1348)로부터 금지된 부트 파일의 블랙리스트를 수신한다. 각각의 부트 파일 및 블랙리스트는 신뢰 엔티티, 예를 들어 서버(1336)에 의해 서명된 대응하는 디지털 서명 또는 인증 기관과 같은 서드 파티 신뢰 기관을 포함한다.
프로세서는 임의의 수신된 부트 파일의 버전이 리스트에 기록된 임의의 버전과 매칭하는지 여부를 검사한다(1704). 예를 들어, 프로세서(1346a)는 그 도커 컨테이너에 포함된 부트 파일의 버전을 결정한다. 각각의 부트 파일에 대해, 프로세서는 도커 컨테이너 버전이 블랙리스트에 포함되어 있는지 여부를 검사한다. 일 실시예에서, 프로세서는 블랙리스트를 사용하기 전에, 예를 들어 블랙리스트와 함께 포함된 디지털 서명을 검증함으로써, 블랙리스트의 인증을 검증한다.
임의의 수신된 부트 파일의 버전이 리스트에 기록된 임의의 버전과 매칭하면, 프로세서는 부트 파일을 거부하고 통지를 전송한다(1706). 예를 들어, 부트 파일의 도커 컨테이너 버전이 블랙리스트에 포함된다고 프로세서(1346a)가 결정하면, 프로세서는 금지된 파일로서 부트 파일을 폐기한다. 일 실시예에서, 프로세서(1346a)는 통지, 예를 들어 경고 메시지를 제어기(1348)에 전송하여, 예를 들어 도커 컨테이너 내 부트 파일의 블랙리스트 버전을 수신하였다는 것을 나타낸다. 일 실시예에서, 프로세서는 도커 컨테이너 내의 다른 부트 파일의 실행을 중단하고, 실행되는 것이 허용된 부트 파일의 버전을 포함하는 업데이트된 도커 컨테이너를 제어기(1348)로부터 수신하기 위해 대기한다.
반면에, 임의의 수신된 부트 파일의 버전이 리스트에 기록된 임의의 버전과 매칭하지 않는 경우, 프로세서는 공통 클래스 인증 키를 사용하여 각각의 수신된 부트 파일 상의 서명을 계산한다(1708). 예를 들어, 어떠한 부트 파일의 도커 컨테이너 버전도 블랙리스트 내에 포함되지 않았다고 프로세서(1346a)가 결정하면, 프로세서는 도커 컨테이너 내의 부트 파일이 실행 승인된 것으로 결정한다. 프로세서(1346a)는 예를 들어 차량(1300) 내 안전한 저장 장치로부터 그 클래스 인증 키에 액세스하고, 클래스 인증 키를 사용하여 각각의 부트 파일에 대한 디지털 서명을 계산한다.
프로세서는 각각의 부트 파일에 대한 계산된 서명(computed signature)이 부트 파일에 대한 수신된 서명과 매칭하는지를 검사한다(1710). 예를 들어, 프로세서(1346a)는 부트 파일에 대해 계산된 서명을 도커 컨테이너 내의 부트 파일에 대응하는 서명과 비교함으로써 각각의 부트 파일을 인증한다.
계산된 서명이 수신된 서명과 매칭하지 않으면, 프로세서는 부트 파일을 거부하고 통지를 전송한다(1706). 예를 들어, 하나 이상의 부트 파일에 대한 계산된 서명이 각각의 수신된 서명과 상이하다고 프로세서(1346a)가 결정하면, 프로세서는 인증 실패를 위해 부트 파일을 폐기한다. 일 실시예에서, 프로세서(1346a)는 통지, 예를 들어 경고 메시지를 제어기(1348)에 전송하여, 예를 들어 잠재적으로 손상된 부트 파일이 수신된 것을 나타낸다. 일 실시예에서, 프로세서는 도커 컨테이너 내의 다른 부트 파일의 실행을 중단하고, 부트 파일의 업데이트 된 안전한 버전을 포함하는 업데이트된 도커 컨테이너를 제어기(1348)로부터 수신하기 위해 대기한다.
반면에, 계산된 서명이 수신된 서명과 매칭하면, 프로세서는 부트 파일을 수락하고 실행을 진행한다(1712). 예를 들어, 부트 파일에 대한 계산된 서명이 각각의 수신된 서명과 매칭한다고 프로세서(1346a)가 결정하면, 프로세서는 인증된 것으로 부트 파일을 수락하고, 부트 파일의 실행을 진행한다. 일 실시예에서, 프로세서는 원자 연산에서 부트 파일을 인증 및 실행하는데, 예를 들어 부트 파일은 어떠한 다른 개입 조작도 없이 부트 파일의 성공적인 인증 즉시 실행된다.
도 18은 서버로부터의 매니페스트 파일을 차량에 분배하기 위한 예시적인 프로세스(1800)를 도시한다. 일 실시예에서, 집합체(1404) 내의 차량(1404a, 1404b, 및 1404c) 및 집합체(1406) 내의 차량(1406a, 1406b, 및 1406c)과 같은, 플리트 내의 차량의 집합체에 매니페스트 파일을 분배하기 위해 프로세스(1800)가 서버(1436)에 의해 수행된다. 따라서, 프로세스(1800)는 서버(1436)를 참조하여 후속하는 섹션에서 기술된다. 그러나, 프로세스(1800)는 또한 다른 디바이스에 의해 수행될 수 있다.
프로세스(1800)에서, 서버는 하나 이상의 플랫폼을 위한 매니페스트 파일을 생성한다(1802). 예를 들어, 집합체(1404 및 1406)는 개별적으로 제1 및 제2 플랫폼에 대응하며, 여기서 상이한 플랫폼은 상이한 AV 시스템 소프트웨어 또는 하드웨어 구성, 또는 양자 모두를 갖는다. 집합체(1404 및 1406)를 포함하는 차량 플리트를 관리하는 운영자는 서버(1436)를 사용하여, 제1 플랫폼 및 제2 플랫폼에 대한 별개의 매니페스트 파일을 생성 및/또는 업데이트한다.
서버는 플랫폼을 사용하는 디바이스에 각각의 플랫폼에 대한 매니페스트 파일의 이용 가능성을 통지한다(1804). 예를 들어, 집합체(1404)에 대한 새로운 또는 업데이트된 매니페스트 파일이 이용 가능할 때, 통지 메시지가 서버(1436)로부터 집합체(1404) 내의 차량, 예를 들어 차량(1404a, 1404b, 및 1404c)으로 전송된다. 유사하게, 집합체(1406)에 대한 새로운 또는 업데이트된 매니페스트 파일이 이용 가능할 때, 통지 메시지가 서버(1436)로부터 집합체(1406) 내의 차량, 예를 들어 차량(1406a, 1406b, 및 1406c)으로 전송된다. 일 실시예에서, 상이한 플랫폼에 대한 통지 메시지는 예를 들어 엇갈리게 업데이트하도록 상이한 시간에 전송된다.
서버는 매니페스트 파일에 대한 하나 이상의 디바이스로부터의 요청을 수신하는데, 이 요청은 디바이스에 대한 고유 식별자를 포함한다(1806). 예를 들어, 서버(1436)는 차량(1404a, 1404b, 및 1404c) 중 하나 이상과 같은 집합체(1404) 내의 차량으로부터 매니페스트 파일에 대한 요청을 수신한다. 추가적으로 또는 대안적으로, 서버(1436)는 차량(1406a, 1406b, 및 1406c) 중 하나 이상과 같은 집합체(1406) 내의 차량으로부터 매니페스트 파일에 대한 요청을 수신한다. 각각의 요청은 요청 차량에 대한 고유 식별자, 예를 들어 차량의 VIN 번호를 포함한다. 일 실시예에서, 이러한 요청은 서버로부터의 통지 메시지를 전송한 후에 수신된다.
각각의 디바이스에 대해, 서버는 각각의 요청으로부터의 고유 식별자를 사용하여, 디바이스에 대응하는 플랫폼을 결정한다(1808). 예를 들어, 서버(1436)는 요청으로부터 VIN 번호를 획득한다. 서버(1436)는 각각의 차량에 대한 플랫폼을 나타내는 기록을 포함하는 데이터베이스에 액세스하는데, 여기서 차량에 대한 기록은 차량에 대한 VIN 번호를 사용하여 태깅된다. 이러한 요청으로부터 획득된 VIN을 사용하여, 서버는 데이터베이스 내의 엔트리를 조회하고, 차량에 대한 플랫폼을 결정한다. 이 방식으로, 서버는 각각의 차량에 대한 플랫폼을 결정하는데, 이로부터 서버는 매니페스트 파일에 대한 요청을 수신한다.
서버는 디바이스에 대응하는 플랫폼에 대해 생성된 매니페스트 파일을 각각의 디바이스로 전송한다(1810). 예를 들어, 차량에 대한 플랫폼을 결정할 때, 서버는 차량의 플랫폼에 대해 생성된 매니페스트 파일을 차량으로 전송한다. 일 실시예에서, 서버는 플랫폼에 대한 매니페스트 파일을 일괄 메시지(batch message)로, 예를 들어 방송(broadcast)으로서, 플랫폼에 대응하는 다수의 차량에 전송한다. 일 실시예에서, 서버는, 예를 들어 제1 메시지에서 플랫폼에 대응하는 차량의 제1 서브세트에 그리고 나중에 제2 메시지에서 플랫폼에 대응하는 제2 서브세트의 차량에 전송하는, 엇갈린 업데이트(staggered update)로 플랫폼에 대한 매니페스트 파일을 방송한다. 일 실시예에서, 서버는 상이한 메시지에서 상이한 플랫폼에 대한 매니페스트 파일을 방송한다.
전술한 설명에서, 본 발명의 실시예는 구현예에 따라 변화될 수 있는 다수의 특정한 세부사항을 참조하여 기술되었다. 따라서, 상세한 설명 및 도면은 제한적인 관점보다는 예시적인 관점에서 고려되어야 한다. 본 발명의 범위의 유일하고 배타적인 지표 및 출원인에 의해 본 발명의 범위가 되도록 의도된 것은, 본 출원으로부터 발행된 청구항 세트의 문자 그대로의 그리고 등가의 범위로서, 이는 그러한 청구항이 발행한 특정 형태이며, 임의의 후속하는 교정을 포함한다. 이러한 청구항에 포함된 용어에 대해 본원에 명시적으로 설명된 임의의 정의는 청구항에서 사용되는 이러한 용어의 의미를 결정한다. 또한, 전술한 설명 또는 후속하는 청구항에서 용어 "더 포함하는"이라는 용어가 사용될 때, 이 문구에 후속하는 것은 추가적인 단계 또는 엔티티, 또는 이전에 인용된 단계 또는 엔티티의 하위 단계/하위 엔티티일 수 있다.

Claims (36)

  1. 장치로서,
    차량의 하나 이상의 프로세서에 결합되고 상기 하나 이상의 프로세서에 대한 안전한 부트 프로세스를 관리하는 회로를 포함하고, 상기 회로는,
    상기 차량의 고유 식별자를 네트워크 서버에 전송하는 동작;
    상기 고유 식별자를 상기 네트워크 서버에 전송하는 동작에 응답하여, 상기 하나 이상의 프로세서에 의한 실행을 위해 하나 이상의 제1 부트 파일에 관한 정보를 포함하는 제1 매니페스트 파일을 상기 네트워크 서버로부터 수신하는 동작;
    상기 제1 매니페스트 파일에 대해 특정된 버전 번호를 결정하는 동작;
    상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라고 결정한 경우에, 상기 제1 매니페스트 파일로부터 상기 제1 부트 파일에 관한 상기 정보를 획득하는 동작;
    상기 획득된 정보로부터, 상기 제1 매니페스트 파일이 나타내는 상기 하나 이상의 제1 부트 파일 각각의 가장 최신 버전이 상기 장치에 대해 로컬적으로 이용 가능한지 여부를 결정하는 동작;
    상기 제1 부트 파일의 가장 최신 버전이 상기 장치에 대해 로컬적으로 이용 가능한 버전과 상이하다는 결정에 따라, 네트워크 리소스로부터, 상기 제1 부트 파일의 가장 최신 버전을 획득하는 동작으로서, 상기 제1 부트 파일의 가장 최신 버전을 획득하는 상기 동작은, 상기 제1 부트 파일 각각에 대해,
    상기 네트워크 리소스로부터 상기 제1 부트 파일의 가장 최신 버전을 수신할 때, 상기 제1 부트 파일이 상기 제1 매니페스트 파일에 의해 특정되는지 여부를 결정하는 동작, 및
    상기 제1 부트 파일이 상기 제1 매니페스트 파일에 의해 특정된 것으로 결정한 경우, 상기 제1 부트 파일을 유효 부트 파일로서 수락하는 동작
    을 포함하는, 상기 제1 부트 파일의 가장 최신 버전을 획득하는 동작; 및
    상기 제1 부트 파일의 가장 최신 버전 획득에 응답하여, 상기 하나 이상의 프로세서를 부팅하는 동작으로서, 상기 하나 이상의 프로세서의 각각에 상기 제1 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제1 부트 파일의 가장 최신 버전을 제공하는 동작을 포함하는, 상기 하나 이상의 프로세서를 부팅하는 동작
    을 포함하는 동작들(operations)을 수행하고,
    상기 프로세서는 상기 제1 부트 파일의 인증을 검증하면 상기 제1 부트 파일을 실행하는, 장치.
  2. 제1항에 있어서, 상기 동작들(operations)은,
    상기 제1 매니페스트 파일로부터 제2 매니페스트 파일에 관한 정보를 획득하는 동작으로서, 상기 제2 매니페스트 파일은 상기 하나 이상의 프로세서에 의한 실행을 위해 제2 부트 파일에 관한 정보를 포함하는, 상기 제2 매니페스트 파일에 관한 정보를 획득하는 동작;
    상기 하나 이상의 프로세서가 상기 제1 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제1 부트 파일의 가장 최신 버전을 사용하여 성공적으로 부팅되었는지 여부를 결정하는 동작;
    상기 하나 이상의 프로세서가 성공적으로 부팅되었다는 결정에 따라, 상기 네트워크 서버로부터 상기 제2 매니페스트 파일을 획득하는 동작;
    상기 제2 매니페스트 파일에 대해 특정된 버전 번호를 결정하는 동작;
    상기 제2 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라고 결정한 경우, 상기 제2 매니페스트 파일로부터 상기 제2 부트 파일에 관한 상기 정보를 획득하는 동작;
    상기 획득된 정보로부터 상기 제2 매니페스트 파일이 나타내는 상기 제2 부트 파일 각각의 가장 최신 버전이 상기 장치에 로컬적으로 이용 가능한지 여부를 결정하는 동작;
    상기 제2 부트 파일의 가장 최신 버전이 상기 장치에 로컬적으로 이용 가능한 버전과 상이하다는 결정에 따라, 네트워크 리소스로부터, 상기 제2 부트 파일의 가장 최신 버전을 획득하는 동작; 및
    상기 제2 부트 파일의 가장 최신 버전 획득에 응답하여, 상기 하나 이상의 프로세서의 각각에 상기 제2 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제2 부트 파일의 가장 최신 버전을 제공하는 동작
    을 더 포함하고,
    상기 프로세서는 상기 제2 부트 파일의 인증을 검증하면 상기 제2 부트 파일을 실행하는, 장치.
  3. 제2항에 있어서, 상기 제1 매니페스트 파일은, 상기 하나 이상의 프로세서에 대해, 상기 차량의 동작 플랫폼에 대응하는 하드웨어 구성을 특정하는, 장치.
  4. 제3항에 있어서, 상기 제1 부트 파일은, 상기 프로세서에 대응하는 하드웨어의 동작들(operations)을 관리하기 위한 프로그램, 상기 차량에 의해 실행되는 운영 체제에 대한 컴퓨트 플랫폼 초기화를 위한 소프트웨어, 상기 운영 체제에 대한 건강성 검증 소프트웨어, 센서 디바이스 드라이버 소프트웨어, 또는 센서 인터페이스 소프트웨어 중 하나 이상을 포함하는, 장치.
  5. 제3항에 있어서, 상기 제2 매니페스트 파일은 상기 하나 이상의 프로세서에 대한 애플리케이션 레벨 구성을 특정하는, 장치.
  6. 제5항에 있어서, 상기 제2 부트 파일은 상기 프로세서에 의해 애플리케이션 기능성을 제공하기 위한 프로그램, 또는
    상기 하나 이상의 프로세서에 대한 자율 주행, 센서 데이터 수집, 또는 테스트 시뮬레이션 중 하나 이상에 대한 애플리케이션 소프트웨어 중 하나 이상을 포함하는, 장치.
  7. 제2항에 있어서, 상기 제2 매니페스트 파일에 관한 정보는 제1 시간에 상기 제1 매니페스트 파일로부터 획득되고, 상기 동작들(operations)은,
    상기 제1 매니페스트 파일로부터 제2 시간에, 상기 장치에 대해 구성된 제3 매니페스트 파일에 관한 정보를 획득하는 동작으로서, 상기 제3 매니페스트 파일은 상기 하나 이상의 프로세서에 의한 실행을 위해 제3 부트 파일에 관한 정보를 포함하고, 상기 제2 시간은 상기 제1 시간과 상이하고, 상기 제3 매니페스트 파일은 상기 제2 매니페스트 파일과 상이한, 상기 제3 매니페스트 파일에 관한 정보를 획득하는 동작;
    상기 하나 이상의 프로세서가 상기 제1 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제1 부트 파일의 가장 최신 버전을 사용하여 성공적으로 부팅되었는지 여부를 결정하는 동작;
    상기 하나 이상의 프로세서가 성공적으로 부팅되었다는 결정에 따라, 상기 네트워크 서버로부터 상기 제3 매니페스트 파일을 획득하는 동작;
    상기 제3 매니페스트 파일에 대해 특정된 버전 번호를 결정하는 동작;
    상기 제3 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라고 결정한 경우, 상기 제3 매니페스트 파일로부터 상기 제3 부트 파일에 관한 상기 정보를 획득하는 동작;
    상기 획득된 정보로부터 상기 제3 매니페스트 파일이 나타내는 상기 제3 부트 파일 각각에 대해 가장 최신 버전이 상기 장치에 로컬적으로 이용 가능한지 여부를 결정하는 동작;
    상기 제3 부트 파일의 가장 최신 버전이 상기 장치에 대해 로컬적으로 이용 가능한 버전과 상이하다고 결정할 때, 네트워크 리소스로부터, 상기 제3 부트 파일의 가장 최신 버전을 획득하는 동작; 및
    상기 제3 부트 파일의 가장 최신 버전 획득에 응답하여, 상기 하나 이상의 프로세서 각각에 상기 제3 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제3 부트 파일의 가장 최신 버전을 제공하는 동작
    을 더 포함하고,
    상기 프로세서는 상기 제3 부트 파일의 인증을 검증하면 상기 제3 부트 파일을 실행하는, 장치.
  8. 제7항에 있어서, 상기 제3 부트 파일 중 적어도 하나는 상기 제2 부트 파일과 별개이고,
    상기 제3 매니페스트 파일에 의해 특정된 상기 제3 부트 파일 중 하나 이상의 실행 순서가 상기 제2 매니페스트 파일에 의해 특정된 상기 제2 부트 파일 중 하나 이상의 실행 순서와 별개인, 장치.
  9. 제1항에 있어서, 상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라는 것을 결정하는 동작은,
    상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호를 로컬적으로 저장된 버전 번호와 비교하는 동작; 및
    특정된 상기 버전 번호가 상기 로컬적으로 저장된 버전 번호와 동일하거나 그보다 크다는 것을 상기 비교 동작이 나타내는 경우, 상기 제1 매니페스트 파일을 유효한 것으로 검증하는 동작을 포함하고,
    대상체의 더 큰 버전 번호가 대상체의 더 최신 버전을 나타내는, 장치.
  10. 제9항에 있어서, 상기 로컬적으로 저장된 버전 번호는 카운터 값을 포함하고, 상기 동작들(operations)은,
    특정된 상기 버전 번호가 상기 로컬적으로 저장된 버전 번호보다 크다는 것을 상기 비교 동작이 나타내는 경우, 특정된 상기 버전 번호와 동일하도록 상기 카운터 값을 증가시키는 동작을 더 포함하고,
    상기 카운터 값은 상기 장치에 결합된 신뢰 플랫폼 모듈(trusted platform module) 또는 상기 장치에 결합된 프로그램 가능 메모리 모듈 중 하나에 의해 측정되는, 장치.
  11. 제1항에 있어서, 상기 제1 부트 파일의 인증을 검증하면 상기 제1 부트 파일을 실행하는 동작은,
    상기 프로세서 중 적어도 하나에 대해, 각각의 제1 부트 파일을 수신할 때, 상기 네트워크 서버에 대응하는 신뢰 파티(trusted party)에 의해 서명되는 상기 제1 부트 파일 상의 암호 서명을 검증하는 동작;
    상기 암호 서명이 상기 신뢰 파티에 의해 서명된 것으로 검증되는 경우 상기 제1 부트 파일을 유효한 것으로 수락하는 동작; 및
    상기 제1 부트 파일을 유효한 것으로 수락할 때 상기 제1 부트 파일을 실행하는 동작을 포함하는, 장치.
  12. 제1항에 있어서, 상기 장치는 차량을 포함하고, 상기 제1 매니페스트 파일을 수신하는 동작 및 상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효하다는 것을 결정하는 동작은,
    상기 차량이 루트 상에서 진행하는 제1 시간에, 상기 네트워크 서버로부터 상기 제1 매니페스트 파일을 수신하는 동작; 및
    상기 차량이 지정된 위치에서 정지 위치에 있는, 상기 제1 시간 이후의 제2 시간에, 상기 제1 매니페스트 파일을 프로세싱하는 동작으로서, 상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호의 유효성을 결정하는 동작을 포함하는, 상기 제1 매니페스트 파일을 프로세싱하는 동작
    을 포함하는, 장치.
  13. 제1항에 있어서, 상기 고유 식별자를 상기 네트워크 서버에 전송하는 동작은,
    상기 네트워크 서버로부터, 상기 제1 매니페스트 파일의 업데이트된 버전이 상기 네트워크 서버에서 이용 가능하다는 통지를 수신하는 동작; 및
    상기 통지를 수신하는 것에 응답하여, 상기 네트워크 서버에 상기 고유 식별자를 전송하는 동작을 포함하는, 장치.
  14. 제13항에 있어서, 상기 장치는 차량을 포함하고, 상기 네트워크 서버로부터 상기 통지를 수신하고 상기 고유 식별자를 상기 네트워크 서버에 전송하는 동작은,
    상기 차량이 루트 상에서 진행하는 제1 시간에, 상기 네트워크 서버로부터 상기 통지를 수신하는 동작; 및
    상기 차량이 지정된 위치에서 정지 위치에 있는, 상기 제1 시간 이후의 제2 시간에, 상기 고유 식별자를 상기 네트워크 서버에 전송하는 동작을 포함하는, 장치.
  15. 삭제
  16. 제1항에 있어서, 상기 동작들(operations)은,
    상기 제1 부트 파일이 상기 제1 매니페스트 파일에 의해 특정되지 않은 것으로 결정하는 경우, 상기 제1 부트 파일을 거부하는 동작; 및
    상기 제1 매니페스트 파일을 거부하는 동작을 더 포함하는, 장치.
  17. 제1항에 있어서, 상기 제1 부트 파일의 인증을 검증하면 상기 제1 부트 파일을 실행하는 동작은, 상기 제1 부트 파일의 인증을 검증하는 즉시 상기 제1 부트 파일을 실행하는 동작을 포함하고,
    상기 제1 부트 파일을 실행하고 상기 제1 부트 파일의 인증을 검증하는 동작은, 원자 연산에서 수행되는, 장치.
  18. 차량의 하나 이상의 프로세서에 결합된 회로부에 의해 수행되는 방법으로서,
    상기 차량의 고유 식별자를 네트워크 서버에 전송하는 단계;
    상기 고유 식별자를 상기 네트워크 서버로 전송하는 것에 응답하여, 상기 네트워크 서버로부터, 상기 차량과 연계된 상기 하나 이상의 프로세서에 의한 실행을 위해 하나 이상의 제1 부트 파일에 관한 정보를 포함하는 제1 매니페스트 파일을 수신하는 단계;
    상기 제1 매니페스트 파일에 대해 특정된 버전 번호를 결정하는 단계;
    상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라고 결정한 경우에, 상기 제1 매니페스트 파일로부터 상기 제1 부트 파일에 관한 상기 정보를 획득하는 단계;
    상기 획득된 정보로부터, 상기 제1 매니페스트 파일이 나타내는 상기 하나 이상의 제1 부트 파일 각각의 가장 최신 버전이 상기 차량에 대해 로컬적으로 이용 가능한지 여부를 결정하는 단계;
    상기 제1 부트 파일의 가장 최신 버전이 상기 차량에 대해 로컬적으로 이용 가능한 버전과 상이하다는 결정에 따라, 네트워크 리소스로부터, 상기 제1 부트 파일의 가장 최신 버전을 획득하는 단계로서, 상기 네트워크 리소스로부터 상기 제1 부트 파일의 가장 최신 버전을 획득하는 상기 단계는, 제1 부트 파일 각각에 대해,
    상기 네트워크 리소스로부터 상기 제1 부트 파일의 가장 최신 버전을 수신할 때, 상기 제1 부트 파일이 상기 제1 매니페스트 파일에 의해 특정되는지 여부를 결정하는 단계, 및
    상기 제1 부트 파일이 상기 제1 매니페스트 파일에 의해 특정된 것으로 결정한 경우, 상기 제1 부트 파일을 유효 부트 파일로서 수락하는 단계
    를 포함하는, 상기 제1 부트 파일의 가장 최신 버전을 획득하는 단계; 및
    상기 제1 부트 파일의 가장 최신 버전 획득에 응답하여, 상기 하나 이상의 프로세서를 부팅하는 단계로서, 상기 하나 이상의 프로세서의 각각에 상기 제1 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제1 부트 파일의 가장 최신 버전을 제공하는 단계를 포함하는, 상기 하나 이상의 프로세서를 부팅하는 단계
    를 포함하고,
    상기 프로세서는 상기 제1 부트 파일의 인증을 검증하면 상기 제1 부트 파일을 실행하는, 회로부에 의해 수행되는 방법.
  19. 제18항에 있어서,
    상기 제1 매니페스트 파일로부터, 상기 차량에 대해 구성된 제2 매니페스트 파일에 관한 정보를 획득하는 단계로서, 상기 제2 매니페스트 파일은 상기 하나 이상의 프로세서에 의한 실행을 위해 제2 부트 파일에 관한 정보를 포함하는, 상기 제2 매니페스트 파일에 관한 정보를 획득하는 단계;
    상기 하나 이상의 프로세서가 상기 제1 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제1 부트 파일의 가장 최신 버전을 사용하여 성공적으로 부팅되었는지 여부를 결정하는 단계;
    상기 하나 이상의 프로세서가 성공적으로 부팅되었다는 결정에 따라, 상기 네트워크 서버로부터 상기 제2 매니페스트 파일을 획득하는 단계;
    상기 제2 매니페스트 파일에 대해 특정된 버전 번호를 결정하는 단계;
    상기 제2 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라고 결정한 경우, 상기 제2 매니페스트 파일로부터 상기 제2 부트 파일에 관한 상기 정보를 획득하는 단계;
    상기 획득된 정보로부터, 상기 제2 매니페스트 파일이 나타내는 상기 제2 부트 파일 각각의 가장 최신 버전이 차량에 대해 로컬적으로 이용 가능한지 여부를 결정하는 단계;
    상기 제2 부트 파일의 가장 최신 버전이 차량에 대해 로컬적으로 이용 가능한 버전과 상이하다는 결정에 따라, 네트워크 리소스로부터, 상기 제2 부트 파일의 가장 최신 버전을 획득하는 단계; 및
    상기 제2 부트 파일의 가장 최신 버전 획득에 응답하여, 상기 하나 이상의 프로세서의 각각에 상기 제2 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제2 부트 파일의 가장 최신 버전을 제공하는 단계
    를 더 포함하고,
    상기 프로세서는 상기 제2 부트 파일의 인증을 검증하면 상기 제2 부트 파일을 실행하는, 회로부에 의해 수행되는 방법.
  20. 제19항에 있어서, 상기 제1 매니페스트 파일은, 상기 하나 이상의 프로세서에 대해, 상기 차량의 동작 플랫폼에 대응하는 하드웨어 구성을 특정하는, 회로부에 의해 수행되는 방법.
  21. 제20항에 있어서, 상기 제1 부트 파일은, 상기 프로세서에 대응하는 하드웨어의 동작들(operations)을 관리하기 위한 프로그램, 상기 차량에 의해 실행되는 운영 체제에 대한 컴퓨트 플랫폼 초기화를 위한 소프트웨어, 상기 운영 체제에 대한 건강성 검증 소프트웨어, 센서 디바이스 드라이버 소프트웨어, 또는 센서 인터페이스 소프트웨어 중 하나 이상을 포함하는, 회로부에 의해 수행되는 방법.
  22. 제20항에 있어서, 상기 제2 매니페스트 파일은 상기 하나 이상의 프로세서에 대한 애플리케이션 레벨 구성을 특정하는, 회로부에 의해 수행되는 방법.
  23. 제22항에 있어서, 상기 제2 부트 파일은,
    상기 프로세서에 의해 애플리케이션 기능성을 제공하기 위한 프로그램, 또는
    상기 하나 이상의 프로세서에 대한 자율 주행, 센서 데이터 수집, 또는 테스트 시뮬레이션 중 하나 이상에 대한 애플리케이션 소프트웨어 중 하나 이상을 포함하는, 회로부에 의해 수행되는 방법.
  24. 제19항에 있어서, 상기 제2 매니페스트 파일에 관한 정보가 제1 시간에서 상기 제1 매니페스트 파일로부터 획득되고, 상기 방법은,
    상기 제1 매니페스트 파일로부터 제2 시간에 차량에 대해 구성된 제3 매니페스트 파일에 관한 정보를 획득하는 단계로서, 상기 제3 매니페스트 파일은 상기 하나 이상의 프로세서에 의한 실행을 위해 제3 부트 파일에 관한 정보를 포함하고, 상기 제2 시간은 상기 제1 시간과 상이하고, 상기 제3 매니페스트 파일은 상기 제2 매니페스트 파일과 상이한, 상기 제3 매니페스트 파일에 관한 정보를 획득하는 단계;
    상기 하나 이상의 프로세서가 상기 제1 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제1 부트 파일의 가장 최신 버전을 사용하여 성공적으로 부팅되었는지 여부를 결정하는 단계;
    상기 하나 이상의 프로세서가 성공적으로 부팅되었다는 결정에 따라, 상기 네트워크 서버로부터 상기 제3 매니페스트 파일을 획득하는 단계;
    상기 제3 매니페스트 파일에 대해 특정된 상기 버전 번호를 결정하는 단계;
    상기 제3 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라고 결정한 경우, 상기 제3 매니페스트 파일로부터 상기 제3 부트 파일에 관한 정보를 획득하는 단계;
    상기 획득된 정보로부터, 상기 제3 매니페스트 파일이 나타내는 상기 제3 부트 파일 각각에 대한 가장 최신 버전이 상기 차량에 대해 로컬적으로 이용 가능한지 여부를 결정하는 단계;
    상기 제3 부트 파일의 가장 최신 버전이 차량에 대해 로컬적으로 이용 가능한 버전과 상이하다고 결정할 때, 네트워크 리소스로부터 상기 제3 부트 파일의 가장 최신 버전을 획득하는 단계; 및
    상기 제3 부트 파일의 가장 최신 버전 획득에 응답하여, 상기 하나 이상의 프로세서 각각에 상기 제3 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제3 부트 파일의 가장 최신 버전을 제공하는 단계
    를 더 포함하고,
    상기 프로세서는 상기 제3 부트 파일의 인증을 검증하면 상기 제3 부트 파일을 실행하는, 회로부에 의해 수행되는 방법.
  25. 제24항에 있어서, 상기 제3 부트 파일 중 적어도 하나는 상기 제2 부트 파일과 별개이고,
    상기 제3 매니페스트 파일에 의해 특정된 상기 제3 부트 파일 중 하나 이상의 실행 순서가 상기 제2 매니페스트 파일에 의해 특정된 상기 제2 부트 파일 중 하나 이상의 실행 순서와 별개인, 회로부에 의해 수행되는 방법.
  26. 제18항에 있어서, 상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라는 것을 결정하는 단계는,
    상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호를 로컬적으로 저장된 버전 번호와 비교하는 단계; 및
    특정된 상기 버전 번호가 상기 로컬적으로 저장된 버전 번호와 동일하거나 그보다 크다는 것을 상기 비교 단계가 나타내는 경우, 상기 제1 매니페스트 파일을 유효한 것으로 검증하는 단계를 포함하고,
    대상체의 더 큰 버전 번호가 대상체의 더 최신 버전을 나타내는, 회로부에 의해 수행되는 방법.
  27. 제26항에 있어서, 상기 로컬적으로 저장된 버전 번호는 카운터 값을 포함하고, 상기 방법은,
    특정된 상기 버전 번호가 상기 로컬적으로 저장된 버전 번호보다 크다는 것을 상기 비교 단계가 나타내는 경우, 특정된 상기 버전 번호와 동일하도록 상기 카운터 값을 증가시키는 단계를 더 포함하고,
    상기 카운터 값은 상기 차량에 결합된 신뢰 플랫폼 모듈, 또는 차량에 결합된 프로그램 가능 메모리 모듈 중 하나에 의해 측정되는, 회로부에 의해 수행되는 방법.
  28. 제18항에 있어서, 상기 제1 부트 파일의 인증을 검증하면 상기 제1 부트 파일을 실행하는 단계는,
    상기 프로세서 중 적어도 하나에 대해, 각각의 제1 부트 파일을 수신할 때, 상기 네트워크 서버에 대응하는 신뢰 파티에 의해 서명되는 상기 제1 부트 파일 상의 암호 서명을 검증하는 단계;
    상기 암호 서명이 상기 신뢰 파티에 의해 서명된 것으로 검증되는 경우 상기 제1 부트 파일을 유효한 것으로 수락하는 단계; 및
    상기 제1 부트 파일을 유효한 것으로 수락할 때 상기 제1 부트 파일을 실행하는 단계를 포함하는, 회로부에 의해 수행되는 방법.
  29. 제18항에 있어서, 상기 제1 매니페스트 파일을 수신하는 단계 및 상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라는 것을 결정하는 단계는,
    상기 차량이 루트에서 진행하는 제1 시간에, 상기 네트워크 서버로부터 상기 제1 매니페스트 파일을 수신하는 단계; 및
    상기 차량이 지정된 위치에서 정지 위치에 있는, 상기 제1 시간 이후의 제2 시간에, 상기 제1 매니페스트 파일을 프로세싱하는 단계로서, 상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호의 유효성을 결정하는 단계를 포함하는, 상기 제1 매니페스트 파일을 프로세싱하는 단계
    를 포함하는, 회로부에 의해 수행되는 방법.
  30. 제18항에 있어서, 상기 고유 식별자를 상기 네트워크 서버에 전송하는 단계는,
    상기 네트워크 서버로부터, 상기 제1 매니페스트 파일의 업데이트된 버전이 상기 네트워크 서버에서 이용 가능하다는 통지를 수신하는 단계; 및
    상기 통지를 수신하는 것에 응답하여, 상기 네트워크 서버에 상기 고유 식별자를 전송하는 단계를 포함하는, 회로부에 의해 수행되는 방법.
  31. 제30항에 있어서, 상기 네트워크 서버로부터 상기 통지를 수신하는 단계 및 상기 고유 식별자를 상기 네트워크 서버에 전송하는 단계는,
    상기 차량이 루트에서 진행하는 제1 시간에, 상기 네트워크 서버로부터 상기 통지를 수신하는 단계; 및
    상기 차량이 지정된 위치에서 정지 위치에 있는, 상기 제1 시간 이후의 제2 시간에, 상기 고유 식별자를 상기 네트워크 서버에 전송하는 단계를 포함하는, 회로부에 의해 수행되는 방법.
  32. 삭제
  33. 제18항에 있어서,
    상기 제1 부트 파일이 상기 제1 매니페스트 파일에 의해 특정되지 않는다는 것을 결정한 경우,
    상기 제1 부트 파일을 거부하는 단계; 및
    상기 제1 매니페스트 파일을 거부하는 단계를 더 포함하는, 회로부에 의해 수행되는 방법.
  34. 제18항에 있어서, 상기 제1 부트 파일의 인증을 검증하면 상기 제1 부트 파일을 실행하는 단계는, 상기 제1 부트 파일의 인증을 검증하는 즉시 상기 제1 부트 파일을 실행하는 단계를 포함하고,
    상기 제1 부트 파일을 실행하고 상기 제1 부트 파일의 인증을 검증하는 단계는 원자 연산에서 수행되는, 회로부에 의해 수행되는 방법.
  35. 장치로서,
    차량의 하나 이상의 프로세서에 결합되고 상기 하나 이상의 프로세서에 대한 안전한 부트 프로세스를 관리하는 회로를 포함하고, 상기 회로는,
    상기 차량이 루트 상에서 진행하는 제1 시간에, 네트워크 서버로부터, 제1 매니페스트 파일의 업데이트된 버전이 상기 네트워크 서버에서 이용 가능하다는 통지를 수신하는 동작으로서, 상기 제1 매니페스트 파일은 상기 하나 이상의 프로세서에 의한 실행을 위해 하나 이상의 제1 부트 파일에 관한 정보를 포함하는, 통지를 수신하는 동작;
    상기 통지를 수신하는 것에 응답하여, 상기 차량이 지정된 위치에서 정지 위치에 있는, 상기 제1 시간 이후의 제2 시간에, 상기 차량의 고유 식별자를 상기 네트워크 서버에 전송하는 동작;
    상기 고유 식별자를 상기 네트워크 서버에 전송하는 동작에 응답하여, 상기 하나 이상의 프로세서에 의한 실행을 위해 상기 하나 이상의 제1 부트 파일에 관한 상기 정보를 포함하는 상기 제1 매니페스트 파일을 상기 네트워크 서버로부터 수신하는 동작;
    상기 제1 매니페스트 파일에 대해 특정된 버전 번호를 결정하는 동작;
    상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라고 결정한 경우에, 상기 제1 매니페스트 파일로부터 상기 제1 부트 파일에 관한 상기 정보를 획득하는 동작;
    상기 획득된 정보로부터, 상기 제1 매니페스트 파일이 나타내는 상기 하나 이상의 제1 부트 파일 각각의 가장 최신 버전이 상기 장치에 대해 로컬적으로 이용 가능한지 여부를 결정하는 동작;
    상기 제1 부트 파일의 가장 최신 버전이 상기 장치에 대해 로컬적으로 이용 가능한 버전과 상이하다는 결정에 따라, 네트워크 리소스로부터, 상기 제1 부트 파일의 가장 최신 버전을 획득하는 동작; 및
    상기 제1 부트 파일의 가장 최신 버전 획득에 응답하여, 상기 하나 이상의 프로세서를 부팅하는 동작으로서, 상기 하나 이상의 프로세서의 각각에 상기 제1 매니페스트 파일 및 상기 프로세서에 대응하는 상기 제1 부트 파일의 가장 최신 버전을 제공하는 동작을 포함하는, 상기 하나 이상의 프로세서를 부팅하는 동작
    을 포함하는 동작들(operations)을 수행하고,
    상기 프로세서는 상기 제1 부트 파일의 인증을 검증하면 상기 제1 부트 파일을 실행하는, 장치.
  36. 차량의 하나 이상의 프로세서에 결합된 회로부에 의해 수행되는 방법으로서,
    상기 차량이 루트에서 진행하는 제1 시간에, 네트워크 서버로부터, 제1 매니페스트 파일의 업데이트된 버전이 상기 네트워크 서버에서 이용 가능하다는 통지를 수신하는 단계로서, 상기 제1 매니페스트 파일은 상기 하나 이상의 프로세서에 의한 실행을 위해 하나 이상의 제1 부트 파일에 관한 정보를 포함하는, 통지를 수신하는 단계;
    상기 통지를 수신하는 것에 응답하여, 상기 차량이 지정된 위치에서 정지 위치에 있는, 상기 제1 시간 이후의 제2 시간에, 상기 차량의 고유 식별자를 상기 네트워크 서버에 전송하는 단계
    상기 고유 식별자를 상기 네트워크 서버로 전송하는 것에 응답하여, 상기 하나 이상의 프로세서에 의한 실행을 위해 상기 하나 이상의 제1 부트 파일에 관한 정보를 포함하는 상기 제1 매니페스트 파일을 상기 네트워크 서버로부터 수신하는 단계;
    상기 제1 매니페스트 파일에 대해 특정된 버전 번호를 결정하는 단계;
    상기 제1 매니페스트 파일에 대해 특정된 상기 버전 번호가 유효한 버전이라고 결정한 경우에, 상기 제1 매니페스트 파일로부터 상기 제1 부트 파일에 관한 상기 정보를 획득하는 단계;
    상기 획득된 정보로부터, 상기 제1 매니페스트 파일이 나타내는 상기 하나 이상의 제1 부트 파일 각각의 가장 최신 버전이 상기 차량에 대해 로컬적으로 이용 가능한지 여부를 결정하는 단계;
    상기 제1 부트 파일의 가장 최신 버전이 상기 차량에 대해 로컬적으로 이용 가능한 버전과 상이하다는 결정에 따라, 네트워크 리소스로부터, 상기 제1 부트 파일의 가장 최신 버전을 획득하는 단계; 및
    상기 제1 부트 파일의 가장 최신 버전 획득에 응답하여, 상기 하나 이상의 프로세서를 부팅하는 단계로서, 상기 하나 이상의 프로세서의 각각에 상기 제1 매니페스트 파일 및 프로세서에 대응하는 상기 제1 부트 파일의 가장 최신 버전을 제공하는 단계를 포함하는, 상기 하나 이상의 프로세서를 부팅하는 단계
    를 포함하고,
    상기 프로세서는 상기 제1 부트 파일의 인증을 검증하면 상기 제1 부트 파일을 실행하는, 회로부에 의해 수행되는 방법.
KR1020200039896A 2019-04-02 2020-04-01 차량용 프로세서의 안전한 부트 KR102379110B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020220034660A KR102549270B1 (ko) 2019-04-02 2022-03-21 차량용 프로세서의 안전한 부트

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201962828019P 2019-04-02 2019-04-02
US62/828,019 2019-04-02

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020220034660A Division KR102549270B1 (ko) 2019-04-02 2022-03-21 차량용 프로세서의 안전한 부트

Publications (2)

Publication Number Publication Date
KR20200117889A KR20200117889A (ko) 2020-10-14
KR102379110B1 true KR102379110B1 (ko) 2022-03-25

Family

ID=70768792

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020200039896A KR102379110B1 (ko) 2019-04-02 2020-04-01 차량용 프로세서의 안전한 부트
KR1020220034660A KR102549270B1 (ko) 2019-04-02 2022-03-21 차량용 프로세서의 안전한 부트

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020220034660A KR102549270B1 (ko) 2019-04-02 2022-03-21 차량용 프로세서의 안전한 부트

Country Status (5)

Country Link
US (2) US11222121B2 (ko)
KR (2) KR102379110B1 (ko)
CN (1) CN111814199A (ko)
DE (1) DE102020109191A1 (ko)
GB (2) GB2585432B (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11288373B2 (en) * 2019-04-11 2022-03-29 Baidu Usa Llc Boot failure recovery scheme for hardware-based system of autonomous driving vehicles
US11436334B2 (en) * 2020-09-30 2022-09-06 Dell Products L.P. Systems and methods for securing operating system applications with hardware root of trust
TW202225997A (zh) * 2020-12-30 2022-07-01 瑞昱半導體股份有限公司 程式專案的版本控管方法與相關電子裝置
CN112765678A (zh) * 2020-12-30 2021-05-07 南京南瑞继保工程技术有限公司 一种电力市场安全校核方法及系统
US20220294770A1 (en) * 2021-03-11 2022-09-15 Blackberry Limited Method and system for performing identity checks in a distributed system
DE102021123358B3 (de) 2021-09-09 2022-10-20 Volkswagen Aktiengesellschaft Steuervorrichtung, Steuerverfahren und Computerprogramm für eine Verteilung von Rechen-Funktionsblöcken auf Recheneinheiten eines Fahrzeugs
DE102021125750A1 (de) 2021-10-05 2023-04-06 Volkswagen Aktiengesellschaft Recheneinheit für ein Fahrzeug und Verfahren und Computerprogramm für eine Recheneinheit für ein Fahrzeug
CN114461289A (zh) * 2022-02-21 2022-05-10 重庆长安汽车股份有限公司 一种远程开启车载信息娱乐系统adb工具的方法及系统
DE102022205299A1 (de) 2022-05-25 2023-11-30 Lenze Se Verfahren zur Versionsverwaltung von Firmware für Komponenten der funktionalen Sicherheit und elektrisches Gerät

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130185563A1 (en) 2012-01-12 2013-07-18 Gueorgui Djabarov Multiple System Images for Over-The-Air Updates
US20130301821A1 (en) 2007-06-25 2013-11-14 International Business Machines Corporation Systems and arrangements for communicating with an automated interactive telecommunications service system
US20140109076A1 (en) * 2012-10-16 2014-04-17 Pieter-Jan Boone Secure, non-disruptive firmware updating
US20150331686A1 (en) * 2014-05-15 2015-11-19 Ford Global Technologies, Llc Over-the-air vehicle issue resolution

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030093508A1 (en) * 2001-10-18 2003-05-15 Seiko Epson Corporation System for installing and launching network applications
RU2375769C2 (ru) * 2004-03-10 2009-12-10 Сони Эрикссон Мобайл Коммьюникейшнз Аб Автоматическое резервное сохранение при модификациях встроенного программного обеспечения
US7398382B2 (en) * 2004-12-29 2008-07-08 Intel Corporation Method and apparatus to enhance platform boot efficiency
US20070067410A1 (en) * 2005-09-20 2007-03-22 Mulligan Bryan P Method and apparatus for the surveillance, monitoring, management and control of vehicular traffic
US9152432B2 (en) * 2008-06-30 2015-10-06 Intel Corporation System and method to accelerate access to network data using a networking unit accessible non-volatile storage
EP2614654B1 (en) * 2010-09-07 2018-12-19 Samsung Electronics Co., Ltd Manifest mechanism in broadcast involved system
KR20120062539A (ko) * 2010-12-06 2012-06-14 현대자동차주식회사 텔레매틱스 서버와 연결된 무선인터넷 공유기를 이용하는 차량정보 업데이트 시스템 및 그 방법
PL2798816T3 (pl) * 2011-12-29 2016-11-30 Inicjowane sieciowo sterowanie strumieniowego przesyłania zawartości
US9342243B2 (en) * 2012-11-28 2016-05-17 Lenovo (Beijing) Co., Ltd. Method and electronic apparatus for implementing multi-operating system
US9436456B2 (en) 2014-04-17 2016-09-06 Myine Electronics, Inc. System and method for management of software updates at a vehicle computing system
GB2527569B (en) * 2014-06-26 2016-06-08 Ibm Booting a computer from a user trusted device with an operating system loader stored thereon
US10735546B2 (en) * 2015-06-29 2020-08-04 Vid Scale, Inc. Dash caching proxy application
WO2017038353A1 (ja) * 2015-08-28 2017-03-09 ソニー株式会社 受信装置、送信装置、およびデータ処理方法
KR101744717B1 (ko) * 2015-10-28 2017-06-21 현대오트론 주식회사 다수의 차량에 대한 리프로그래밍 방법
US9958864B2 (en) 2015-11-04 2018-05-01 Zoox, Inc. Coordination of dispatching and maintaining fleet of autonomous vehicles
US10002082B2 (en) * 2016-02-19 2018-06-19 Ford Global Technologies, Llc Method and apparatus for cyclical key-off file replacement
CN108243141A (zh) * 2016-12-23 2018-07-03 乐视汽车(北京)有限公司 车辆终端程序升级方法、装置和车辆终端
US10956615B2 (en) * 2017-02-17 2021-03-23 Microsoft Technology Licensing, Llc Securely defining operating system composition without multiple authoring
US11019126B2 (en) * 2017-06-23 2021-05-25 Nokia Solutions And Networks Oy Quality-of-experience for adaptive bitrate streaming
US10810311B2 (en) * 2017-09-21 2020-10-20 Samsung Electronics Co., Ltd. Internet-of-things module
WO2019111033A1 (en) * 2017-12-04 2019-06-13 Telefonaktiebolaget Lm Ericsson (Publ) Automatic provisioning of streaming policies for video streaming control in cdn
US10817378B2 (en) * 2018-07-24 2020-10-27 Dell Products, L.P. Managing boot failures in an information handling system
US11329983B2 (en) 2019-03-25 2022-05-10 Micron Technology, Inc. Validating an electronic control unit of a vehicle
US11580152B1 (en) * 2020-02-24 2023-02-14 Amazon Technologies, Inc. Using path-based indexing to access media recordings stored in a media storage service

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130301821A1 (en) 2007-06-25 2013-11-14 International Business Machines Corporation Systems and arrangements for communicating with an automated interactive telecommunications service system
US20130185563A1 (en) 2012-01-12 2013-07-18 Gueorgui Djabarov Multiple System Images for Over-The-Air Updates
US20140109076A1 (en) * 2012-10-16 2014-04-17 Pieter-Jan Boone Secure, non-disruptive firmware updating
US20150331686A1 (en) * 2014-05-15 2015-11-19 Ford Global Technologies, Llc Over-the-air vehicle issue resolution

Also Published As

Publication number Publication date
GB202118972D0 (en) 2022-02-09
GB2604437B (en) 2023-12-13
CN111814199A (zh) 2020-10-23
GB2585432B (en) 2022-02-16
DE102020109191A1 (de) 2020-10-08
US20220237299A1 (en) 2022-07-28
GB2604437A (en) 2022-09-07
GB202004873D0 (en) 2020-05-20
KR102549270B1 (ko) 2023-06-28
GB2604437A8 (en) 2022-10-12
US11222121B2 (en) 2022-01-11
US20200320201A1 (en) 2020-10-08
GB2585432A (en) 2021-01-13
KR20220054549A (ko) 2022-05-03
KR20200117889A (ko) 2020-10-14

Similar Documents

Publication Publication Date Title
KR102379110B1 (ko) 차량용 프로세서의 안전한 부트
US11469906B2 (en) Systems and methods for implementing data security
US11785463B2 (en) Device provisioning and authentication
KR102617601B1 (ko) 사이버 보안 프로토콜
US20200314089A1 (en) Vehicle Integration Platform (VIP) Security Integration
US20220201000A1 (en) Security gateway
US11699310B2 (en) Blockchain ledger validation and service
US11513488B2 (en) Controlling power of electronic devices on a vehicle
US11535112B2 (en) Managing power of electronic devices on a vehicle
US11792014B2 (en) Systems and methods for vehicle message signing

Legal Events

Date Code Title Description
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant