【问题标题】:DLL in microprocessors?微处理器中的DLL?
【发布时间】:2015-08-02 23:24:14
【问题描述】:

在阅读和学习 stackoverflow 几个月后,我决定发布一个我无法解决的问题。

我想向微处理器实时添加程序代码(某种 .dll)。我的意思是,假设我有一组功能(例如 5 个过滤器)在微处理器中运行,我希望用户加载另一个新功能(过滤器),但只是将那段代码下载到核心,而不是再次下载前 5 个加上新的(引导加载所有固件)。

我还没有找到任何关于如何实现它的信息。有什么想法吗?

【问题讨论】:

  • 您的目标是哪个操作系统? DLL 是微软的东西。其他操作系统使用,例如共享对象文件,这是一个类似的概念,但不同类型的可执行格式。您希望目标设备上的其他应用程序使用这个过滤器库,还是只供您的应用程序使用?

标签: arm boot bootloader firmware


【解决方案1】:

首先,您需要为过滤器预留一些内存空间。我假设您不会使用内存映射,因此,假设您选择将 4kB 保留在 0x00100000(这是一个示例,也许这个地址在您的系统上甚至不可用)。然后您可以编写过滤器,并使用链接器脚本将您的代码放在 0x00100000 和 0x00100FFF 之间。

现在,您需要在将加载到 0x00100000 的代码中找到您的过滤器。为此,一种解决方案是将您的函数放在程序的特定部分,但这需要在您的固件中有一个 ELF(或任何其他可链接格式)加载程序。一个更简单的解决方案是在代码的开头强制一个包含函数地址的数组。然后,您在 0x00100000 处加载代码并执行

int (*foo0)(int) = *((int*)0x00100000);
int (*foo1)(int) = *((int*)0x00100004);
int (*foo2)(int) = *((int*)0x00100008);
int (*foo3)(int) = *((int*)0x0010000c);
int (*foo4)(int) = *((int*)0x00100010);

你的每个函数都有一个指针。

这种方法非常有限。您必须为您的过滤器代码保留一些内存,您的过滤器代码必须适合它,并且您的过滤器代码必须是独立的:它不能引用主固件中的任何变量或函数。另一方面,它的实现非常简单,应该可以满足大多数引导加载程序的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2020-09-25
    • 2021-12-03
    • 2018-06-05
    • 1970-01-01
    相关资源
    最近更新 更多