[正文内容]

ELD:为嵌入式系统引入一种新的开源嵌入式链接器工具

作者: Shankar Kalpathi Easwaran 2025年4月10日

Sign up for Developer monthly newsletter-image 注册开发者月度新闻邮件 加入全球数千名开发者的行列,通过我们每月精心策划的新闻邮件接收最新的新闻和更新。 注册

Come for support, stay for the community-image 寻求支持,留在社区 获得专家的支持,与志同道合的开发者联系,并参与专属的虚拟活动。 加入开发者 Discord

在 Qualcomm Technologies, Inc.,嵌入式链接器在我们的软件栈中扮演着至关重要的角色。虽然许多链接器在传统平台上运行良好,但在嵌入式系统方面往往有所欠缺。

嵌入式项目有其独特的需求,例如:

为了应对这些挑战,我们开发了一个名为 eld 的链接器,它源自 mclinker。该链接器旨在与 ELF 文件配合使用,并专门为满足嵌入式社区的需求而定制。

eld 链接器包含在 Qualcomm 编译器工具链中,并尽可能利用 LLVM 组件和库。我们的客户依靠 eld 构建在 Qualcomm Technologies 硬件上运行的镜像。

我们很高兴能开源 eld 链接器!我们的目标是与链接器和系统软件社区合作,开发新功能并增强其能力。从 GitHub 下载 eld

功能

该链接器完全符合 GNU 标准,包括读取输入文件、符号解析和生成符合 GNU 标准的输出。

该链接器支持以下目标平台:

该链接器包含 GNU 兼容链接器中常用的各种功能,包括:

此外,该链接器还对带有自定义扩展的链接器脚本提供成熟的支持。

扩展功能

该链接器还包含许多旨在增强用户体验的功能,例如:

链接器插件

为了响应客户对检查和更改镜像布局、扩展链接器功能以用于意外用例以及生成自定义报告的需求不断增长,我们开发了链接器插件。

这些插件允许客户创建在链接时运行的自定义 Pass,从而提供完全的用户控制和链接器管理,并侧重于诊断。

该插件基础设施还允许工具链开发人员将链接器视为透明组件,从而促进对镜像中假设的仔细管理,如果违反假设,则发出错误或警告,并在源代码中编码信息以供链接器使用。

此基础设施还有助于编译器开发人员做出布局决策,使他们能够:

Qualcomm Technologies 产品对链接器的使用

该链接器已应用于各种 Qualcomm Technologies 的产品中,包括:

链接器源代码组织

链接器源代码分为三个主要部分:

核心链接器包含最关键的功能,而特定于目标的覆盖则有助于自定义核心链接器提供的功能。

这种封装允许开发人员修改和增强特定于目标的功能,而不会影响其他目标。

单元测试分为两类:

测试

该链接器包含一套全面的单元测试用例,这些用例被设计成易于阅读和修改。这些测试涵盖链接器本身和各种链接器插件示例,帮助客户了解强大的链接器插件基础设施。

我们的团队还在模拟和设备平台执行内部应用程序的测试。

Eld 文档

该链接器附带了 全面的面向用户的文档,其中阐明了链接器的行为,以及一个详细的 FAQ,其中介绍了常见问题和解决方案。

联系我们

该团队致力于不断评估和引入专注于嵌入式社区的功能。

我们邀请您加入我们改进链接器并使解决方案变得更好的行列。请随时在 GitHub 上提出您想处理的任何问题,或分享我们目前不支持的使用场景。

结束语

我们希望嵌入式链接器解决方案能够解决您想要解决的用例。

我们还要感谢 eld 团队 和我们整个 LLVM 团队为增强链接器所做的持续贡献。

如果您有任何想法要分享或想与我们交谈,请随时 通过 GitHub 与我们的团队联系