【问题标题】:Understanding linker script NOLOAD sections in embedded software了解嵌入式软件中的链接描述文件 NOLOAD 部分
【发布时间】:2019-12-02 12:47:13
【问题描述】:

根据ld 的 GNU 文档,NOLOAD 部分的工作方式如下:

`(NOLOAD)' 指令将标记一个在运行时不加载的部分 时间。链接器将正常处理该部分,但会标记它 这样程序加载器就不会将其加载到内存中。

现在,关于程序加载器,根据维基百科:

嵌入式系统通常没有加载器,取而代之的是代码 直接从ROM执行。为了加载操作系统 本身,作为引导的一部分,使用专门的引导加载程序。

那么,NOLOAD 部分究竟对固件/嵌入式软件有什么作用?

【问题讨论】:

    标签: memory linker embedded loader firmware


    【解决方案1】:

    NOLOAD 节定义了正确链接程序所需的节,但不得将其加载到内存中。例如,您可能需要将程序与位于 ROM 中的某些代码链接,因此您告诉链接器将 ROM 中的代码标记为NOLOAD。然后加载程序的工具(调试器、操作系统或其他)将不会加载这部分代码。

    【讨论】:

    • 换句话说,你把升级固件时不想覆盖的部分标记为NOLOAD,对吧?
    • 它更多地用于ROM(无论如何都无法写入)或RAM(您不希望加载程序出于某种原因初始化RAM)。
    • NOLOAD 部分不会成为链接器生成的应用程序生成的二进制映像的一部分。
    • NOLOAD 在嵌入式项目中很有用,可确保 RAM 块未初始化或归零。例如,如果您希望该 RAM 的内容在软件复位期间不会丢失其值(例如,如果您想设置一个带有复位原因的变量)。另一个有用的应用程序是将信息从引导加载程序传递到应用程序,而应用程序启动代码不会覆盖该内存区域的值。当然,在这种情况下,引导加载程序和应用程序链接器文件都需要声明完全相同的内存区域位置和大小。
    • 我将某些部分标记为NOLOAD,但它们仍显示为可加载段。我问过这个here
    猜你喜欢
    • 2017-02-04
    • 2018-12-29
    • 1970-01-01
    • 2012-11-29
    • 2017-03-24
    • 2013-12-11
    • 2013-01-30
    • 2017-01-15
    • 2013-06-03
    相关资源
    最近更新 更多