OPTEE Project Q&A

안녕하세요, topst 매니저입니다.

D3-G 보드에 OPTEE를 사용함에 있어 질문주신 내용에 답변 드립니다.
추가 질문은 해당 게시물에 남겨주시면 됩니다.

A. TrustZone / OP-TEE 지원 및 부팅 체인 구성 가능 여부

  1. D3-G에서 ARM TrustZone을 실제로 활성화해 사용할 수 있나요?
    → 네, 가능합니다. D3-G에 탑재된 Cortex-A 프로세서는 하드웨어 수준에서 ARM TrustZone 기능을 이미 내장하고 활성화되어 있으므로, 별도의 추가 조치 없이 즉시 사용하실 수 있습니다.

  2. 단순 CPU 기능 차원이 아니라, Secure World 부팅 및 TA 실행까지 가능한가요?
    → Secure World 부팅 및 TA 실행까지 가능합니다.

  3. ATF + OP-TEE + U-Boot + Linux/Android 부팅 체인 구성이 가능한가요?
    → BL1/Bl2 → BL31(TF-A) → BL32(OP-TEE) → BL33(U-Boot) → Linux/Android 구성으로 지원하고 있습니다. 현재 TOPST D3-G 보드는 Linux 환경에 가장 최적화되어 있습니다. 따라서 안정적인 개발을 위해 Android보다는 Linux 기반으로 부팅 체인을 구성하시는 것을 적극 권장합니다.

  4. Secure Monitor Call(SMC) 경로와 secure/non-secure 메모리 구성이 이미 준비되어 있나요?
    → 네, 이미 준비되어 있습니다. TF-A(Trusted Firmware-A) 내의 OP-TEE Dispatcher를 통해 Secure World와 Non-secure World 간의 SMC 통신 경로가 확립되어 있습니다.

B. TEE 연동 구조 및 CA–TA 통신 지원 여부

  1. Linux 또는 Android BSP에서 TEE Client API 사용이 가능한가요?
    → 네, 가능합니다. OP-TEE 스택의 표준 구조인 사용자 공간의 OP-TEE client (libteec) 와 커널 공간의 OP-TEE 드라이버를 통해, Linux와 Android 환경 모두에서 TEE Client API(GlobalPlatform) 사용 가능 합니다.

  2. CA(Client Application) ↔ TA(Trusted Application) 통신 예제가 있나요?
    → 예제의 경우 OP-TEE git 에서 확인 가능합니다.
    linaro-swg/optee_examples: OP-TEE Sample Applications

  3. shared memory 기반 파라미터 전달, 세션 생성, command invoke 흐름 예제가 있나요?
    → 네, 앞서 안내해 드린 OP-TEE 공식 예제들에서 해당 흐름을 구체적으로 확인하실 수 있습니다. 통신은 다음의 시퀀스로 진행됩니다.

    TEEC_InitializeContext -> OpenSession -> InvokeCommand -> CloseSession
    
  4. 호출 latency나 성능 제약이 어느 정도인지 자료가 있나요?
    → 관련 자료는 따로 없습니다.

  5. secure storage, RPMB, key handling 같은 기능도 함께 지원하나요?
    → OP-TEE 표준 기능으로, Secure Storage(REE-FS/RPMB-FS), RPMB(eMMC 기반), key handling(PTA crypto, HUK 기반 key derivation)을 지원합니다.

C. IVI / Cluster 통합 구조에서의 격리 수준

  1. D3-G 하나의 SoC 내에서 IVI와 Cluster를 논리적으로 분리할 수 있나요?
    → 칩셋 하드웨어 구조상 Main-core와 Sub-core를 분리하여 IVI와 Cluster에 각각 할당할 수 있습니다. 하지만 현재 제공되는 D3-G 보드 환경은 Main-core 단일 운영만을 지원하고 있으므로, 하나의 SoC 내에서 두 시스템을 논리적으로 완벽히 분리하여 구동하는 것은 어렵습니다.

  2. Hypervisor 또는 domain partitioning을 지원하나요?
    → D3-G의 경우 “Hypervisor-less” 구조라 기본 제공되지는 않습니다.

  3. 메모리, CPU 코어, 장치 접근 권한을 domain별로 나눌 수 있나요?
    → 현재 지원 구조상 불가능합니다. 보안 영역인 Secure World는 TF-A의 OP-TEE Dispatcher(opteed)를 통해 단일 도메인으로 구성되어 있습니다. 또한, 앞서 말씀드린 대로 D3-G 환경 자체가 Main-core 단일 지원 구조를 띠고 있어, 메모리나 CPU 코어, 하드웨어 디바이스에 대한 접근 권한을 개별 도메인별로 세분화하여 할당하는 것은 제약이 따릅니다.

  4. display path 분리 또는 trusted display path 구성이 가능한가요?
    → 시스템 차원에서의 개념적/물리적인 구성 자체는 가능합니다만, 벤더 차원에서 제공되는 기본 솔루션이나 가이드는 없습니다.

  5. IVI가 compromise된 상황에서도 Cluster 출력을 보호할 수 있는 권장 구조가 있나요?
    → 출력장치에 대한 권한 제어를 해야 하는 것이라 OPTEE만 사용해 보호할 수 있는 방안은 제약적입니다.
    다만, TA를 적절히 개발 운영하면 Compromise된 상황을 detect 하고 추가 조치를 할 수 있는 방안은 생각해 볼 수 있을 것 같습니다.

D. OS별 지원 우선순위

  1. D3-G에서 가장 안정적으로 제공되는 Normal World OS는 무엇인가요?
    → 현재 D3-G 보드에서 가장 안정적으로 제공 및 구동되는 Normal World OS는 Linux입니다. Android OS는 공식적으로 지원하고 있지 않습니다.

  2. Linux / AAOS / QNX 각각의 BSP 지원 수준은 어느 정도인가요?
    → TOPST 개발자 커뮤니티를 통해 관련 기술 지원 및 가이드를 제공해 드리고 있습니다. AAOS(Android Automotive OS) 및 QNX에 대한 BSP는 현재 지원하지 않습니다.

  3. OP-TEE와 연동할 때 가장 현실적인 조합은 무엇인가요?
    ‘OP-TEE 업스트림(공식 GitHub) + Linux OS’ 조합으로 구성하는 것이 가장 현실적이고 안정적인 개발 환경입니다.

  4. QNX와 Secure World 연동 사례가 있는지 궁금합니다.
    → 앞서 말씀드린 바와 같이 현재 D3-G 보드에서는 QNX 운영체제를 지원하지 않기 때문에, QNX 환경에서의 Secure World 연동 사례나 제공 가능한 레퍼런스는 존재하지 않습니다.

E. 포팅 / 디버깅 지원 범위

  1. 벤더 차원에서 OP-TEE 포팅 자체를 지원하나요?
    → 아니요, 벤더 차원의 별도 포팅 지원은 제공하지 않습니다. D3-G 보드는 OP-TEE 공식 업스트림 코드를 직접 가져와 적용할 수 있는 환경이므로, 제공된 기반 환경 위에서 오픈소스를 활용해 직접 포팅 및 빌드를 진행해 주셔야 합니다.

  2. UART / JTAG / early boot log / secure world log 확인 방법이 제공되나요?
    → 보드에 마련된 UART 인터페이스를 통해 시스템 디버깅 로그 자체는 정상적으로 출력되며 확인이 가능합니다. 다만, 해당 로그를 분석하거나 디버깅하는 방법에 대한 벤더 측의 별도 가이드 문서는 제공되지 않습니다.

  3. TA 개발, 배포, 디버깅 절차 문서가 있나요?
    → 벤더에서 자체적으로 작성한 TA 개발, 배포, 디버깅 전용 매뉴얼은 따로 없습니다. TA 관련 개발은 앞서 안내해 드린 OP-TEE 공식 GitHub의 예제(Examples) 코드들을 레퍼런스로 삼아 진행해 주시기를 바랍니다.

  4. secure boot / ATF / OP-TEE 단계별 로그 분석 지원이 가능한가요?
    → 부팅 단계별 세부 로그 분석 및 트러블슈팅에 대한 기술 지원은 제공해 드리기 어렵습니다.

  5. 기술 문서, BSP 소스, 보안 문서 제공에 NDA가 필요한지 궁금합니다.
    → 관련 문서는 NDA가 필요합니다. OP-TEE 관련 자료는 OP-TEE 홈페이지와 Github를 통해서 받을 수 있으며, 아래 자료를 참고하시면 됩니다.
    문서: OP-TEE Documentation — OP-TEE documentation documentation
    소스: OP-TEE · GitHub


개발을 위해서는 공식 GitHub의 OP-TEE 코드를 빌드하고, 생성된 이미지를 보드에 플래싱(FWDN, Firmware Download)하는 과정이 필요하실 것으로 생각됩니다.

FWDN은 내부에서 확인 후 댓글에 추가로 가이드 드리도록 하겠습니다.

감사합니다.

안녕하세요. OPTEE FWDN 가이드 안내 드립니다.

기존 FWDN 시, FWDN 폴더(fai image가 들어있는 폴더)에 boot-firmware/prebuilt/ 경로로 들어가시면 prebuilt된 rom파일들이 있습니다.
여기서 아래 rom파일들을 기존 파일 변경 후 fwdn진행 부탁드립니다.

  1. optee.rom dummy 파일
    기존 존재하던 optee.rom dummy파일을 삭제 혹은 이름 변경 후, github 업스트림 optee source code 빌드 결과물인 optee.rom파일로 대체 (optee.rom파일을 boot-firmware/prebuilt/ 경로로 복사)
  2. ca72_bl1.rom, ca72_bl2.rom 파일
    기존 존재하던 ca72_bl1.rom, ca72_bl2.rom 파일을 공유 드리는 ca72_bl1.rom, ca72_bl2.rom 파일로 대체
    ca72_bl1.rom
    ca72_bl2.rom

이후 기존 fwdn을 하듯이 .bat 배치파일을 실행해주시면 됩니다.

감사합니다.

안녕하세요
해당 op-tee 프로젝트 진행하고 있는 국민대 학생입니다.
알려주신 방법으로 빌드를 진행하였습니다.
make -j$(nproc) \ PLATFORM=telechips-tcc805x \ CROSS_COMPILE=aarch64-linux-gnu- \ CROSS_COMPILE_core=aarch64-linux-gnu- \ CROSS_COMPILE_ta_arm32=arm-linux-gnueabihf- \ CROSS_COMPILE_ta_arm64=aarch64-linux-gnu- \ CFG_TEE_CORE_LOG_LEVEL=3 \ O=out/tcc805x

해당 명령어를 통해서 optee rom 파일을 빌드하였고
기존 존재하던 파일들도 다 대체한 뒤 bat 배치파일을 실행하였습니다.

image
그러나 디버깅 애초에 config 파일에서 tee 설정이 y로 되어있지 않아 yocto Linux가 TEE를 인식하지 못하는 문제를 확인하였습니다.

그래서 두가지 질문을 드리려고 합니다.

  1. 해당 명령어를 통해 optee rom 을 빌드해도 괜찮은지 ?
  2. 커널에서의 config 파일에서 tee 설정을 y로 하기 위해서는 어떻게 해야돼는지?
    답변 주시면 감사하겠습니다.

항상 고생많으십니다!

안녕하세요.
해당 문의에 답변 드립니다.

사용자의 목적에 맞도록 빌드 옵션을 추가하여야 하기에, 명령어에 대한 가이드를 드릴 수는 없을 것 같습니다.
제가 검증했던 명령어는 아래와 같습니다.

$ make PLATFORM=telechips-tcc805x CFG_REE_FS_ALLOW_RESET=y \
    CFG_TEE_CORE_LOG_LEVEL=0 CFG_ENABLE_EMBEDDED_TESTS=y \
    CROSS_COMPILE=arm-none-linux-gnueabihf- CROSS_COMPILE64=aarch64-none-linux-gnu- \
    -j4

참고 부탁드립니다.

yocto에서 kernel config를 활성화해준 뒤 재빌드가 필요합니다.
우선 poky/meta-topst/recipes-kernel/linux/linux-topst/에 optee.cfg파일을 생성하고, 아래와 같이 config를 y로 설정합니다.

CONFIG_TEE=y
CONFIG_OPTEE=y

이후
poky/meta-topst/recipes-kernel/linux/linux-topst_%.bbappend 파일에서 SRC_URI:append:tcc805x
에 아래와 같이 한 줄 추가해주시면 됩니다.

file://optee.cfg \ 

다음 kernel만 컴파일을 합니다.

source poky/meta-topst/topst-build.sh  // 2번 선택
bitbake -C compile linux-topst

다음 생성된 커널 img 바이너리파일을 fwdn폴더로 옮긴 후, 아래 명령어로 보드에 fwdn합니다.

./fwdn.exe --fwdn boot-firmware/fwdn.json --write 커널이미지.img --storage emmc --area user --part boot

감사합니다.

1 Like