Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded 如何将地址分配给另一个库中的外部符号,而不将其包含在ld的输出中?_Embedded_Ld - Fatal编程技术网

Embedded 如何将地址分配给另一个库中的外部符号,而不将其包含在ld的输出中?

Embedded 如何将地址分配给另一个库中的外部符号,而不将其包含在ld的输出中?,embedded,ld,Embedded,Ld,这里是上下文: 我正在为arduino开发某种微型操作系统(SAMD21 MCU)。 我希望引导加载程序加载操作系统(简单的部分,正式的部分工作,操作系统与“with bootloader.ld”脚本链接)。然后,要以类似的方式从操作系统加载应用程序,引导加载程序将加载操作系统。(对于操作系统部分来说很简单) 这样,操作系统就不必重新编程,只有应用程序会改变 这里有一个问题: 由于操作系统将包含大部分arduino代码,是否可以将应用程序链接到操作系统,而不将操作系统包含在二进制文件中?我的意思

这里是上下文:

我正在为arduino开发某种微型操作系统(SAMD21 MCU)。 我希望引导加载程序加载操作系统(简单的部分,正式的部分工作,操作系统与“with bootloader.ld”脚本链接)。然后,要以类似的方式从操作系统加载应用程序,引导加载程序将加载操作系统。(对于操作系统部分来说很简单)

这样,操作系统就不必重新编程,只有应用程序会改变

这里有一个问题:

由于操作系统将包含大部分arduino代码,是否可以将应用程序链接到操作系统,而不将操作系统包含在二进制文件中?我的意思是,在应用程序的链接步骤中,用操作系统中的符号的实际值替换任何引用,而不重新包含操作系统代码?您将向链接器脚本添加什么


目标是只需在预定义的地址重新编程应用程序代码,而无需触摸操作系统。(重新编程停止将从操作系统代码中完成,像普通引导加载程序一样对mcu进行自编程)

您至少有这些选项,所有这些选项以前都见过:

  • 为所有操作系统功能提供固定接口。这可能是一个向量或任何其他需要记住的地址。每个调用都使用一个函数号作为索引

    在应用程序的链接器脚本中定义此入口点的地址

    使用头文件中的适当函数号将所有OS函数声明为对此入口点的调用

    类似的选择:询问这个函数关于索引OS函数的地址

  • 为所有操作系统功能提供跳转表。把它放在一个固定的地址

    在应用程序的链接器脚本中定义这些跳转的地址

    在头文件中声明所有OS函数

  • 编写一个脚本,从操作系统的映射文件中提取所有操作系统函数的地址

    研究如何在应用程序的链接器脚本中包含这些地址。扩展脚本以提供正确的语法。您甚至可以使用该脚本生成应用程序的链接器脚本

    在头文件中声明所有OS函数


  • 应用程序源中的引用将通过其链接器脚本中的定义进行解析。

    您至少有这些选项,所有这些选项以前都见过:

  • 为所有操作系统功能提供固定接口。这可能是一个向量或任何其他需要记住的地址。每个调用都使用一个函数号作为索引

    在应用程序的链接器脚本中定义此入口点的地址

    使用头文件中的适当函数号将所有OS函数声明为对此入口点的调用

    类似的选择:询问这个函数关于索引OS函数的地址

  • 为所有操作系统功能提供跳转表。把它放在一个固定的地址

    在应用程序的链接器脚本中定义这些跳转的地址

    在头文件中声明所有OS函数

  • 编写一个脚本,从操作系统的映射文件中提取所有操作系统函数的地址

    研究如何在应用程序的链接器脚本中包含这些地址。扩展脚本以提供正确的语法。您甚至可以使用该脚本生成应用程序的链接器脚本

    在头文件中声明所有OS函数


  • 应用程序源中的引用将由其链接器脚本中的定义解析。

    最常见的情况是,操作系统提供带有固定参数的接口,例如中央入口点。你的操作系统是如何工作的?好吧,我不想做一个“真正的”操作系统,只是某种“应用程序加载器”,管理所有的I/O和以太网应用程序的热替换。没那么多。但是我想提供一个公开API的头,这样链接器就可以从操作系统二进制文件、.map文件或从操作系统代码生成的任何文件中检索函数地址。最常见的情况是,操作系统提供了一个带有固定参数的接口,例如一个中心入口点。你的操作系统是如何工作的?好吧,我不想做一个“真正的”操作系统,只是某种“应用程序加载器”,管理所有的I/O和以太网应用程序的热替换。没那么多。但是我想提供一个公开API的头,这样链接器就可以从操作系统二进制文件、.map文件或从操作系统代码生成的任何文件中检索函数地址