meta-st-stm32mp/recipes-security/optee/optee-os
Priouzeau Christophe c9b7e9bc54 OPTEE: bump to update to v1.2.0 (3.3.0-stm32mp-r3)
Change-Id: Ie9655fa7fdc62037869a9bf5afbdf12b70ec96ac
Signed-off-by: Priouzeau Christophe <christophe.priouzeau@st.com>
2020-02-10 12:15:18 +01:00
..
0001-st-updates-r1.patch Add optee os for stm32mp machine 2019-02-05 11:22:25 +01:00
0002-st-updates-r2.patch OPTEE-OS-STM32MP: v1.1.0 update 2019-10-09 11:28:43 +02:00
0003-st-updates-r3.patch OPTEE: bump to update to v1.2.0 (3.3.0-stm32mp-r3) 2020-02-10 12:15:18 +01:00
README.HOW_TO.txt SDK and recipes update 2019-02-08 14:46:28 +01:00

README.HOW_TO.txt

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Compilation of Optee-os (Trusted Execution Environment):
1. Pre-requisite
2. Initialise cross-compilation via SDK
3. Prepare optee-os source code
4. Management of optee-os source code
5. Compile optee-os source code
6. Update software on board

1. Pre-requisite:
-----------------
OpenSTLinux SDK must be installed.

For optee-os build you need to install:
- Wand python and/or python crypto package
    Ubuntu: sudo apt-get install python-wand python-crypto python-pycryptopp
    Fedora: sudo yum install python-wand python-crypto
- git:
    Ubuntu: sudo apt-get install git-core gitk
    Fedora: sudo yum install git

If you have never configured you git configuration:
    $> git config --global user.name "your_name"
    $> git config --global user.email "your_email@example.com"

2. Initialise cross-compilation via SDK:
---------------------------------------
 Source SDK environment:
    $> source <path to SDK>/environment-setup-cortexa7t2hf-neon-vfpv4-openstlinux_weston-linux-gnueabi

 To verify if your cross-compilation environment have put in place:
    $> set | grep CROSS
    CROSS_COMPILE=arm-openstlinux_weston-linux-gnueabi-

Warning: the environment are valid only on the shell session where you have
 sourced the sdk environment.

3. Prepare optee-os source:
------------------------
If you have the tarball and the list of patch then you must extract the
tarball and apply the patch.
    $> tar xfz <optee-os source>.tar.gz
    or
    $> tar xfj <optee-os source>.tar.bz2
    or
    $> tar xfJ <optee-os source>.tar.xz
A new directory containing optee standard source code will be created, go into it:
    $> cd <directory to optee-os source code>

NB: if there is no git management on source code and you would like to have a git management
on the code see section 4 [Management of optee-os source code]
    if there is some patch, please apply it on source code
    $> for p in `ls -1 <path to patch>/*.patch`; do patch -p1 < $p; done

4. Management of optee-os source code:
-----------------------------------
If you like to have a better management of change made on optee-os source, you
can use git:
    $> cd <optee-os source>
    $> test -d .git || git init . && git add . && git commit -m "optee-ossource code" && git gc
    $> git checkout -b WORKING
    $> for p in `ls -1 <path to patch>/*.patch`; do git am $p; done

MANDATORY: You must update sources
    $> cd <directory to optee-os source code>
    $> chmod 755 scripts/bin_to_c.py

NB: you can use directly the source from the community:
    URL: git://github.com/OP-TEE/optee_os.git
    Branch: ##GIT_BRANCH##
    Revision: ##GIT_SRCREV##

    $> git clone git://github.com/OP-TEE/optee_os.git
    $> cd <optee-os source>
    $> git checkout -b WORKING ##GIT_SRCREV##
    $> for p in `ls -1 <path to patch>/*.patch`; do git am $p; done

MANDATORY: You must update sources
    $> cd <directory to optee-os source code>
    $> chmod 755 scripts/bin_to_c.py

5. Build optee-os source code:
--------------------------------
To compile optee-os source code
    $> cd <directory to optee-os source code>
    $> make -f $PWD/../Makefile.sdk
or for a specific config :
    $> make -f $PWD/../Makefile.sdk CFG_SECURE_DT=stm32mp157c-ev1

By default, binaries are located in $PWD/../build

6. Update software on board:
----------------------------
6.1. partitioning of binaries:
-----------------------------
Using the above command, the OP-TEE provides 3 binary files which MUST
be loaded in their respective partition as listed below:
- "tee-header-*-optee.stm32" in "teeh" partition
- "tee-pageable-*-optee.stm32" in "teed" partition
- "tee-pager-*-optee.stm32" in "teex" partition

6.2. Update via SDCARD:
-----------------------
Copy each binary to its dedicated partition, on SDCARD/USB disk
the OP-TEE partitions are the partitions 4/5/6:
 - SDCARD: /dev/mmcblkXp4 /dev/mmcblkXp5 /dev/mmcblkXp6
           (where X is the instance number)
 - SDCARD via USB reader: /dev/sdX4 /dev/sdX5 /dev/sdX6
                          (where X is the instance identifier)
So, for each binary:
$> dd if=<op-tee binary> of=/dev/<device partition> bs=1M conv=fdatasync

6.3. Update via USB mass storage on U-boot:
-------------------------------------------
* Plug the SDCARD on Board.
* Start the board and stop on U-boot shell:
 Hit any key to stop autoboot: 0
  STM32MP>
* plug an USB cable between the PC and the board via USB OTG port.
* On U-Boot shell, call the USB mass storage functionnality:
 STM32MP> ums 0 mmc 0

 ums <USB controller> <dev type: mmc|usb> <dev[:part]>
  ex.:
For SDCARD:      ums 0 mmc 0
For USB disk:    ums 0 usb 0

* Follow section 6.2 to load the "tee-*-optee.stm32" image files in the target
  partitions /dev/sd<X><Y>.



FAQ: Partitions identification

To find the partition associated to a specific label, connect the
SDCARD to your PC or run on target U-boot 'ums' command
and list /dev/disk/by-partlabel/ content, i.e:

  $> ls -l /dev/disk/by-partlabel/
  total 0
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 bootfs -> ../../mmcblk0p7
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 fsbl1 -> ../../mmcblk0p1     # FSBL (TF-A)
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 fsbl2 -> ../../mmcblk0p2     # FSBL backup (TF-A backup  same content as FSBL)
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 rootfs -> ../../mmcblk0p9
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 ssbl -> ../../mmcblk0p3      # SSBL (U-Boot)
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 teed -> ../../mmcblk0p5      # TEED (OP-TEE tee-pageable)
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 teeh -> ../../mmcblk0p4      # TEEH (OP-TEE tee-header)
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 teex -> ../../mmcblk0p6      # TEEX (OP-TEE tee-pager)
  lrwxrwxrwx 1 root root 16 Jan 23 19:11 userfs -> ../../mmcblk0p10
  lrwxrwxrwx 1 root root 15 Jan 23 19:11 vendorfs -> ../../mmcblk0p8