由于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:
git checkout 4f016adae573aaadd7bf6a37f8c58a882b391ae6
Linux内核:
git clone https:
OP-TEE代码:
git clone https:
OPTEE CLIENT:
git clone https:
OPTEE XTEST
git clone https:
二. 编译
官方教程上使用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";
然后使用如下命令进行配置:
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.