概况和背景: 在optee SDK中使用GP标准接口开发的TA,移植到Trustonic-TEE上,编译报错了。rootcause:我开发的TA是参考optee_example repository的,这里的代码使用的是GP internal API 1.1,而Trustonic-TEE的SDK已经更新到了GP internal API 1.2.1. 恰好在这两个版本之间TEE_ObjectInfo结构体发生了变化…

详细信息如下

在使用GP接口编写的Crypto代码,在optee3.12编译通过,将其TA代码移植到Trustonic-TEE上后编译报错,错误信息如下:

Locals/Code/gp.c:363:55: error: 'TEE_ObjectInfo' {aka 'struct <anonymous>'} has no member named 'keySize'; did you mean 'dataSize'?res = TEE_AllocateOperation(&op, alg, mode, key_info.keySize);

代码如下:

 TEE_ObjectInfo key_info;res = TEE_GetObjectInfo1(key, &key_info);if (res) {EMSG("%s : error! res = 0x%x", __func__, res);return res;}res = TEE_AllocateOperation(&op, alg, mode, key_info.keySize);if (res) {EMSG("%s : error! res = 0x%x", __func__, res);return res;}

究其原因,是因为在optee3.12中,目前使用的还是1.1 spec

typedef struct {uint32_t objectType;__extension__ union {uint32_t keySize;       /* used in 1.1 spec */uint32_t objectSize;    /* used in 1.1.1 spec */};__extension__ union {uint32_t maxKeySize;    /* used in 1.1 spec */uint32_t maxObjectSize; /* used in 1.1.1 spec */};uint32_t objectUsage;uint32_t dataSize;uint32_t dataPosition;uint32_t handleFlags;
} TEE_ObjectInfo;

而在Trustonic-TEE中,该结构体使用了和GP TEE Internal Core API Specification版本到Version 1.2.1(2019)版本中一致的数据类型

typedef struct {uint32_t objectType;uint32_t objectSize;uint32_t maxObjectSize;uint32_t objectUsage;size_t dataSize;size_t dataPosition;uint32_t handleFlags;
} TEE_ObjectInfo;

最终的修改方案:将key_info.keySize改成key_info.objectSize

GP TEE_ObjectInfo结构体在不同的版本之间的变化相关推荐

  1. php各版本之间的变化,[发泄贴] 原来 PHP 每一个子版本都是不同的语言……

    PHP初学,把自己的代码部署到了一个叫做id666的免费空间,PHP版本是5.2.9 因为不想关心错误代码,于是自己封装了一个mysqli函数(我不是很懂PHP下类使用以及PDO--) 叫做safe_ ...

  2. 【Qt】信号和槽传递自定义结构体

    一.使用信号和槽传递自定义结构体 这是一个老问题了,但是每次使用都要bing,因此做个笔记整理下. 一共有三种方法,可以让结构体在信号和槽之间传递.前两种方法可以让结构体在线程之间传递,最后一种方法只 ...

  3. linux存储--文件描述符fd与FILE结构体(二)

    文件描述符fd 对于linux而言,所有对设备(对于linux而言,一切皆文件)和文件的操作都使用文件描述符来进行的. 文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开文件的记录表. ...

  4. c语言结构体与共同体课件,《结构体与共同体》PPT课件.ppt

    <<结构体与共同体>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<结构体与共同体>PPT课件.ppt(44页珍藏版)>请在装配图网上搜索. 1 ...

  5. c++ 数组 结构体

    接下来的一点时间我将会记录下我看的c++的一些心得体会,人贵在坚持,希望我可以一直坚持下去!!Go Fighting! 一.c++复合数据类型: 数组类型的一些注意事项: sizeof的用法: 当用在 ...

  6. [C++]试一试结构体struct node的构造函数

    可直接点击跳转到构造函数处 结构体概念 定义结构体 定义结构体及结构体变量 结构体变量的特点 成员调用 成员函数调用 结构体的构造函数 Upd1 Upd2 Upd3 结构体概念 在实际问题中,一组数据 ...

  7. FFmpeg源代码简单分析:结构体成员管理系统-AVClass

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  8. 小小的区分枚举与结构体

    参考洋桃电子老师讲的,添加了自己的理解 目录 一.枚举 1.枚举的定义 2.理解枚举 3.枚举在C语言中的使用格式 4.枚举的注意事项 4.枚举与数组的区别 二.结构体 1.结构体与枚举和数组之间的区 ...

  9. 结构体与共同体(联合体)的妙用

    结构体与共同体(联合体)的妙用 学习过C语言后,大家都了解了结构体与共同体.两者之间的区别是: 共同体:使几个不同类型的变量共占一段内存(相互覆盖).所占内存长度是各最长的成员占的内存长度. 结构体: ...

最新文章

  1. 深入浅出Yolov3和Yolov4
  2. python语言命令大全-python常用命令
  3. Android 系统各种StreamType 的Volume关联和Mute设置
  4. HTTP流媒体播放技术发展以及nginx点播源站
  5. NIM博弈+SG函数求解
  6. linux rc4,Linux kernel 4.8-rc4发布下载,正式版越来越近
  7. 如何修改服务器Tomcat的首页为项目
  8. Mars 如何分布式地执行
  9. 网络核心之数据交换-报文、分组交换2
  10. openstack cinder api对应的命令行接口
  11. 在CMD上运行使用java命令运行java文件时出现错误:找不到或者无法加载主类的问题 解决办法
  12. 微信小程序wxParse使用说明
  13. 世界城市与北京时差表
  14. 宇枫资本投资理财的几大定律
  15. Linux下文件属性详解
  16. 超全Altium Designer16 总结--Altium Designer
  17. 项目中身份证有效期的判断规则
  18. ubuntu 安装图片编辑工具pinta
  19. 谈谈你对Spring Bean生命周期的理解【面试】
  20. 安装wsl下的kali linux时出现的包的问题

热门文章

  1. 数据中心背后的地缘政治学
  2. 成功解决AttributeError: module tensorflow.image has no attribute resize
  3. Python语言学习之字母L开头函数使用集锦:logging日志用法之详细攻略
  4. Python语言学习之字母E开头函数使用集锦:endswith使用用法之详细攻略
  5. PuTTy:PuTTy的简介、安装、使用方法之详细攻略
  6. NLP:基于textrank4zh库对文本实现提取文本关键词、文本关键短语和文本摘要
  7. VUE:class与style强制绑定
  8. Linux文件属性和权限
  9. python中a=a+2与a+=2的区别
  10. python3.6使用chardet模块总是报错ValueError: Expected a bytes object, not a unicode object