文档

NXP i.MX系列芯片开发手册

更新时间:
一键部署

本文以NXP i.MX芯片为例,介绍了如何集成TEE。

1、配套系统

  • 工具链

交叉编译工具链请使用NXP推荐的版本:gcc-linaro-arm-linux-gnueabihf-4.9-2014.08_linux

下载地址:https://releases.linaro.org/archive/14.08/components/toolchain/binaries/

  • Uoot版本

基于NXP uboot-imx-rel_imx_4.1.15_2.0.0_ga版本,下载使用说明:

$ wget http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git/snapshot/uboot-imxrel_imx_4.1.15_2.0.0_ga.tar.bz2
$ tar xjvf ~/uboot-imx-rel_imx_4.1.15_2.0.0_ga.tar.bz2

  • Linux版本

基于NXP linux-imx-rel_imx_4.1.15_2.0.0_ga版本

下载使用说明:

$ wget http://git.freescale.com/git/cgit.cgi/imx/linux-imx.git/snapshot/linux-imx-rel_imx_4.1.15_2.0.0_ga.tar.bz2
$ tar xjvf ~/linux-imx-rel_imx_4.1.15_2.0.0_ga.tar.bz2

2、NXP系统TEE-Pro补丁

2.1 NXP i.MX6UL补丁包

Alibaba-cloud-link-tee-pro-imx6ul-patch:

 uboot-add-tee-pro-support.patch

 linux-add-tee-pro-support.patch

  1. Uboot patch:将0001-uboot-add-tee-pro-support.patch置于和uboot-imx-rel_imx_4.1.15_2.0.0_ga 同级目录下

$ patch -p1 < 0001-uboot-add-tee-pro-support.patch
$ cd uboot-imx-rel_imx_4.1.15_2.0.0_ga
$ export CROSS_COMPILE=arm-linux-gnueabihf-
$ make ARCH=arm mx6ul_14x14_evk_tee_defconfig
$ make ARCH=arm

编译生成文件:

uboot-imx-rel_imx_4.1.15_2.0.0_ga/u-boot.imx

  1. Linux patch:将0001-linux-add-tee-pro-support.patch置于和linux-imx-rel_imx_4.1.15_2.0.0_ga 同级目录下

$ patch -p1 < 0001-linux-add-tee-pro-support.patch
$ cd linux-imx-rel_imx_4.1.15_2.0.0_ga
$ make ARCH=arm imx_v7_defconfig
$ make ARCH=arm zImage
$ make ARCH=arm imx6ul-14x14-evk.dtb

编译生成文件:

linux-imx-rel_imx_4.1.15_2.0.0_ga/arch/arm/boot/zImage

linux-imx-rel_imx_4.1.15_2.0.0_ga/arch/arm/boot/dts/imx6ul-14x14-evk.dtb

2.2 NXP i.MX6QP 补丁包

Alibaba-cloud-link-tee-pro-imx6qp-patch:

 0001-uboot-add-tee-pro-support.patch

 0002-uboot-add-6qp-tee-support.patch

 0001-linux-add-tee-pro-support.patch

 0002-linux-add-6qp-tee-support.patch

  1. Uboot patch:将0001-uboot-add-tee-pro-support.patch,0002-uboot-add-6qp-tee-support.patch置于和 uboot-imx-rel_imx_4.1.15_2.0.0_ga 同级目录下

$ patch -p1 < 0001-uboot-add-tee-pro-support.patch
$ patch -p1 < 0002-uboot-add-6qp-tee-support.patch
$ cd uboot-imx-rel_imx_4.1.15_2.0.0_ga
$ export CROSS_COMPILE=arm-linux-gnueabihf-
$ make ARCH=arm mx6qpsabresd_config
$ make ARCH=arm

编译生成文件:

uboot-imx-rel_imx_4.1.15_2.0.0_ga/u-boot.imx

  1. Linux patch:将0001-linux-add-tee-pro-support.patch, 0002-linux-add-6qp-tee-support.patch置于和linux-imx-rel_imx_4.1.15_2.0.0_ga 同级目录下

$ patch -p1 < 0001-linux-add-tee-pro-support.patch
$ patch -p1 < 0002-linux-add-6qp-tee-support.patch
$ cd linux-imx-rel_imx_4.1.15_2.0.0_ga
$ make ARCH=arm imx_v7_defconfig
$ make ARCH=arm zImage
$ make ARCH=arm imx6qp-sabresd.dtb

编译生成文件:

linux-imx-rel_imx_4.1.15_2.0.0_ga/arch/arm/boot/zImage

linux-imx-rel_imx_4.1.15_2.0.0_ga/arch/arm/boot/dts/imx6qp-sabresd.dtb

2.3 NXP i.MX6Q 补丁包

Alibaba-cloud-link-tee-pro-imx6q-patch:

 0001-uboot-add-tee-pro-support.patch

 0002-uboot-add-6q-tee-support.patch

 0003-uboot-6q-evk-ali-tee-support.patch

 0001-linux-add-tee-pro-support.patch

 0002-linux-add-6q-tee-support.patch

 0003-linux-add-6q-dts-ali-tee-support.patch

  1. Uboot patch:将0001-uboot-add-tee-pro-support.patch,0002-uboot-add-6q-tee-support.patch0003-uboot-6q-evk-ali-tee-support.patch置于和 uboot-imx-rel_imx_4.1.15_2.0.0_ga 同级目录下

$ patch -p1 < 0001-uboot-add-tee-pro-support.patch
$ patch -p1 < 0002-uboot-add-6q-tee-support.patch
$ patch -p1 < 0003-uboot-6q-evk-ali-tee-support.patch

$ cd uboot-imx-rel_imx_4.1.15_2.0.0_ga
$ export CROSS_COMPILE=arm-linux-gnueabihf-
$ make ARCH=arm mx6qsabresd_config
$ make ARCH=arm

编译生成文件:

uboot-imx-rel_imx_4.1.15_2.0.0_ga/u-boot.imx

  1. Linux patch:将0001-linux-add-tee-pro-support.patch,0002-linux-add-6q-tee-support.patch0003-linux-add-6q-dts-ali-tee-support.patch置于和linux-imx-rel_imx_4.1.15_2.0.0_ga 同级目录下

$ patch -p1 < 0001-linux-add-tee-pro-support.patch
$ patch -p1 < 0002-linux-add-6q-tee-support.patch
$ patch -p1 < 0003-linux-add-6q-dts-ali-tee-support.patch

$ cd linux-imx-rel_imx_4.1.15_2.0.0_ga
$ make ARCH=arm imx_v7_defconfig
$ make ARCH=arm zImage
$ make ARCH=arm imx6q-sabresd.dtb

编译生成文件:

linux-imx-rel_imx_4.1.15_2.0.0_ga/arch/arm/boot/zImage

linux-imx-rel_imx_4.1.15_2.0.0_ga/arch/arm/boot/dts/imx6q-sabresd.dtb

注意:当前发布包内只支持NXP的imx-rel_imx_4.1.15_2.0.0_ga软件版本,如果需要TEE-Pro支持NXP更新版本的uboot, Linux, android版本,请联系阿里云Link Security相关技术支持人员。

3、TEE-Pro SDK发布包

Alibaba-cloud-link-tee-pro-sdk:

/docs

/阿里云Link TEE-Pro用户开发手册.pdf

/ntw

/bin

/tstd 可信存储的守护进程程序

/tafsd TA动态加载守护进程程序

/inc CA编程时所需的头文件

/lib CA编程时所需的库文件

/samples

/aes 使用TEE运算AES的示例程序

/inc 头文件

/ntw CA示例代码

/tw TA示例代码

/mem TEE内存操作示例代码

/inc 头文件

/ntw CA示例代码

/tw TA示例代码

/xor 通过TEE完成异或操作的示例代码

/inc 头文件

/ntw CA示例代码

/tw TA示例代码

/tw

/bin

/atf.bin ATF执行程序

/tee.bin TEE执行程序

/inc TA编程时所需头文件

/lds

/ tee_srv.lds TA编译链接脚本文件

/lib TA编程时所需库文件

/tools

/dyn_tk TA动态加载生成,签名工具

/ mkimage 由rel-imx.sh调用

/rel-imx.sh 合并atf.bin,tee.bin生成tee.img的工具

/ srv_tk 将TA合并入tee.bin的工具

/rsa_private.pem TA动态加载签名密钥

4、TEE-Pro的开发部署

4.1 系统固件的烧录

  • Uboot的烧录

请参考NXP对uboot的烧录方法。

  • Kernel, DTB文件的更新

请参考NXP对zImage, dtb文件的更新方法。

  • tee.img的加载运行

参考zImage文件的更新方法,将tee.img置于开发板中zImage同级目录。

Reset开发板后,系统会自动启动,直到出现Linux命令提示符。

或者可以在uboot的命令行中输入命令来加载执行。

i.MX6UL:
run findfdt;run loadfdt;run loadimage;fatload mmc 1:1 0x84000000 tee.img;run mmcargs;bootm 0x84000000 - 0x83000000
i.MX6QP/i.MX6Q:
run findfdt;run loadfdt;run loadimage;fatload mmc 1:1 0x20000000 tee.img;run mmcargs;bootm 0x20000000 - 0x18000000

此时系统会初始化TEE,然后再执行linux kernel。

4.2 TEE-Pro守护进程的使用

 1、tstd守护进程的启动

      1. 在开发板Linux根目录创建/tee目录

      2. 将tstd程序复制到tee目录

      3. 在tee目录下创建tst目录

      4. 运行命令 ./tstd ./tst & 启动tstd守护进程

 2、tafsd守护进程的启动

      1. 在开发板Linux根目录创建/tee目录

      2. 将tafsd程序复制到tee目录

      3. 在tee目录下创建ta目录

      4. 运行命令 ./tafsd ./ta & 启动tafsd守护进程

4.3 TA的开发编译运行

TEE-Pro支持TA的静态加载和动态加载两种方式。

    • 静态加载:编译生成的TA二进制程序将和tee.bin固件程序一起合并为一个tee.img固件程序,在tee.img被加载运行时,所有TA也一同被加载,待TA被调用时则启动运行。因此TA的签名也将随同tee.img固件一起被签名,将与tee.img的安全启动共享同一个公私钥进行签名认证。

    • 动态加载:编译生成的TA二进制程序可以单独的保存在系统的文件系统目录中,在需要该TA的服务时,被TEE加载运行。TA的签名需要独立的公私钥对进行认证。

静态加载模式适合TA程序不会频繁进行更新,对TA安全性要求高的情况。由于TA与TEE固件一起被烧录到flash固定分区,因此不容易产生被随意进行回滚攻击的可能。

动态加载模式适合TA程序需要频繁进行更新的情况,由于需要对TA进行RSA签名认证,因此需要开发者自行维护TA签名的公私钥对。TA被存放在REE的文件系统中,因此存在被回滚攻击的可能。(针对回滚攻击,可以通过TEE-Pro提供的防回滚攻击手段进行防御。)

4.4 CA,TA的编译:(以xor为例说明)

    1. 工具链请选择使用:gcc-linaro-arm-linux-gnueabihf-4.9-2014.08_linux

    2. 将PATH=~/gcc-linaro-arm-linux-gnueabihf-4.9-2014.08_linux/bin:$PATH 加入~/.bashrc

    3. 在samples/xor/ntw目录下执行make –f Makefile.sdk当前目录生成可以在i.MX6 linux下执行的CA文件ca_xor

    4. 在xor/tw目录下执行make –f Makefile.sdk在当前目录生成ta_xor.bin, 68572413bdacdfce0112233445566778.bin 两个TA文件。

注意:

SDK包中默认放置了一个rsa_private.pem用于TA的签名验证,请在您的ubuntu系统中使用[openssl genrsa -out rsa_private_key.pem 2048]命令重新生成一个用于产品TA的签名认证,该公私钥对关系您TA的安全,务必妥善保管。

4.5 静态TA的合并使用及tee.img的生成

    1. 复制编译生成的ta_xor.bin到 /tw/tools目录

    2. 复制/tw/bin/目录下的 atf.bin, tee.bin到/tw/tools目录

    3. 运行命令 ./srv_tk add -b tee.bin -s ta_xor.bin -o tee.bin

    4. 运行脚本 ./rel-imx.sh

    5. 生成最终可加载执行文件tee.img

    6. 将生成的tee.img按照前文描述烧录到开发板中

4.6 动态TA的使用

    1. 将68572413bdacdfce0112233445566778.bin文件推送到开发/tee/ta目录

    2. tafsd守护进程会在ca_xor调用该TA服务时自动加载该TA程序

    3. 复制/tw/bin/目录下的 atf.bin, tee.bin到/tw/tools目录

    4. 运行脚本 ./rel-imx.sh

    5. 生成最终可加载执行文件tee.img

    6. 将生成的tee.img按照前文描述烧录到开发板中

4.7 CA的使用

    1. 将编译生成的ca_xor,置于先前创建的tee目录

    2. 运行./ca_xor

  • 本页导读
文档反馈