[CA/TA开发]-06-CA到TA的传参(4种方式)

本文档详细介绍了如何从CA传递参数到TA,包括克隆CA/TA代码、修改源码、编译、打包到buildroot、在qemu_v8环境中测试的过程。通过实例展示了在TEE(Trusted Execution Environment)环境下进行RSA运算和测试的步骤。
你已经正确创建了交叉编译器的 wrapper 脚本: ```sh #!/bin/sh # 包装真正的 GCC,并自动添加 -isysroot exec /home/user/nvr8064/torchlight/../nvt98635/toolchain/usr/bin/aarch64-ca76ca55-linux-gnu-gcc \ -isysroot /home/user/nvr8064/nvt98635/toolchain/aarch64-ca76ca55-linux-gnu/sysroot \ "$@" ``` ✅ 这个脚本本身语法正确,作用是: > 在每次调用 `aarch64-ca76ca55-linux-gnu-gcc` 时,**自动插入 `-isysroot ...` 参数**,确保能找到目标系统的头文件(如 `stdio.h`)。 --- ## 🔍 为什么还需要这个?—— Kconfig 的探测机制详解 Linux 内核构建系统(特别是 `scripts/kconfig/conf.c`)会做如下事情来“验证”你的 C 编译器是否可用: ```c #include <stdio.h> int main(void) { return 0; } ``` 然后执行: ```bash $CC -o test_compiler test.c ``` 如果失败 → 报错: ``` Sorry, this C compiler is not supported. ``` ⚠️ 即使你的 `gcc` 能运行,但 **找不到 `stdio.h`**,也会失败! 而 `stdio.h` 位于: ``` /sysroot/usr/include/stdio.h ``` 所以必须通过 `-isysroot /path/to/sysroot` 告诉编译器去哪里找这些头文件。 否则即使工具链完整,Kconfig 仍会拒绝它。 --- ## ✅ 确保 wrapper 生效的关键步骤(很多人漏掉!) 你现在虽然写了 wrapper,但还必须完成以下几步才能让它真正生效: --- ### ✅ 步骤 1:确认 `PATH` 中 wrapper 在前 ```bash export PATH="$HOME/my-cross-tools:$PATH" ``` 📌 必须放在原工具链路径 **之前**,否则系统会使用 `/opt/toolchain/usr/bin/aarch64-xxx-gcc` 而不是你的包装脚本。 验证命令: ```bash which aarch64-ca76ca55-linux-gnu-gcc ``` ✅ 正确输出应为: ``` /home/user/my-cross-tools/aarch64-ca76ca55-linux-gnu-gcc ``` ❌ 错误输出(说明没生效): ``` /home/user/nvr8064/nvt98635/toolchain/usr/bin/aarch64-ca76ca55-linux-gnu-gcc ``` --- ### ✅ 步骤 2:设置环境变量 ```bash export CROSS_COMPILE=aarch64-ca76ca55-linux-gnu- export ARCH=arm64 ``` > 注意:`CROSS_COMPILE` 后面要有 `-`,Makefile 会拼接成 `${CROSS_COMPILE}gcc` --- ### ✅ 步骤 3:清理旧构建缓存 OpenWrt 和 Linux 内核会缓存配置结果。必须彻底清除: ```bash cd ~/nvr8064/torchlight make clean # 或更彻底: make dirclean ``` > ⚠️ `dirclean` 会删除所有下载、解压、配置过的源码目录,确保从零开始。 --- ### ✅ 步骤 4:重新构建 ```bash make defconfig # 如果你有预设配置 # 或者 copy 预先准备好的 .config # cp ../config/.config .config make V=s # 开启详细输出,便于调试 ``` --- ### ✅ 步骤 5:验证 wrapper 是否被调用 在 `make V=s` 输出中搜索: ```text HOSTCC scripts/kconfig/conf.o ``` 查看实际命令是否包含 `-isysroot`: ```bash aarch64-ca76ca55-linux-gnu-gcc -isysroot ... -c conf.c ``` 如果是,则说明 wrapper 成功注入参数。 --- ## 🧪 手动测试 wrapper 是否能编译标准头文件 运行这个测试: ```bash echo '#include <stdio.h> int main() { return 0; }' | aarch64-ca76ca55-linux-gnu-gcc -x c -o test_hello - ``` ✅ 成功:生成 `test_hello` 可执行文件 ❌ 失败:提示 `stdio.h: No such file or directory` → wrapper 没生效或路径错 再检查: ```bash file test_hello ``` 应输出: ``` test_hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, ... ``` --- ## 🔁 常见错误排查清单 | 问题 | 检查方法 | 解决方案 | |------|----------|-----------| | wrapper 没被调用 | `which gcc` 返回原路径 | 修改 `PATH` 顺序 | | `-isysroot` 路径错误 | `ls $sysroot/usr/include/stdio.h` 不存在 | 检查 sysroot 路径拼写 | | 工具链不完整 | `find sysroot -name stdio.h` 找不到 | 重新构建 Buildroot 工具链 | | 权限不足 | `chmod +x wrapper` | 添加可执行权限 | | 使用了 `CC=` 覆盖 | Makefile 中硬编码 CC | 改用 wrapper 替换整个工具链 | --- ## ✅ 最终推荐流程(一键执行) ```bash # 1. 创建 wrapper(已做) mkdir -p ~/my-cross-tools cat > ~/my-cross-tools/aarch64-ca76ca55-linux-gnu-gcc << 'EOF' #!/bin/sh exec /home/user/nvr8064/torchlight/../nvt98635/toolchain/usr/bin/aarch64-ca76ca55-linux-gnu-gcc \ -isysroot /home/user/nvr8064/nvt98635/toolchain/aarch64-ca76ca55-linux-gnu/sysroot \ "$@" EOF chmod +x ~/my-cross-tools/aarch64-ca76ca55-linux-gnu-gcc # 2. 设置环境 export PATH="$HOME/my-cross-tools:$PATH" export CROSS_COMPILE=aarch64-ca76ca55-linux-gnu- export ARCH=arm64 # 3. 清理构建 cd ~/nvr8064/torchlight make dirclean # 4. 重新构建 make defconfig make V=s ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arm精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值