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