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);