部分链接的 Vxworks 图像项目 (VIP)

Partially Linked Vxworks Image Project (VIP)

我工作的产品结构为我的 VIP 项目引用的几个 DKM 项目。

不过,有一个 "Unknown" 函数实现,稍后将在初始化阶段加载。

为了加载它:
1. 我声明了一个函数指针(funcPtr)。
2. 在我调用 LoadModule() 之后。 ld()
3.调用symFind()获取新加载符号的地址 4.分配funcPtr地址。

我对这个解决方案有疑问,因为我的发布版本中不能有符号-table。
它被视为敏感的组织数据,但没有它我无法使用 symFind()

以下任何问题都可以缓解或解决我的问题,所以我将不胜感激:)

前段时间我遇到了同样的问题。我已经实现了如下动态链接工具(在 VxWorks 6.8 上),假设存在一个签名为 void* callMeDynamic():

的函数
  1. 使用loadModule()加载需要的目标文件。

  2. 获取函数的地址。

我找不到实现这一步的简单方法。我找到了以下解决方法。

2.1。创建管道并按照 Using a VxWorks Pipe

中所述转移标准输出

2.2。调用 lkup(callMeDynamic) 并使用所述管道保存输出。

2.3。解析 lkup 转储的输出并获取您的入口函数的地址。

  1. 转换并将获得的地址分配给合适的函数指针
  2. 根据需要调用函数

希望对您有所帮助。

回答我的问题:

  • 在调用loadModule(myModule.o)时,myModule中是否有加载后立即调用的函数?
    回答:没用过。

  • 我可以编译缺少外部符号的 VIP 项目吗,例如 linux。稍后当我为我的模块使用 ld() 时,它会被重新定位吗?
    回答:不能,VIP是全链接的,不能有未定义的符号。
    您可以拥有指向函数的指针,并在它们可用时分配它们的地址。

  • 我可以限制 Symbol-Table 分配 sym-tbl 除了我需要的几个符号,如何?
    回答:是的,我在 make-file 中使用 stripppc -K <symbol_to_keep> ... 命令来实现它。