# xtee-rust-sdk **Repository Path**: openkylin/xtee-rust-sdk ## Basic Information - **Project Name**: xtee-rust-sdk - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2026-04-13 - **Last Updated**: 2026-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # xtee-rust-sdk `xtee-rust-sdk` 是 xTEE 的 Rust SDK 仓库,包含 TA/CA 开发所需的示例与组件。 ## 仓库内容 - `examples/hello-world`:最小化 TA / 宿主(`host`)示例 - `examples/hello-bjca`:BJCA 证书认证示例 - `examples/param`:参数传递示例 - `crates/xtee-utee`:TA 侧运行时与接口 ## 运行说明 `vsock-manager` 的实际运行与部署不在本仓库内完成,需要在 `x-kernel` 环境中操作。 在 `x-kernel` 环境中请按顺序启动: 1. 先运行 `vsock-manager` 2. 再运行 TA ## TA 编译后签名(xtee-sdk-cli) 本仓库使用 `xtee-sdk-cli` 在 TA 编译完成后执行签名,不在 `build.rs` 中做后置签名动作。 ### tasign 安装说明 - 生产环境(使用 BJCA 证书): 安装 tasign ```bash # 编译链接时给出 BJCA 库目录(包含 libsvscc.so) export BJCA_LIB_DIR=your-bjca-lib-path export BJCA_LIB_NAME=svscc # 运行时动态库搜索路径 export LD_LIBRARY_PATH=/data/work/x1/xtee-bjca:$LD_LIBRARY_PATH cargo install tasign --features bjca --force ``` 安装 xtee-sdk-cli ```bash cargo install xtee-sdk-cli --force ``` - 测试环境(使用 TEST 证书): ```bash cargo install tasign --force ``` - 在 examples 目录执行: `make all` - 在仓库根目录执行: - `cargo run -p xtee-sdk-cli -- build-and-sign-ta --manifest-path examples/hello-world/ta/Cargo.toml` - 在 `examples/hello-world` 目录执行(使用默认 `ta/Cargo.toml`): - `cargo run -p xtee-sdk-cli -- build-and-sign-ta` - `xtee-sdk-cli` 会按 TA target 自动选择 `OBJCOPY=-objcopy`(如 `aarch64-linux-musl-objcopy`、`x86_64-linux-musl-objcopy`),请确保对应工具在 `PATH` 中。 - 默认输出路径:若不传 `--out`,签名产物输出到输入 ELF 同目录(`/.ta`)。 - 链模式通过受限枚举参数指定: - `--chain-mode ca-intermediate-leaf`(默认) - `--chain-mode ca-leaf` ### 指定 target 编译并签名 可以在执行时覆盖 target: ```bash cd /data/work/x1/xtee-rust-sdk/examples/hello-world make all CARGO_BUILD_TARGET=x86_64-unknown-linux-musl ``` 或只跑签名流程: ```bash make ta_sign CARGO_BUILD_TARGET=x86_64-unknown-linux-musl ``` 也可以直接调用 `xtee-sdk-cli` 并显式传 `--target`: ```bash cargo run -p xtee-sdk-cli -- build-and-sign-ta \ --manifest-path examples/hello-world/ta/Cargo.toml \ --target x86_64-unknown-linux-musl ``` ## TA 实现原理、`xtee_ta!` 用法、`TaConfig::emit_main_entry` 与 `user_ta_header.rs` 说明见 **[docs/ta.md](docs/ta.md)**。 ### TA 的 `main.rs` 里如何定义 `main` 默认推荐保持 `emit_main_entry=true`,此时 `main.rs` 不要再手写 `fn main`,只需在 `xtee_ta! { ... }` 之后、文件末尾 `include!(concat!(env!("OUT_DIR"), "/user_ta_header.rs"))`,由生成入口调用 `TAManager::new(Ta, uuid).run_ta()`。如果要自定义初始化或错误处理,请在 `build.rs` 将 `TaConfig` 设为 `emit_main_entry(false)`,再在 `main.rs` 自己实现 `fn main`;两种方式不要同时启用。 ## Host Android 交叉编译与签名 Host(CA)支持 Android aarch64 交叉编译和 CA 签名,使用 NDK r29 和 `cargo-ndk`。 ### 系统要求 - **NDK r29**(设置 `ANDROID_NDK_HOME` 环境变量) ```bash # 从 Android 官方下载 wget https://dl.google.com/android/repository/android-ndk-r29-linux.zip unzip android-ndk-r29-linux.zip ``` 或通过 Android Studio 的 SDK Manager 安装,NDK 位于 `~/Android/Sdk/ndk/29.x.x/`。 - **cargo-ndk**:`cargo install cargo-ndk` - **tasign-tool**:`cargo install tasign --force` - **CMake 3.16+**(Android 交叉编译建议 3.22+) ### 编译单个示例 ```bash # 设置 NDK 路径 export ANDROID_NDK_HOME=/path/to/android-ndk-r29 # 进入示例的 host 目录 cd examples/hello-world/host # 编译 Android aarch64 版本 make android # 编译 + strip + 签名 make android-sign ``` 可用的 Make 目标: | 目标 | 说明 | |------|------| | `android` | 使用 cargo-ndk 编译 Android arm64-v8a 版本 | | `android-strip` | 使用 NDK llvm-objcopy 剥离符号 | | `android-sign` | 编译 + 剥离 + CA 签名 + 验证 | 编译产物位于 `target/aarch64-linux-android/release/`。 ### AOSP 预编译部署 将签名后的 CA 二进制复制到 AOSP 源码树的预编译目录下,并编写对应的 `Android.bp`: ```bp cc_prebuilt_binary { name: "hello-world-ca", srcs: ["hello_world"], vendor: true, strip: { none: true, }, shared_libs: ["libc", "libdl"], } ``` > `strip: { none: true }` 用于保留 `.ta_signature` ELF 段,AOSP 默认 strip 会移除该段。 > > Rust 编写的 CA 通过 `xtee-teec` crate 静态链接 TEE Client 功能,不需要依赖 `libcc_teec.so`。 然后在产品的 `device.mk` 中添加: ```makefile PRODUCT_PACKAGES += hello-world-ca ```