内存映射的 gcc 链接文件,那是什么语法?

发布于 2024-11-09 04:04:05 字数 870 浏览 5 评论 0原文

当使用 gcc 为 MCU 进行交叉编译时,您向链接器提供链接器脚本文件,以便它知道如何创建最终的目标文件。

我想了解有关此类文件的更多信息,但找不到关于这些文件如何工作、它们使用哪种语法、最佳实践是什么以及应避免什么的好教程。

下面是一个精简链接文件的示例,该文件将通过“-Tlinkfile.ld”选项提供给链接器:

MEMORY
{
    ram    (rwx) : ORIGIN = 0x20000000, LENGTH = 20k
    rom    (rx)  : ORIGIN = 0x00000000, LENGTH = 128K
}
SECTIONS
{
    .  = 0x0;           /* From 0x00000000 */
    .text : 
    {
        *(.nvic_vector)  /* Vector table */
        *(.text.*)      /* Program code */
        *(.text)        /* Program code */
        *(.rodata)      /* Read only data */
    } >rom

    .  = 0x20000000;    /* From 0x20000000 */      
    .data : 
    {
        *(.data)        /* Data memory */
    } >ram AT > rom

    .bss : 
    {
        *(.bss)         /* Zero-filled run time allocate data memory */
    } >ram AT > rom
}  

/Thanks

When using gcc to cross-compile for an MCU you provide a linker script file to the linker so it knows how to create the final object file.

I would like to learn more about this type of file, but can't find a nice tutorial on how these files work, what kind of syntax they use, what are best practices, and what to avoid.

Here's an example of a stripped-down link file that would be provided to the linker with the "-Tlinkfile.ld" option:

MEMORY
{
    ram    (rwx) : ORIGIN = 0x20000000, LENGTH = 20k
    rom    (rx)  : ORIGIN = 0x00000000, LENGTH = 128K
}
SECTIONS
{
    .  = 0x0;           /* From 0x00000000 */
    .text : 
    {
        *(.nvic_vector)  /* Vector table */
        *(.text.*)      /* Program code */
        *(.text)        /* Program code */
        *(.rodata)      /* Read only data */
    } >rom

    .  = 0x20000000;    /* From 0x20000000 */      
    .data : 
    {
        *(.data)        /* Data memory */
    } >ram AT > rom

    .bss : 
    {
        *(.bss)         /* Zero-filled run time allocate data memory */
    } >ram AT > rom
}  

/Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初心 2024-11-16 04:04:05

The syntax is documented in the GNU binutils ld documentation - that's more of a reference than a tutorial, but there are various examples scattered through it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文