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

Posted Q7318

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FSL i.MX6 UltraLite EVK OP-TEE的移植相关的知识,希望对你有一定的参考价值。

由于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.

以上是关于FSL i.MX6 UltraLite EVK OP-TEE的移植的主要内容,如果未能解决你的问题,请参考以下文章

如何在i.MX6UL平台上实现硬浮点与软浮点?

I.MX6ULL 官方SDK移植

I.MX6ULL 官方SDK移植

I.MX6ULL 官方SDK移植

飞凌 i.MX6UL核心板干货合集分享

飞凌 i.MX6UL核心板干货合集分享