一,一般展锐的TEE 都会有TEE SDK 移植说明文档, 根据该说明文档让方案给出相关的SDK;
1,客户(方案,或者终端)提供给指纹厂商的资料如下,不同平台给出的资料会有差别,这个可与方案商或者展锐咨询:
1、9832a
A、patch 中的 tos bin
B、SDK
C、ca 用到的库文件提供
system/core/trusty/libtrusty/include/trusty/tipc.h
out/target/product/sp9832a_2c10/system/lib/libtrusty.so
2、9850k
A、IDH 中的 tos bin
B、SDK 及打包工具
C、ca 用到的库文件
system/core/trusty/libtrusty/include/trusty/tipc.h
out/target/product/sp9850ka_1h10/system/lib/libtrusty.so
D、签名用到的文件(没有开启 secure boot 时用)
out/host/linux-x86/bin/imgheaderinsert
out/host/linux-x86/lib64/libc++.so
out/host/linux-x86/lib/libc++.so
二,拿到SDK 等资料以后,开始适配SDK 编译出平台所需要的SDK .elf文件。
1,一般使用sdk中的cademo 和 tademo作为参考,在这个两个文件中添加导入指纹的接口。
7731_pike2\7731e_sdk\app\demo\cademo
7731_pike2\7731e_sdk\app\demo\tademo
2,在指纹 TA 的 manifest 中定义 uuid(参考下面的数值,多指纹方案不同指纹 ta uuid 必须不同,参考多指纹兼容方案章节):
uuid_t fpsensor_uuid = {0x4304bef6, 0x36e5, 0x4d91, { 0x94, 0xb0, 0x1e, 0xa4, 0xcd, 0x51, 0xd4, 0x0c }};
3,修改如下 port 名字:
CA、TA 通讯定义相同的端口,在tademo_ipc.h\cademo_ipc.h,比如(建议各个厂商使用自己的名字,避免冲突):“com.android.trusty.fingerprint”
#define TADEMO_PORT "com.android.trusty.tademo"
目前 tademo 中定义了两个 port,secure port 是给其他 ta 访问 tademo 用的,支付等
场景可能会用到。ca 调用 ta 的场景属于 non secure。
4,CA TA 之间通讯有 size 限制,算上消息处理头等,整体大小限制为 4K,实际可用于 CA TA 传数据为 3K 多。Demo 默认设置为 1k,增大需要修改创建 port 时候的 size 以及manifest 中堆栈大小。
/* optional configuration options here */
{
TRUSTY_APP_CONFIG_MIN_HEAP_SIZE(8 * 1024 * 1024),
TRUSTY_APP_CONFIG_MIN_STACK_SIZE(2 * 1024 * 1024),
},
5,设置SPI 组以及通讯速率,通讯模式等config参数。
spi 使用 ioctl 接口。参考代码:
#include <sprd_pal_fp_default.h>
#include <io_device_def.h>
int32_t ret;
struct WRITE_THEN_READ_STR wr;
wr.max_speed_hz = 6000000;
wr.chip_select = 0;
wr.mode = 0;
wr.bits_per_word = 8;
wr.number = 2; //是SPI的组, 使用spi0 配0, 使用spi1配1;
wr.len = 3;
wr.rxbuf = (uint8_t*)malloc(wr.len);
wr.txbuf = (uint8_t*)malloc(wr.len);
wr.debug = 0;
memset(wr.txbuf,0,wr.len);
ret = ioctl(IO_DEVICE_FP, SPI_WRITE_AND_READ, &wr);
free(wr.rxbuf);
free(wr.txbuf);
WRITE_THEN_READ_STR 结构体说明:
max_speed_hz 设置频率;
mode 设置 spi 模式;
number 设置哪个 spi,比如 spi2,则 number 为 2;
debug 开关调试时设置为 1,合入版本更改为 0;
6,签名, 一般的tee 编译出来的ta都需要经过签名方可使用。但7731e 有些是不需要签名, 因此在验证的时候可以签名或者未签名的都可以验证一下。或着咨询方案或者展锐。
如果要签名,签名工作一般由方案完成,也有个别方案不管事,需要自身与展锐沟通完成。
7,完成以上步骤以后,编译通过以后提供给客户一下文件:
1)、 指纹 TA tademo.elf (名字与第3小点一至);
2)、tademo.syms.elf(带符号表,用于 debug,非必须);
4)、 指纹 ca,上层指纹开关,selinux 等权限;
5)、 指纹驱动。
三,抓取log,确认SPI 通讯以及指纹功能是否正常。
1,在拨号界面输入*# * #83781# * # * 进入ylog界面。
kernel 搜索trusty 关键字搜索TEE的相关log。
main log 按指纹关键搜索。
2,开机kernel probe 的log 可能 ylog无法获取到,需要使用串口抓取log。