TEE(可信执行环境)驱动程序 API¶
内核提供了一个 TEE 总线基础设施,其中可信应用程序表示为一个通过通用唯一标识符 (UUID) 标识的设备,客户端驱动程序注册一个支持的设备 UUID 表。
TEE 总线基础设施注册以下 API
- match()
遍历客户端驱动程序 UUID 表,以查找与设备 UUID 对应的匹配项。如果找到匹配项,则通过客户端驱动程序注册的相应探测 API 探测此特定设备。每当在 TEE 总线上注册设备或客户端驱动程序时,都会发生此过程。
- uevent()
每当在 TEE 总线上注册新设备以自动加载模块化的客户端驱动程序时,都会通知用户空间 (udev)。
TEE 总线设备枚举特定于底层 TEE 实现,因此保留给 TEE 驱动程序提供相应的实现。
然后,TEE 客户端驱动程序可以使用 include/linux/tee_drv.h 中列出的 API 与匹配的可信应用程序进行通信。
TEE 客户端驱动程序示例¶
假设 TEE 客户端驱动程序需要与 UUID 为 ac6a4085-0e82-4c33-bf98-8eb8e118b6c2
的可信应用程序进行通信,那么驱动程序注册代码段如下所示
static const struct tee_client_device_id client_id_table[] = {
{UUID_INIT(0xac6a4085, 0x0e82, 0x4c33,
0xbf, 0x98, 0x8e, 0xb8, 0xe1, 0x18, 0xb6, 0xc2)},
{}
};
MODULE_DEVICE_TABLE(tee, client_id_table);
static struct tee_client_driver client_driver = {
.id_table = client_id_table,
.driver = {
.name = DRIVER_NAME,
.bus = &tee_bus_type,
.probe = client_probe,
.remove = client_remove,
},
};
static int __init client_init(void)
{
return driver_register(&client_driver.driver);
}
static void __exit client_exit(void)
{
driver_unregister(&client_driver.driver);
}
module_init(client_init);
module_exit(client_exit);