Memory 理解嵌入式软件中的链接器脚本空载部分

Memory 理解嵌入式软件中的链接器脚本空载部分,memory,linker,embedded,loader,firmware,Memory,Linker,Embedded,Loader,Firmware,根据ld的GNU文档,NOLOAD部分工作如下: “(NOLOAD)”指令将标记运行时不加载的节 时间链接器将正常处理该节,但会标记它 这样程序加载器就不会将其加载到内存中 现在,关于程序加载器,根据维基百科: 嵌入式系统通常没有加载程序,而是代码 直接从ROM执行,以加载操作系统 本身,作为引导的一部分,使用一个专门的引导加载程序 那么,NOLOAD节对FW/嵌入式软件究竟有什么作用?NOLOAD节定义了一个节,该节需要正确链接程序,但不能加载到内存中。例如,您可能需要将程序与ROM中的某些代

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

“(NOLOAD)”指令将标记运行时不加载的节 时间链接器将正常处理该节,但会标记它 这样程序加载器就不会将其加载到内存中

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

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


那么,
NOLOAD
节对FW/嵌入式软件究竟有什么作用?
NOLOAD节定义了一个节,该节需要正确链接程序,但不能加载到内存中。例如,您可能需要将程序与ROM中的某些代码链接,因此您告诉链接器将ROM中的代码标记为
NOLOAD
。那么,将加载程序的工具(调试器、操作系统或其他什么)将不会加载这部分代码。

换句话说,升级FW时,您将不想覆盖的部分标记为NOLOAD,对吗?它更多地用于ROM(无论如何都无法写入)或RAM(您不希望加载程序出于某种原因初始化RAM).
NOLOAD
节不会是链接器生成的应用程序的结果二进制映像的一部分。NOLOAD在嵌入式项目中非常有用,可以确保RAM块未初始化或归零。例如,如果您希望该RAM的内容在软件重置期间不会丢失其值(例如,如果您希望根据重置原因设置变量)。另一个有用的应用程序是将信息从引导加载程序传递到应用程序,而应用程序启动代码不会覆盖该内存区域的值。当然,在这种情况下,启动加载程序和应用程序链接器文件都需要声明完全相同的内存区域位置和大小。我将一些部分标记为
NOLOAD
,但它们仍然显示为可加载段。我问过这个问题