You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决PocketBeagle2 TF-A交叉编译的PIE DT_TEXTREL链接失败?

解决TrustedFirmware-A编译“creating DT_TEXTREL in a PIE”链接错误

原因分析

GNU ld 2.46+版本强化了对PIE(位置无关可执行文件)中TEXTREL(文本段重定位)的检查,默认禁止生成带TEXTREL的PIE文件。而TI AM625对应的TrustedFirmware-A代码或编译参数未适配该严格检查规则,加上crossdev生成的aarch64交叉工具链可能默认启用了PIE相关选项,最终触发链接错误。

具体解决方法

1. 直接添加链接器参数跳过检查

在编译命令中追加LDFLAGS="--no-warn-textrel",强制链接器忽略TEXTREL的错误提示:

make CROSS_COMPILE=aarch64-unknown-linux-gnu- PLAT=k3 TARGET_BOARD=pocketbeagle2 LDFLAGS="--no-warn-textrel"

如果使用官方编译脚本,可在脚本中插入该参数覆盖默认配置。

2. 禁用交叉工具链默认的PIE选项

crossdev生成的aarch64工具链可能默认开启了-pie编译选项,可通过临时环境变量覆盖:

export CFLAGS="-fno-pie"
export LDFLAGS="-no-pie"
make CROSS_COMPILE=aarch64-unknown-linux-gnu- PLAT=k3 TARGET_BOARD=pocketbeagle2

也可修改工具链配置文件(通常在/usr/aarch64-unknown-linux-gnu/etc/env.d/目录下),移除默认的PIE相关编译标志。

3. 修改TF-A平台配置文件

找到TF-A的AM625平台配置文件(如plat/ti/k3/include/plat_make_helper.mk),检查是否存在强制启用PIE的配置,将其修改为禁用PIE:

# 注释或替换原PIE启用配置
# PLAT_LDFLAGS += -pie
PLAT_LDFLAGS += -no-pie

4. 临时降级binutils版本(备选方案)

若以上方法均无效,可临时降级binutils到2.45版本规避严格检查:

emerge =sys-devel/binutils-2.45-r1

完成TF-A编译后,再恢复到当前的2.46.0版本即可。

内容的提问来源于stack exchange,提问作者Ender

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.09 22:02:31