基于Yocto项目 在linux上构建optee-example

16 篇文章 6 订阅
14 篇文章 21 订阅

关于系统构建(yocto、openwrt)等方面的更多、更新的技术文章,欢迎登陆公众号:嵌入式那些事儿
如果您在使用Yocto构建Linux系统,凑巧,您还在玩OP-TEE,那么这篇文章是OP-TEE构建到Linux上的必读文章之一。

本文教您如何使用Yocto在Linux系统  imx6q imx6ul构建OP-TEE系统,及编译OP-TEE的应用代码。
前期,已使用Yocto 在imx6q上成功构建linux系统。所选的配置选项为:
1.清单版本为:imx-5.4.24-2.1.0.xml;
2.镜像的名字为:imx-image-full;
3.机器型号为:imx6qsabresd;
op-tee简介:是一种开源的加密技术系统,有几个厂家和组织都开发了自己的tee OS,但是所有方案的外部接口都会遵循GP(GlobalPlatform)标准,OP-TEE就是其中非常优秀的一个。op-tee包含optee-os、optee-client、optee-test、optee-example等部分。本节的目的就是想把optee-example构建到系统中去。

0.前期构思的几种方案

思路一:从Yocto中把optee的源码拷出,把自己写的optee-example程序放入optee目录下,自己使用交叉编译链进行编译,然后把生成的可执行文件和*.ta文件考入文件系统中对应的位置;
思路二:自己修改配置文件,写optee-example_xxx.imx.bb文件,进行编译。在进行该过程的时候发现第三种方法;
思路三:在openembedded的网站可以查询到你想要的不同版本的layers、recipes、machines、classes等。

http://layers.openembedded.org/
http://layers.openembedded.org/layerindex/branch/master/layers/

1.optee-example_xxx.imx.bb文件的获取

在该网站下,Branch目录下选择你的yocto版本,可以通过如下命令查询你的版本号

vim Project/meta-poky/conf/distro/poky.conf

结果如下,版本号DISTRO_VERSION = “3.0.2”

DISTRO = "poky"
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
DISTRO_VERSION = "3.0.2"
DISTRO_CODENAME = "zeus"
SDK_VENDOR = "-pokysdk"
SDK_VERSION = "${@d.getVar('DISTRO_VERSION').replace('snapshot-${DATE}', 'snapshot')}"
MAINTAINER = "Poky <poky@yoctoproject.org>"
TARGET_VENDOR = "-poky"
LOCALCONF_VERSION = "1"

在网页中选取版本为3.0,在layers中搜索“optee”,选择layers name 为 meta-optee ,进入后发现里面有5个相关的分别是:
在这里插入图片描述
其中optee-client 、optee-os、optee-test版本均为3.7.0,和我们yocto3.0.2中的版本是一样的。optee-example的版本是1.0,说明该版本就没怎么更新。点击optee-example进入详情页面:

optee-examples 1.0
在这里插入图片描述
Sources

git://github.com/linaro-swg/optee_examples.git     

点击 recipes-security/optee/optee-examples.bb ,可看到配方内容。我们可把该配方移植到我们的项目中去。

2.optee-example构建思路及过程

如果对optee项目几个重要文件夹介绍:
optee-os:optee系统的内核源码和相关文档,编译后该目录会产生optee的镜像文件;
optee-client:CA程序调用的用户空间的接口库(libteec)的源码;守护进程tee_supplicant等;
optee-test:这是官方提供的测试程序xtext的源码,为optee中提供各种算法的逻辑并提供相应的测试程序;
optee-example:该目录官方用来存放TA和CA的示例代码。也可在该目录下编写自己的测试代码。

其中optee-example和optee-test类似,一个是系统提供的测试例程,另一个是自己的测试例程。这里根据yocto3.0.2对optee-test的构建,来修改相应的配置文件,完成optee-example的构建过程。sources目录下存放的是一些构建所需的配置文件,包括类、配方等文件,在该目录下搜索:

hann@ubuntu:~/bin/imx-yocto-bsp/sources$ grep -Enr "optee-test"

得到如下搜索结果:

meta-freescale/recipes-security/optee-imx/optee-test_3.2.0.imx.bb:15:OPTEE_TEST_SRC ?= "git://source.codeaurora.org/external/imx/imx-optee-test.git;protocol=https"
meta-freescale/conf/machine/include/imx-base.inc:281:PREFERRED_VERSION_optee-test_mx8   ?= "3.2.0.imx"
meta-imx/meta-sdk/recipes-fsl/packagegroup/packagegroup-fsl-optee-imx.bb:11:RDEPENDS_${PN} += "optee-client optee-os optee-test"
meta-imx/meta-bsp/recipes-security/optee-imx/optee-test_3.7.0.imx.bb:1:require optee-test.imx.inc
meta-imx/meta-bsp/recipes-security/optee-imx/optee-test_3.7.0.imx.bb:9:#OPTEE_TEST_SRC ?= "git://source.codeaurora.org/external/imx/imx-optee-test.git;protocol=https"
meta-imx/meta-bsp/recipes-security/optee-imx/optee-test.imx.inc:3:require recipes-security/optee-imx/optee-test_3.2.0.imx.bb
meta-imx/meta-bsp/conf/layer.conf:126:PREFERRED_VERSION_optee-test_mx6 = "3.7.0.imx"
meta-imx/meta-bsp/conf/layer.conf:127:PREFERRED_VERSION_optee-test_mx7 = "3.7.0.imx"
meta-imx/meta-bsp/conf/layer.conf:128:PREFERRED_VERSION_optee-test_mx8 = "3.7.0.imx"
meta-imx/meta-bsp/conf/layer.conf:136:PREFERRED_VERSION_optee-test ?= "3.2.0.imx"
meta-imx/meta-bsp/conf/layer.conf:142:PREFERRED_VERSION_optee-test_mx8   ?= "3.7.0.imx"

分析得知:
1、meta-imx/meta-bsp/recipes-security/optee-imx/optee-test_3.7.0.imx.bb该目录下,存放optee-test_3.7.0.imx.bb;该文件还存在如下依赖关系

optee-test_3.7.0.imx.bb
	require optee-test.imx.inc
		require recipes-security/optee-imx/optee-test_3.2.0.imx.bb

在该路径下把我们从http://layers.openembedded.org/ 获取的optee-example_1.0.imx.bb 文件放到该路径下
2.meta-imx/meta-sdk/recipes-fsl/packagegroup/packagegroup-fsl-optee-imx.bb:11:RDEPENDS_KaTeX parse error: Expected group after '_' at position 58: … 该文件中,有RDEPENDS_̲{PN} += “optee-client optee-os optee-test”,此处对包进行追加:目前系统中仅编译了optee-client optee-os optee-test 三项,应该此处添加optee-example
3.meta-imx/meta-bsp/conf/layer.conf
在该文件下有很多版本的配置,如果不放心,仿PREFERRED_VERSION_optee-test_mx6的添加方法,配置optee-example;

3.编译及解决相应bug

配置完成进行编译:

~/bin/imx-yocto-bsp/build-xwayland$ bitbake optee-example 

/************************************/
出现错误日志为:

cp: cannot stat 'acipher/ta/*.ta': No such file or directory
cp: cannot stat 'hello_world/ta/*.ta': No such file or directory
cp: cannot stat 'hotp/ta/*.ta': No such file or directory
cp: cannot stat 'aes/ta/*.ta': No such file or directory
cp: cannot stat 'random/ta/*.ta': No such file or directory
cp: cannot stat 'secure_storage/ta/*.ta': No such file or directory
make: *** [Makefile:28: prepare-for-rootfs] Error 1

提示找不到生成 *.ta的目录;参考optee-test_3.7.0.imx.bb文件,可尝试修改:在optee-example_1.0.imx.bb中添加如下代码:

do_compile() {
    if [ ${DEFAULTTUNE} = "aarch64" ];then
        export TA_DEV_KIT_DIR=${STAGING_INCDIR}/optee/export-user_ta_arm64/
        export ARCH=arm64
    else
        export TA_DEV_KIT_DIR=${STAGING_INCDIR}/optee/export-user_ta_arm32/
        export ARCH=arm
    fi
    #export CROSS_COMPILE_TA=${HOST_PREFIX}
    oe_runmake
 }

对optee-example_1.0.imx.bb中该行代码进行替换:

--- TA_DEV_KIT_DIR = "${STAGING_INCDIR}/optee/export-user_ta_arm"
+++ TA_DEV_KIT_DIR = "${STAGING_INCDIR}/optee/export-user_ta_arm32"

/************************************/
出现错误日志为:

optee-example-1.0.imx-r0 do_package_qa: QA Issue: No GNU_HASH in the ELF binary /home/hann/bin/imx-yocto-bsp/build-xwayland/tmp/work/imx6qsabresd-poky-linux-gnueabi/optee-example/1.0.imx-r0/packages-split/optee-example/usr/bin/optee_example_secure_storage, didn't pass LDFLAGS?

分析知,在生成的ELF二进制文件中没有进行HASH计算;参考该篇文章

https://www.cnblogs.com/Ph-one/p/13131870.html

可尝试修改:

FILES_${PN} += "${nonarch_base_libdir}/optee_armtz/"
+++ INSANE_SKIP_${PN} = "ldflags"

再次编译

hann@ubuntu:~/bin/imx-yocto-bsp/build-xwayland$ bitbake optee-example
.............
NOTE: Executing Tasks
NOTE: Setscene tasks completed
NOTE: Tasks Summary: Attempted XXX tasks of which XXX didn't need to be rerun and all succeeded.
...........

至此,optee-example,成功的编译进linux系统中去。Here are files I changed:

meta-fsl-bsp-release/imx/meta-sdk/recipes-fsl/packagegroup/packagegroup-fsl-optee-imx.bb # modified
meta-fsl-bsp-release/imx/imeta-bsp/recipes-security/optee-imx/optee-example_1.0.imx.bb # new

微信公众号:嵌入式那些事儿
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值