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
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
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
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
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
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
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守护进程的启动
在开发板Linux根目录创建/tee目录
将tstd程序复制到tee目录
在tee目录下创建tst目录
运行命令 ./tstd ./tst & 启动tstd守护进程
2、tafsd守护进程的启动
在开发板Linux根目录创建/tee目录
将tafsd程序复制到tee目录
在tee目录下创建ta目录
运行命令 ./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为例说明)
工具链请选择使用:gcc-linaro-arm-linux-gnueabihf-4.9-2014.08_linux
将PATH=~/gcc-linaro-arm-linux-gnueabihf-4.9-2014.08_linux/bin:$PATH 加入~/.bashrc
在samples/xor/ntw目录下执行make –f Makefile.sdk当前目录生成可以在i.MX6 linux下执行的CA文件ca_xor
在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的生成
复制编译生成的ta_xor.bin到 /tw/tools目录
复制/tw/bin/目录下的 atf.bin, tee.bin到/tw/tools目录
运行命令 ./srv_tk add -b tee.bin -s ta_xor.bin -o tee.bin
运行脚本 ./rel-imx.sh
生成最终可加载执行文件tee.img
将生成的tee.img按照前文描述烧录到开发板中
4.6 动态TA的使用
将68572413bdacdfce0112233445566778.bin文件推送到开发/tee/ta目录
tafsd守护进程会在ca_xor调用该TA服务时自动加载该TA程序
复制/tw/bin/目录下的 atf.bin, tee.bin到/tw/tools目录
运行脚本 ./rel-imx.sh
生成最终可加载执行文件tee.img
将生成的tee.img按照前文描述烧录到开发板中
4.7 CA的使用
将编译生成的ca_xor,置于先前创建的tee目录
运行./ca_xor
- 本页导读
- 1、配套系统
- 2、NXP系统TEE-Pro补丁
- 2.1 NXP i.MX6UL补丁包
- 2.2 NXP i.MX6QP 补丁包
- 2.3 NXP i.MX6Q 补丁包
- 3、TEE-Pro SDK发布包
- 4、TEE-Pro的开发部署
- 4.1 系统固件的烧录
- 4.2 TEE-Pro守护进程的使用
- 4.3 TA的开发编译运行
- 4.4 CA,TA的编译:(以xor为例说明)
- 4.5 静态TA的合并使用及tee.img的生成
- 4.6 动态TA的使用
- 4.7 CA的使用