SlideShare a Scribd company logo
1 of 35
Download to read offline
Presented by
Date
HKG15-311:OP-TEE Basics
and Porting Review
Victor Chong
2015-2-9
Objectives
● Security Building Blocks
● Secure Boot
● Introduction to Trusted Applications
● OP-TEE Porting
OP-TEE
● Open-source Portable TEE
● Sponsored by ST
● GlobalPlatform (GP) compatible
● Compatible with ARM-TF
● Complete system
Security Building Blocks
● TrustZone-enabled chipset (Hardware)
● ARM Trusted Firmware aka ARM-TF (Firmware)
● Boot Services
● Run-time Services
● OP-TEE (OS)
● Client library (libteec.so)
● Driver (optee.ko)
● Trusted OS
● Client Applications
● OP-TEE Clients (Normal World)
● Trusted Applications (Secure World)
Security Building Blocks
Security Building Blocks
Secure Boot
● Prevent unauthorized executables from booting by verifying image
signatures
● Divided into stages
● Start with trusted source (ROM boot code) @ stage/level 1
● Root of Trust
● Every subsequent image (stage/level) to be loaded is verified first
by the one before it
● Chain of Trust
Secure Boot
Introduction to Trusted Applications
A Trusted Application typically consists of two parts
● Linux user space, client implementation
● Secure world Trusted Application (TA)
Introduction to Trusted Applications
Introduction to Trusted Applications
Typical normal world program flow based on GP Client API
● TEEC_InitializeContext
● Connect to the OP-TEE Linux driver
● TEEC_OpenSession
● Loads the TA
● TEEC_InvokeCommand
● Control TA functions
● TEEC_CloseSession
● TEEC_FinalizeContext
Hello World Example
root@host:/ hello_world
TEEC_InitializeContext
TEEC_OpenSession
TEEC_InvokeCommand(TA_HELLO_WORLD_CMD_INCVALUE)
TEEC_InvokeCommand(TA_HELLO_WORLD_CMD_INCVALUE) ==> 100+1 = 101
TEEC_InvokeCommand(TA_HELLO_WORLD_CMD_PRINT_HELLO_WORLD)
TEEC_InvokeCommand(TA_HELLO_WORLD_CMD_PRINT_HELLO_WORLD) done
…
TEEC_CloseSession
TEEC_FinalizeContex
Introduction to Trusted Applications
● GP Client API
● Not too flexible
● Somewhat limited in functionality
● GP Functional API forthcoming
● High level APIs, e.g. encrypt/decrypt
● Secure side TAs not required
Introduction to Trusted Applications
● Details
http://www.slideshare.net/linaroorg/lcu14103-how-to-create-and-run-trusted-
applications-on-optee
● Hello world example available at
http://github.com/jenswi-linaro/lcu14_optee_hello_world
● GlobalPlatform
http://www.globalplatform.org/
OP-TEE Porting
Prerequisites
● ARM-TF ported for ARMv8
https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/porting-guide.md
References
● Detailed design document
https://github.com/OP-TEE/optee_os/blob/master/documentation/optee_design.md
OP-TEE Trusted OS
Linux
Android
OP-TEE Porting - Main Blocks
TEE Driver
TEE Client
Client
Application
Client
Application
TEE Core
TEE functions
(crypto/mm)
TEE Internal API
Trusted
Application
Trusted
Application
TrustZone based chipset crypto timer efuse
HAL
TEE Client API
SMC
porting
OP-TEE Porting - Affected Gits
● OP-TEE Trusted OS (optee_os)
- Add new platform support (plat-<myplat>)
● OP-TEE Linux kernel driver (optee_linuxdriver)
- No changes needed.
- Built as module (optee.ko) by default and included in rootfs.
● OP-TEE Normal World user space (optee_client)
- No changes needed.
- Built as library (libteec.so) and included in rootfs.
OP-TEE Porting - Getting started
● Get OP-TEE source code
http://github.com/OP-TEE
● Get the toolchain
http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm-
linux-gnueabihf-4.9-2014.09_linux.tar.xz
OP-TEE Porting - How to build
● Add toolchain path
export PATH=$PATH:path-to-toolchain-bin
● Define CROSS_PREFIX macro
export CROSS_PREFIX=arm-linux-gnueabihf
● Choose target platform
export PLATFORM=<myplat> (e.g. vexpress)
● Choose target flavor
export PLATFORM_FLAVOR=<myflav> (e.g. juno)
● Build OP-TEE
make (produces tee.bin)
OP-TEE Porting - Partition Map
BL2/BL3-1/BL3-2
fip.bin (includes bl2.bin, bl31.bin,
tee.bin, u-boot.bin/uefi)
BL1
bl1.bin
kernel Image
rootfs
Example partition map based on
Allwinner A80 board
● Clone from an existing platform
E.g. core/arch/arm32/plat-vexpress → core/arch/arm32/plat-<myplat>
OP-TEE Porting - Creating a New Platform
├── conf.mk
├── link.mk
├── sub.mk
├── ..
├── core_bootcfg.c
└── platform_config.h
├── conf.mk
├── link.mk
├── sub.mk
├── ..
├── core_bootcfg.c
└── platform_config.h
OP-TEE Porting - Compiler & Linker options
● Compiler options: conf.mk
● Linker options: link.mk
CROSS_PREFIX ?= arm-linux-gnueabihf
CROSS_COMPILE ?= $(CROSS_PREFIX)-
PLATFORM_FLAVOR ?= <myflav>
platform-cpuarch = cortex-a57 #default is cortex-a15
platform-cflags += ..
link-out-dir = $(out-dir)/core/
link-script = $(platform-dir)/kern.ld.S
link-ldflags = $(LDFLAGS)
OP-TEE Porting - Platform Configurations
● Platform-specific definitions: platform_config.h
#define STACK_TMP_SIZE 1024
#define STACK_ABT_SIZE 1024
#define STACK_THREAD_SIZE 8192
..
#define DRAM0_BASE 0x80000000
#define DRAM0_SIZE 0x7F000000
/* Location of trusted dram */
#define TZDRAM_BASE 0xFF000000
#define TZDRAM_SIZE 0x00E00000
..
#define CFG_TEE_CORE_NB_CORE 6
..
#define TEE_RAM_START (TZDRAM_BASE)
#define TEE_RAM_SIZE 0x0010000
#define CFG_SHMEM_START (DRAM0_BASE + DRAM0_SIZE - CFG_SHMEM_SIZE)
#define CFG_SHMEM_SIZE 0x100000
OP-TEE Porting - Platform Configurations
● platform_config.h also includes definitions for
● GIC base
● UART
OP-TEE Porting - Adding Source Files
● Source files list: sub.mk
srcs-y += file1.c
srcs-y += file2.c
…
subdirs-y += dir1
subdirs-y += dir2
OP-TEE Porting - Memory Map
OP-TEE Porting - Memory Configuration
● plat-<myplat>/
core_bootcfg.c
static struct map_area bootcfg_memory_map[] = {
{ /* teecore execution RAM */
.type = MEM_AREA_TEE_RAM,
.pa = CFG_TEE_RAM_START, .size = CFG_TEE_RAM_SIZE,
.cached = true, .secure = true, .rw = true, .exec = true,
},
{ /* teecore TA load/exec RAM - Secure, exec user only! */
.type = MEM_AREA_TA_RAM,
.pa = CFG_TA_RAM_START, .size = CFG_TA_RAM_SIZE,
.cached = true, .secure = true, .rw = true, .exec = false,
},
{ /* teecore public RAM - NonSecure, non-exec. */
.type = MEM_AREA_NSEC_SHM,
.pa = CFG_PUB_RAM_START, .size = SECTION_SIZE,
.cached = true, .secure = false, .rw = true, .exec = false,
},
{ /* Add platform IO devices like UART, GIC, etc. */
.type = MEM_AREA_IO_SEC,
.pa = (GIC_BASE + GICD_OFFSET) & ~SECTION_MASK, .size = SECTION_SIZE,
.device = true, .secure = true, .rw = true,
},
{.type = MEM_AREA_NOTYPE}
};
OP-TEE Porting - Platform Initialization
(_start) (kern.ld.S)
1. _start (entry.S)
a. CPU basic init (v7 only)
b. Cache/MMU init
c. BSS init (v7 only)
d. Jump to main_init
2. main_init (main.c)
a. Init UART, canaries, GIC
b. Clear BSS (v8 only)
c. Init monitor (v7 only)
d. Init thread stacks
e. Register handlers
(stdcall/fiq/svc/abort)
f. Init core
g. Return to non-secure entry
OP-TEE Porting - Running and Debug
(_start) (kern.ld.S)
4. sm_smc_entry (v7 only)
(sm_asm.S)
a. Save caller world context
b. Restore world context
c. Update SCR bits (NS/FIQ)
5. Thread handle (thread_asm.S,
thread.c)
a. Check if fiq handle request
b. Thread allocate
c. Thread context restore
6. main_tee_entry (main.c)
7. tee_entry (entry.c)
OP-TEE Porting - Test/Verify
● Build normal world program and corresponding TA
● Copy both to rootfs
● Run normal world program
● Details
http://www.slideshare.net/linaroorg/lcu14103-how-to-create-and-run-
trusted-applications-on-optee
● Hello world example available at
http://github.com/jenswi-linaro/lcu14_optee_hello_world
OP-TEE Porting - Sample Test Log
root@Vexpress:/ modprobe optee
misc teetz: no TZ l2cc mutex service supported
misc teetz: outer cache shared mutex disabled
root@Vexpress:/ tee-supplicant&
root@Vexpress:/ hello_world
Invoking TA to increment 42
TA incremented value to 43
root@Vexpress:/
OP-TEE Porting - Initial Task Checklist
- [ ] Port ARM-TF with U-Boot/UEFI (as bl33.bin) but without optee_os (bl32.bin)
- [ ] Make platform-specific changes to optee_os
- [ ] Add new platform
- [ ] conf.mk, link.mk, platform_config.h, core_bootcfg.c
- [ ] Add new source files (if required)
- [ ] Platform initialization (if required)
- [ ] Thread handlers (if required)
- [ ] Build optee_os
- [ ] Rebuild ARM-TF with U-Boot/UEFI as bl33.bin and optee_os as bl32.bin
- [ ] Build other required system components (kernel, rootfs, etc.)
- [ ] Test/Verify
OP-TEE documentation
● OP-TEE OS Documents
https://github.com/OP-TEE/optee_os/tree/master/documentation
● OP-TEE Wiki FAQ
https://wiki.linaro.org/WorkingGroups/Security/OP-TEE
Thank You!
HKG15-311: OP-TEE for Beginners and Porting Review

More Related Content

What's hot

LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
Linaro
 

What's hot (20)

Introduction to Optee (26 may 2016)
Introduction to Optee (26 may 2016)Introduction to Optee (26 may 2016)
Introduction to Optee (26 may 2016)
 
Lcu14 306 - OP-TEE Future Enhancements
Lcu14 306 - OP-TEE Future EnhancementsLcu14 306 - OP-TEE Future Enhancements
Lcu14 306 - OP-TEE Future Enhancements
 
LAS16 111 - Raspberry pi3, op-tee and jtag debugging
LAS16 111 - Raspberry pi3, op-tee and jtag debuggingLAS16 111 - Raspberry pi3, op-tee and jtag debugging
LAS16 111 - Raspberry pi3, op-tee and jtag debugging
 
LCA14: LCA14-502: The way to a generic TrustZone® solution
LCA14: LCA14-502: The way to a generic TrustZone® solutionLCA14: LCA14-502: The way to a generic TrustZone® solution
LCA14: LCA14-502: The way to a generic TrustZone® solution
 
Secure Boot on ARM systems – Building a complete Chain of Trust upon existing...
Secure Boot on ARM systems – Building a complete Chain of Trust upon existing...Secure Boot on ARM systems – Building a complete Chain of Trust upon existing...
Secure Boot on ARM systems – Building a complete Chain of Trust upon existing...
 
Secure storage updates - SFO17-309
Secure storage updates - SFO17-309Secure storage updates - SFO17-309
Secure storage updates - SFO17-309
 
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1
BKK16-201 Play Ready OPTEE Integration with Secure Video Path lhg-1
 
OPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build TutorialOPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build Tutorial
 
SFO15-205: OP-TEE Content Decryption with Microsoft PlayReady on ARM
SFO15-205: OP-TEE Content Decryption with Microsoft PlayReady on ARMSFO15-205: OP-TEE Content Decryption with Microsoft PlayReady on ARM
SFO15-205: OP-TEE Content Decryption with Microsoft PlayReady on ARM
 
BUD17-416: Benchmark and profiling in OP-TEE
BUD17-416: Benchmark and profiling in OP-TEE BUD17-416: Benchmark and profiling in OP-TEE
BUD17-416: Benchmark and profiling in OP-TEE
 
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
LAS16-111: Easing Access to ARM TrustZone – OP-TEE and Raspberry Pi 3
 
Qemu Pcie
Qemu PcieQemu Pcie
Qemu Pcie
 
Trusted firmware deep_dive_v1.0_
Trusted firmware deep_dive_v1.0_Trusted firmware deep_dive_v1.0_
Trusted firmware deep_dive_v1.0_
 
LCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted FirmwareLCU14 500 ARM Trusted Firmware
LCU14 500 ARM Trusted Firmware
 
LAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to EmbeddedLAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
 
LCU13: An Introduction to ARM Trusted Firmware
LCU13: An Introduction to ARM Trusted FirmwareLCU13: An Introduction to ARM Trusted Firmware
LCU13: An Introduction to ARM Trusted Firmware
 
LCA14: LCA14-418: Testing a secure framework
LCA14: LCA14-418: Testing a secure frameworkLCA14: LCA14-418: Testing a secure framework
LCA14: LCA14-418: Testing a secure framework
 
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchJagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratch
 
BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE BUD17-400: Secure Data Path with OPTEE
BUD17-400: Secure Data Path with OPTEE
 
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernelEmbedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
 

Similar to HKG15-311: OP-TEE for Beginners and Porting Review

HKG18-116 - RAS Solutions for Arm64 Servers
HKG18-116 - RAS Solutions for Arm64 ServersHKG18-116 - RAS Solutions for Arm64 Servers
HKG18-116 - RAS Solutions for Arm64 Servers
Linaro
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
chiportal
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
sean chen
 

Similar to HKG15-311: OP-TEE for Beginners and Porting Review (20)

U-Boot presentation 2013
U-Boot presentation  2013U-Boot presentation  2013
U-Boot presentation 2013
 
U-Boot - An universal bootloader
U-Boot - An universal bootloader U-Boot - An universal bootloader
U-Boot - An universal bootloader
 
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hoodEmbedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
 
U-Boot Porting on New Hardware
U-Boot Porting on New HardwareU-Boot Porting on New Hardware
U-Boot Porting on New Hardware
 
U Boot or Universal Bootloader
U Boot or Universal BootloaderU Boot or Universal Bootloader
U Boot or Universal Bootloader
 
LAS16-504: Secure Storage updates in OP-TEE
LAS16-504: Secure Storage updates in OP-TEELAS16-504: Secure Storage updates in OP-TEE
LAS16-504: Secure Storage updates in OP-TEE
 
Developing a Windows CE OAL.ppt
Developing a Windows CE OAL.pptDeveloping a Windows CE OAL.ppt
Developing a Windows CE OAL.ppt
 
Embedded Android
Embedded AndroidEmbedded Android
Embedded Android
 
[OpenStack Day in Korea 2015] Track 1-6 - 갈라파고스의 이구아나, 인프라에 오픈소스를 올리다. 그래서 보이...
[OpenStack Day in Korea 2015] Track 1-6 - 갈라파고스의 이구아나, 인프라에 오픈소스를 올리다. 그래서 보이...[OpenStack Day in Korea 2015] Track 1-6 - 갈라파고스의 이구아나, 인프라에 오픈소스를 올리다. 그래서 보이...
[OpenStack Day in Korea 2015] Track 1-6 - 갈라파고스의 이구아나, 인프라에 오픈소스를 올리다. 그래서 보이...
 
Labs_BT_20221017.pptx
Labs_BT_20221017.pptxLabs_BT_20221017.pptx
Labs_BT_20221017.pptx
 
Slimline Open Firmware
Slimline Open FirmwareSlimline Open Firmware
Slimline Open Firmware
 
RISC-V-Day-Tokyo2018-suzaki
RISC-V-Day-Tokyo2018-suzakiRISC-V-Day-Tokyo2018-suzaki
RISC-V-Day-Tokyo2018-suzaki
 
HKG18-116 - RAS Solutions for Arm64 Servers
HKG18-116 - RAS Solutions for Arm64 ServersHKG18-116 - RAS Solutions for Arm64 Servers
HKG18-116 - RAS Solutions for Arm64 Servers
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
 
U-boot and Android Verified Boot 2.0
U-boot and Android Verified Boot 2.0U-boot and Android Verified Boot 2.0
U-boot and Android Verified Boot 2.0
 
Study on Android Emulator
Study on Android EmulatorStudy on Android Emulator
Study on Android Emulator
 
Attack your Trusted Core
Attack your Trusted CoreAttack your Trusted Core
Attack your Trusted Core
 
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
 
44CON 2014 - Stupid PCIe Tricks, Joe Fitzpatrick
44CON 2014 - Stupid PCIe Tricks, Joe Fitzpatrick44CON 2014 - Stupid PCIe Tricks, Joe Fitzpatrick
44CON 2014 - Stupid PCIe Tricks, Joe Fitzpatrick
 

More from Linaro

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Linaro
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018
Linaro
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Linaro
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Linaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
Linaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
Linaro
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
Linaro
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
Linaro
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation
Linaro
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
Linaro
 

More from Linaro (20)

Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea GalloDeep Learning Neural Network Acceleration at the Edge - Andrea Gallo
Deep Learning Neural Network Acceleration at the Edge - Andrea Gallo
 
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta VekariaArm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
Arm Architecture HPC Workshop Santa Clara 2018 - Kanta Vekaria
 
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua MoraHuawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
Huawei’s requirements for the ARM based HPC solution readiness - Joshua Mora
 
Bud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qaBud17 113: distribution ci using qemu and open qa
Bud17 113: distribution ci using qemu and open qa
 
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
OpenHPC Automation with Ansible - Renato Golin - Linaro Arm HPC Workshop 2018
 
HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018HPC network stack on ARM - Linaro HPC Workshop 2018
HPC network stack on ARM - Linaro HPC Workshop 2018
 
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
It just keeps getting better - SUSE enablement for Arm - Linaro HPC Workshop ...
 
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
Intelligent Interconnect Architecture to Enable Next Generation HPC - Linaro ...
 
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening Keynote
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP Workshop
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8M
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
 

Recently uploaded

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Recently uploaded (20)

What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 

HKG15-311: OP-TEE for Beginners and Porting Review

  • 1. Presented by Date HKG15-311:OP-TEE Basics and Porting Review Victor Chong 2015-2-9
  • 2. Objectives ● Security Building Blocks ● Secure Boot ● Introduction to Trusted Applications ● OP-TEE Porting
  • 3. OP-TEE ● Open-source Portable TEE ● Sponsored by ST ● GlobalPlatform (GP) compatible ● Compatible with ARM-TF ● Complete system
  • 4. Security Building Blocks ● TrustZone-enabled chipset (Hardware) ● ARM Trusted Firmware aka ARM-TF (Firmware) ● Boot Services ● Run-time Services ● OP-TEE (OS) ● Client library (libteec.so) ● Driver (optee.ko) ● Trusted OS ● Client Applications ● OP-TEE Clients (Normal World) ● Trusted Applications (Secure World)
  • 7. Secure Boot ● Prevent unauthorized executables from booting by verifying image signatures ● Divided into stages ● Start with trusted source (ROM boot code) @ stage/level 1 ● Root of Trust ● Every subsequent image (stage/level) to be loaded is verified first by the one before it ● Chain of Trust
  • 9. Introduction to Trusted Applications A Trusted Application typically consists of two parts ● Linux user space, client implementation ● Secure world Trusted Application (TA)
  • 10. Introduction to Trusted Applications
  • 11. Introduction to Trusted Applications Typical normal world program flow based on GP Client API ● TEEC_InitializeContext ● Connect to the OP-TEE Linux driver ● TEEC_OpenSession ● Loads the TA ● TEEC_InvokeCommand ● Control TA functions ● TEEC_CloseSession ● TEEC_FinalizeContext
  • 12. Hello World Example root@host:/ hello_world TEEC_InitializeContext TEEC_OpenSession TEEC_InvokeCommand(TA_HELLO_WORLD_CMD_INCVALUE) TEEC_InvokeCommand(TA_HELLO_WORLD_CMD_INCVALUE) ==> 100+1 = 101 TEEC_InvokeCommand(TA_HELLO_WORLD_CMD_PRINT_HELLO_WORLD) TEEC_InvokeCommand(TA_HELLO_WORLD_CMD_PRINT_HELLO_WORLD) done … TEEC_CloseSession TEEC_FinalizeContex
  • 13. Introduction to Trusted Applications ● GP Client API ● Not too flexible ● Somewhat limited in functionality ● GP Functional API forthcoming ● High level APIs, e.g. encrypt/decrypt ● Secure side TAs not required
  • 14. Introduction to Trusted Applications ● Details http://www.slideshare.net/linaroorg/lcu14103-how-to-create-and-run-trusted- applications-on-optee ● Hello world example available at http://github.com/jenswi-linaro/lcu14_optee_hello_world ● GlobalPlatform http://www.globalplatform.org/
  • 15. OP-TEE Porting Prerequisites ● ARM-TF ported for ARMv8 https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/porting-guide.md References ● Detailed design document https://github.com/OP-TEE/optee_os/blob/master/documentation/optee_design.md
  • 16. OP-TEE Trusted OS Linux Android OP-TEE Porting - Main Blocks TEE Driver TEE Client Client Application Client Application TEE Core TEE functions (crypto/mm) TEE Internal API Trusted Application Trusted Application TrustZone based chipset crypto timer efuse HAL TEE Client API SMC porting
  • 17. OP-TEE Porting - Affected Gits ● OP-TEE Trusted OS (optee_os) - Add new platform support (plat-<myplat>) ● OP-TEE Linux kernel driver (optee_linuxdriver) - No changes needed. - Built as module (optee.ko) by default and included in rootfs. ● OP-TEE Normal World user space (optee_client) - No changes needed. - Built as library (libteec.so) and included in rootfs.
  • 18. OP-TEE Porting - Getting started ● Get OP-TEE source code http://github.com/OP-TEE ● Get the toolchain http://releases.linaro.org/14.09/components/toolchain/binaries/gcc-linaro-arm- linux-gnueabihf-4.9-2014.09_linux.tar.xz
  • 19. OP-TEE Porting - How to build ● Add toolchain path export PATH=$PATH:path-to-toolchain-bin ● Define CROSS_PREFIX macro export CROSS_PREFIX=arm-linux-gnueabihf ● Choose target platform export PLATFORM=<myplat> (e.g. vexpress) ● Choose target flavor export PLATFORM_FLAVOR=<myflav> (e.g. juno) ● Build OP-TEE make (produces tee.bin)
  • 20. OP-TEE Porting - Partition Map BL2/BL3-1/BL3-2 fip.bin (includes bl2.bin, bl31.bin, tee.bin, u-boot.bin/uefi) BL1 bl1.bin kernel Image rootfs Example partition map based on Allwinner A80 board
  • 21. ● Clone from an existing platform E.g. core/arch/arm32/plat-vexpress → core/arch/arm32/plat-<myplat> OP-TEE Porting - Creating a New Platform ├── conf.mk ├── link.mk ├── sub.mk ├── .. ├── core_bootcfg.c └── platform_config.h ├── conf.mk ├── link.mk ├── sub.mk ├── .. ├── core_bootcfg.c └── platform_config.h
  • 22. OP-TEE Porting - Compiler & Linker options ● Compiler options: conf.mk ● Linker options: link.mk CROSS_PREFIX ?= arm-linux-gnueabihf CROSS_COMPILE ?= $(CROSS_PREFIX)- PLATFORM_FLAVOR ?= <myflav> platform-cpuarch = cortex-a57 #default is cortex-a15 platform-cflags += .. link-out-dir = $(out-dir)/core/ link-script = $(platform-dir)/kern.ld.S link-ldflags = $(LDFLAGS)
  • 23. OP-TEE Porting - Platform Configurations ● Platform-specific definitions: platform_config.h #define STACK_TMP_SIZE 1024 #define STACK_ABT_SIZE 1024 #define STACK_THREAD_SIZE 8192 .. #define DRAM0_BASE 0x80000000 #define DRAM0_SIZE 0x7F000000 /* Location of trusted dram */ #define TZDRAM_BASE 0xFF000000 #define TZDRAM_SIZE 0x00E00000 .. #define CFG_TEE_CORE_NB_CORE 6 .. #define TEE_RAM_START (TZDRAM_BASE) #define TEE_RAM_SIZE 0x0010000 #define CFG_SHMEM_START (DRAM0_BASE + DRAM0_SIZE - CFG_SHMEM_SIZE) #define CFG_SHMEM_SIZE 0x100000
  • 24. OP-TEE Porting - Platform Configurations ● platform_config.h also includes definitions for ● GIC base ● UART
  • 25. OP-TEE Porting - Adding Source Files ● Source files list: sub.mk srcs-y += file1.c srcs-y += file2.c … subdirs-y += dir1 subdirs-y += dir2
  • 26. OP-TEE Porting - Memory Map
  • 27. OP-TEE Porting - Memory Configuration ● plat-<myplat>/ core_bootcfg.c static struct map_area bootcfg_memory_map[] = { { /* teecore execution RAM */ .type = MEM_AREA_TEE_RAM, .pa = CFG_TEE_RAM_START, .size = CFG_TEE_RAM_SIZE, .cached = true, .secure = true, .rw = true, .exec = true, }, { /* teecore TA load/exec RAM - Secure, exec user only! */ .type = MEM_AREA_TA_RAM, .pa = CFG_TA_RAM_START, .size = CFG_TA_RAM_SIZE, .cached = true, .secure = true, .rw = true, .exec = false, }, { /* teecore public RAM - NonSecure, non-exec. */ .type = MEM_AREA_NSEC_SHM, .pa = CFG_PUB_RAM_START, .size = SECTION_SIZE, .cached = true, .secure = false, .rw = true, .exec = false, }, { /* Add platform IO devices like UART, GIC, etc. */ .type = MEM_AREA_IO_SEC, .pa = (GIC_BASE + GICD_OFFSET) & ~SECTION_MASK, .size = SECTION_SIZE, .device = true, .secure = true, .rw = true, }, {.type = MEM_AREA_NOTYPE} };
  • 28. OP-TEE Porting - Platform Initialization (_start) (kern.ld.S) 1. _start (entry.S) a. CPU basic init (v7 only) b. Cache/MMU init c. BSS init (v7 only) d. Jump to main_init 2. main_init (main.c) a. Init UART, canaries, GIC b. Clear BSS (v8 only) c. Init monitor (v7 only) d. Init thread stacks e. Register handlers (stdcall/fiq/svc/abort) f. Init core g. Return to non-secure entry
  • 29. OP-TEE Porting - Running and Debug (_start) (kern.ld.S) 4. sm_smc_entry (v7 only) (sm_asm.S) a. Save caller world context b. Restore world context c. Update SCR bits (NS/FIQ) 5. Thread handle (thread_asm.S, thread.c) a. Check if fiq handle request b. Thread allocate c. Thread context restore 6. main_tee_entry (main.c) 7. tee_entry (entry.c)
  • 30. OP-TEE Porting - Test/Verify ● Build normal world program and corresponding TA ● Copy both to rootfs ● Run normal world program ● Details http://www.slideshare.net/linaroorg/lcu14103-how-to-create-and-run- trusted-applications-on-optee ● Hello world example available at http://github.com/jenswi-linaro/lcu14_optee_hello_world
  • 31. OP-TEE Porting - Sample Test Log root@Vexpress:/ modprobe optee misc teetz: no TZ l2cc mutex service supported misc teetz: outer cache shared mutex disabled root@Vexpress:/ tee-supplicant& root@Vexpress:/ hello_world Invoking TA to increment 42 TA incremented value to 43 root@Vexpress:/
  • 32. OP-TEE Porting - Initial Task Checklist - [ ] Port ARM-TF with U-Boot/UEFI (as bl33.bin) but without optee_os (bl32.bin) - [ ] Make platform-specific changes to optee_os - [ ] Add new platform - [ ] conf.mk, link.mk, platform_config.h, core_bootcfg.c - [ ] Add new source files (if required) - [ ] Platform initialization (if required) - [ ] Thread handlers (if required) - [ ] Build optee_os - [ ] Rebuild ARM-TF with U-Boot/UEFI as bl33.bin and optee_os as bl32.bin - [ ] Build other required system components (kernel, rootfs, etc.) - [ ] Test/Verify
  • 33. OP-TEE documentation ● OP-TEE OS Documents https://github.com/OP-TEE/optee_os/tree/master/documentation ● OP-TEE Wiki FAQ https://wiki.linaro.org/WorkingGroups/Security/OP-TEE