对于高通技术公司,嵌入式链接器在本公司的软件栈中起到非常重要的作用。虽然许多链接器在传统平台上表现良好,但在嵌入式系统领域往往力有不逮。
嵌入式项目具有独特的要求,例如:
- 高度依赖链接脚本 – 这类问题通常在主机链接中无需考虑。
- 复杂用例往往需要对链接器功能或链接脚本进行定制化扩展,以满足具体的客户要求。
为应对这些挑战,我们开发了源自mclinker、名为eld的链接器。该链接器专为处理ELF文件而设计,并特别针对嵌入式社区的需求进行了优化。
eld链接器已集成至高通编译器工具链内,并尽可能利用LLVM组件和程序库。我们的客户依赖eld来构建基于高通技术的硬件上的镜像。
我们很高兴能够将eld链接器开源!我们的目标是与链接器及系统软件社区合作,共同开发各种新功能并持续增强其能力。您可从GitHub下载eld。
功能
该链接器完全兼容GNU标准,涵盖输入文件读取、符号解析以及生成符合GNU的输出。
该链接器支持以下目标:
- AArch32与AArch64
- 高通Hexagon NPU
- RISC-V(包括Xqiu扩展)
该链接器整合了GNU兼容链接器的各种常见功能,其中包括:
- 部分链接
- 动态链接
- 静态链接
- 链接时间优化(LTO)
- 链接器优化,例如字符串合并
此外,该链接器还为带有自定义扩展的链接器脚本提供了成熟的支持。
扩展功能
该链接器还包含众多旨在提升用户体验的功能,例如:
- 易读性链接器映射文件:我们的客户支持团队广泛利用该类信息进行问题诊断和解决。这些映射文件同时支持机器可读格式,确保客户能够通过其构建的映像生成自定义报告。
- 轻松复现链接时间问题:当遇到链接时间问题时,客户共享在链接时间所使用构建产物的独特方法。
- 全面诊断选项:针对符号垃圾回收、命令行问题、警告及错误等复杂问题,提供广泛的调试能力。
链接器插件
为了满足日益增长的客户需求,包括检查和更改镜像布局、为非预期用例扩展链接器功能、以及生成自定义报告的日益增长的需求,我们开发了各种链接器插件。
利用这些插件,客户可以创建在链接时间内运行的自定义处理流程,从而可以由链接器进行完全用户控制和管理,尤其侧重诊断功能。
利用该插件架构,工具链开发人员还可以将该链接器视为透明组件,以便于精细管理映像中的假设条件(如果违反该等假设条件,则会触发错误/警告),并针对链接器假设条件对源代码中的信息进行编码。
此外,该架构还可以帮助编译器开发人员做出布局决策,以确保其能够:
- 将辅助信息从编译器传递至链接器
- 针对特定用例优化映像布局
使用链接器的高通技术公司产品
该链接器用于高通技术公司的各种产品,包括:
- 高通AI软件基础设施
- 高通5G调制解调器
- 无线局域网产品和驱动程序
- 高通固件和设备驱动程序
- 高通音频驱动程序
- Trustzone
- 使用Zephyr RTOS的众多AArch32/AArch64/RISC-V镜像
- 基于RISC-V的各种微控制器镜像
链接器源组织
链接器源代码分为三个主要部分:
- 核心链接器(按具体功能划分目录)
- 针对特定目标的覆写
- 单元测试
核心链接器包含最重要的功能特性,而针对特定目标的覆写有助于对核心链接器提供的功能实现定制化。
利用这种封装,开发人员可以修改和增强针对特定目标的功能,同时不会影响其他目标。
单元测试分为两类:
- 使用谷歌单元测试进行的单元测试
- 使用LLVM lit测试框架进行的lit测试
测试
该链接器包括一组全面的单元测试用例,该类用例具有易读性和易修改性。该类测试涵盖了链接器本身以及各种链接器插件示例,可帮助客户了解强大的链接器插件基础结构。
我们的团队还在模拟和设备平台上对内部应用程序进行测试。
该链接器附带了面向用户的全面文档,该文档阐明了链接器的行为,以及针对常见问题和解决方案的完整FAQ。
联系我们
该团队致力于持续评估和引入专注于嵌入式社区的功能特性。
我们邀请您共同努力改进该链接器,携手打造更完善的解决方案。如有问题,请在GitHub上创建issue ,或分享我们目前尚不支持的用例。
结束语
我们希望该嵌入式链接器解决方案能够解决您想要解决的用例。
我们还要感谢eld团队以及本公司的整个LLVM团队为增强该链接器所持续做出的贡献。
如果您有任何想法要分享或想要与我们交谈,可通过GitHub联系我们。
在所发布内容中表达的观点仅为原作者的个人观点,并不代表高通技术公司或其子公司(以下简称为“高通技术公司”)的观点。所提供的内容仅供参考之用,而并不意味着高通技术公司或任何其他方的赞同或表述。本网站同样可以提供非高通技术公司网站和资源的链接或参考。高通技术公司对于可能通过本网站引用、访问、或链接的任何非高通技术公司网站或第三方资源并没有做出任何类型的任何声明、保证、或其他承诺。
高通品牌产品均为高通技术公司和/或其子公司的产品。
关于作者
尚卡尔·卡尔帕提·埃斯瓦兰
首席工程师
