NXP

FSL i.MX6 UltraLite EVK OP-TEE的移植

2019-07-12 12:31发布

由于HIKEY板对于TZPC寄存器控制位的相关资料不全,所以正在使用飞思卡尔的FSL i.MX6 UltraLite EVK Board平台,用以继续开发并应用Trustzone技术的TZASC。

一. 前期准备:

使用SD卡作为系统启动盘,将SD进行分区,并在第二个分区刷写FSL i.MX6 UltraLite EVK平台指定的linux文件系统。 U-BOOT代码:
下载U-BOOT,并使用checkout切换版本 git clone https://github.com/MrVan/uboot.git git checkout 4f016adae573aaadd7bf6a37f8c58a882b391ae6 Linux内核: git clone https://github.com/linaro-swg/linux.git OP-TEE代码: git clone https://github.com/OP-TEE/optee_os.git OPTEE CLIENT: git clone https://github.com/OP-TEE/optee_client.git OPTEE XTEST git clone https://github.com/OP-TEE/optee_test.git

二. 编译

官方教程上使用arm-poky-linux-gnueabi作为OP-TEE的交叉编译器,经测试,make toolchains命令下载的arm-linux-gnueabihf也是可以使用的。
U-BOOT编译:
切换到uboot目录下 export CROSS_COMPILE=/home/...编译器所在路径.../toolchains/aarch32/bin/arm-linux-gnueabihf- make ARCH=arm mx6ul_14x14_evk_optee_defconfig make ARCH=arm 注意:老版U-BOOT中不包含mx6ul_14x14_evk_optee_defconfig文件,所以在下载之前查看此版本下是否包含此文件。
将生成的uboot.imx文件通过dd命令烧写到SD卡中,X为SD卡在主机中的显示,一般为/dev/sdb: sudo dd if=u-boot.imx of=/dev/sdx bs=512 seek=2 conv=fsync Linux内核:
切换到linux目录下
通过修改imx6ul-14x14-evk.dts文件,使Linux加载OP-TEE固件。 @@ -23,6 +23,13 @@ reg = <0x80000000 0x20000000>; }; + firmware { + optee { + compatible = "linaro,optee-tz"; + method = "smc"; + }; + }; + regulators { compatible = "simple-bus"; #address-cells = <1>; 然后使用如下命令进行配置: make ARCH=arm imx_v6_v7_defconfig make menuconfig 选择Device Drivers下的Trusted Execution Environment support后,运行如下命令进行编译。 make ARCH=arm OP-TEE代码:
切换到optee_os目录下 PLATFORM_FLAVOR=mx6ulevk make ARCH=arm PLATFORM=imx DEBUG=1 CFG_TEE_CORE_LOG_LEVEL=0 arm-linux-gnueabihf-objdump -D out/arm-plat-imx/core/tee.elf > tee.s arm-linux-gnueabi-objcopy -O binary out/arm-plat-imx/core/tee.elf optee.bin 如果想要显示更多的调试信息,可以将CFG_TEE_CORE_LOG_LEVEL赋值为4。 OPTEE CLIENT:
切换到optee_client目录下 make ARCH=arm 编译完成后将所有文件拷贝到out/export路径下,此目录处于SD卡根目录下。 OPTEE XTEST:
切换到optee_xtest目录下 export TA_DEV_KIT_DIR=/home/min/devel/optee/optee_os/out/arm-plat-imx/export-ta_arm32/ export OPTEE_CLIENT_EXPORT=/home/min/devel/optee/optee_client/out/export/ export CROSS_COMPILE_HOST=arm-linux-gnueabihf- export CROSS_COMPILE_TA=arm-linux-gnueabihf- export CROSS_COMPILE=arm-linux-gnueabihf- make ARCH=arm 将编译生成的*.ta文件全部拷贝到SD卡的/lib/optee_armtz/下。
将生成的xtest拷贝到SD卡的/bin下

三.运行

执行如下命令加载optee.bin和Linux内核:
默认状态下mmcroot为/dev/mmcblk1p2 rootwait rw,需要修改成/dev/mmcblk0p2 rootwait rw,否则会报错。 run loadfdt; run loadimage; setenv mmcroot /dev/mmcblk0p2 rootwait rw fatload mmc 1:1 0x9c100000 optee.bin; run mmcargs; bootz ${loadaddr} - ${fdt_addr}; 执行如下命令运行XTEST: tee-supplicant & xtest 注意:若出现tee-supplicant不存在,可切换到/tee-supplicant下运行./tee-supplicant & 。同理xtest可以运行/bin下的xtest.