개요
https://optee.readthedocs.io 문서를 구글 번역기 + 네이버번역기를 이용하여 번역하였습니다.
즉, 기계가 번역한 내용이므로 대략적인 내용은 확인가능합니다. 제대로 보시려면 원문을 보시길 권유드립니다.
글순서
- [OPTEE 문서번역] OPTEE GettingStarted
- [OPTEE 문서번역] OPTEE Architecture - 1 Core
- [OPTEE 문서번역] OPTEE Architecture - 2 Crypt
- [OPTEE 문서번역] OPTEE Architecture - 3 Device Tree
- [OPTEE 문서번역] OPTEE Architecture - 4 File structure
- [OPTEE 문서번역] OPTEE Architecture - 5 GlobalPlatform API
- [OPTEE 문서번역] OPTEE Architecture - 6 Libraries API
- [OPTEE 문서번역] OPTEE Architecture - 7 Porting Guide
- [OPTEE 문서번역] OPTEE Architecture - 8 Secure Boot
- [OPTEE 문서번역] OPTEE Architecture - 9 Secure storage
- [OPTEE 문서번역] OPTEE Architecture - 10 Trusted Applications
- [OPTEE 문서번역] OPTEE Architecture - 11 Virtualization
3. Device Tree
OP-TEE 코어는 device tree 형식을 사용하여 플랫폼을 초기화하는 동안 플랫폼 구성 정보를 주입하고 일부 런타임 컨텍스트를 주입 할 수 있습니다.
device tree 기술을 사용하면 DTS 파일이라는 ASCII 소스 파일의 플랫폼을 설명 할 수 있습니다. 이것들은 플랫폼 초기화 중에 예상되는 구성 설정을 적용하기 위해 플랫폼 부트 미디어에 내장 된 플랫폼 설명 이진 이미지 (소위 DTB)를 생성하는 데 사용할 수 있습니다.
이 방법은 C 소스 파일을 수정하거나 빌드 환경에서 구성 지시문을 추가하지 않고 대부분의 특정 플랫폼 하드웨어를 튜닝 할 수 있으므로 OP-TEE 코어 구현의 설계 제약을 완화합니다.
3.1. Secure and Non-Secure Device Trees
대상 시스템에는 여러 가지 장치 트리가 포함될 수 있으며 일부는 부팅 단계에서 공유 될 수 있습니다.
- 부트 로더 단계는 모든 부트 단계에서 메모리의 device tree 구조를 로드하여 플랫폼 구성을 가져올 수 있습니다. 그러한 장치 트리 데이터가 비보안 세계에 의해 액세스되는 경우 비보안 메모리에 위치해야한다. 보안 세계는 OP-TEE 코어 초기화 중에 그 내용을 사용할 수 있습니다.
- 부트 로더 단계는 보안 세계를 위해서만 device tree 구조를 보안 메모리에로드 할 수 있습니다. 이러한 device tree blob은 보안 메모리에 위치해야한다. 보안 세계는 콘텐츠를 사용할 수 있지만 현재 OP-TEE 최신 버전에서는 구현되지 않았습니다.
- OP-TEE 코어는 또한 플랫폼을 설명하기위한 device tree 구조를 내장 할 수 있습니다.
- 비보안 세계는 자신의 장치 device tree 를 임베드 할 수 있고 / 또는 보안 세계가 부팅되기 전에 초기화되는 동안 보안 세계에 의해로드 된 장치 트리 구조에 의존 할 수 있습니다.
분명히 비보안 세계는 액세스 할 수없는 보안 메모리에있는 장치 트리 이미지에 액세스 할 수 없습니다.
OP-TEE 코어가CFG_DT = y
로 구축 될 때 OP-TEE 코어가 비보안 및 보안 device tree 에 액세스하여 플랫폼 구성 정보를 얻을 수 있습니다.
3.2. Generic boot and DTBs
일반 부팅 순서는 기본 부팅 주소 (기본 Early boot external device tree)로 기본 메모리 주소 범위를 검색합니다 (Embedded Secure Device Tree 섹션 참조).
일반 부팅은 초기 부팅 외부 DTB (섹션 Early boot external device tree)를 사용하여 플랫폼 구성 정보를 비보안 세계와 공유합니다.
Plaform과 드라이버는 임베디드 및 / 또는 외부 DTB에 액세스하기 위해 OP-TEE DT API (core/include/kernel/dt.h
)를 호출 할 수 있습니다.
3.3. Early boot external device tree
부트 로더는 부팅시 OP-TEE 코어에 인수를 제공합니다. 그 중 OP-TEE 코어에서 액세스 할 수있는 비보안 장치 트리 이미지의 물리적 메모리 기본 주소 또는 이러한 DTB가없는 경우 null 주소 값.
플랫폼 구성은 빌드 구성 지시문CFG_DT_ADDR
을 사용하여 DTB 위치를 정적으로 정의 할 수 있습니다.
외부 DTB가 참조 될 때, 플랫폼이 정의 된const struct dt_driver
인스턴스에__dt_driver
속성을 추가하여 호환 가능한 드라이버를 등록하면 OP-TEE 코어는 콘솔 설정을 얻습니다.
외부 DTB가 참조 될 때 OP-TEE 코어는이 DTB에 OP-TEE 자원에 대한 설명을 추가합니다. 이러한 정보는 OP-TEE와 제대로 통신하기 위해 비보안 세계에서 사용할 수 있습니다. 이 체계는 이미지가 비보안 메모리에 있다고 가정합니다.
초기 부팅에서 제공되고 비보안 세계로 전달되는 비보안 장치 트리 이미지에서 OP-TEE 코어에 의해 수정 된 내용은 다음과 같습니다.
- 관련 호출 매개 변수가없는 경우 OP-TEE 노드를 추가하십시오.
- 보안 세계에 예약되고 비보안 세계가 액세스하지 않는 소수의 메모리 영역에 대해 예약 된 메모리 노드를 추가합니다.
- PSCI 설명 노드가 없으면 추가하십시오.
조기 부팅 DTB는 DTB 메모리 위치가 런타임 컨텍스트 컨텐트로 대체되었을 가능성이 있으므로 안전하지 않은 세계 부팅이 발생하기 전에 OP-TEE 코어가 초기화하는 동안에 만 액세스 할 수 있습니다.
임베디드 DTB (섹션 Embedded Secure Device Tree 섹션)가 없다고 가정하면 OP-TEE 코어는 비보안 DTB의 주 메모리 주소 범위를 발견합니다.
3.4. Early boot device tree overlay
OP-TEE 코어가 비보안 세계에 device tree 오버레이를 제공하는 두 가지 가능성이 있습니다.
- 초기 부팅 DTB에있는 기존 DTB 오버레이에 OP-TEE 노드를 추가합니다. (
CFG_DT_ADDR
또는 부트 인자 레지스터R2
/X2
).CFG_DT_ADDR
에 의해 정의 된 위치에 새로운 DTB 오버레이 이미지를 생성하십시오.
후자의 경우, 설정 지시어CFG_DT_ADDR
에 의해 참조 된 메모리는 OP-TEE 코어가 부팅 될 때 유효한 DTB 이미지를 포함하지 않아야한다. 후속 비보안 부팅 단계는 OP-TEE DTB 오버레이 이미지를 다른 DTB로 병합해야합니다.
A typical bootflow for this would be Trusted Firmware-A -> OP-TEE -> U-Boot with U-Boot in charge of merging OP-TEE DTB overlay located at CFG_DT_ADDR
into a DTB U-Boot has loaded from elsewhere.
이 기능은CFG_EXTERNAL_DTB_OVERLAY = y
일 때 활성화됩니다.
3.5. Embedded Secure Device Tree
OP-TEE 코어가 설정 지시자CFG_EMBED_DTB=y
에 의해 만들어지면CFG_EMBED_DTB_SOURCE_FILE
지시자는 DTB가 생성되는core/arch/$(ARCH)/dts
디렉토리 안에 DTS 파일의 상대 경로를 제공하고 OP-TEE 코어의 읽기 전용 섹션에 내장
embedded DTB에 접근하기위한 API는 core/include/kernel/dt.h
를 참조하십시오.
섹션 Generic boot and DTBs 는 내장 된 DTB에 대한 일반 부팅 순서를 문서화합니다.