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

时间:2019-06-20 18:52:01

标签: linker symbols ld debug-symbols vxworks

我从事的产品是由VIP项目引用的几个DKM项目构成的。

尽管有一个“未知”函数实现,但稍后将在init阶段将其加载。

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

此解决方案存在问题,因为我的发行版本中不能包含符号表。
它被视为敏感的组织数据,但是如果没有它,我将无法使用symFind()

以下任何一个问题都可以缓解或解决我的问题,因此,我感谢任何答复:)

  • 调用loadModule(myModule.o)时, myModule 中是否有一个函数在加载后立即被调用?

  • 我可以像在Linux中那样使用缺少 extern 符号的VIP项目进行编译。 稍后在我为模块使用ld()时会重新定位?

  • 我可以限制Symbol-Table来分配sym-tbl吗,除了我需要的几个符号,如何?

2 个答案:

答案 0 :(得分:0)

我前一段时间也面临着同样的问题。假设存在一个带有签名void* callMeDynamic()的函数,我已经在VxWorks 6.8上实现了以下动态链接功能:

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

  2. 获取函数的地址。

我找不到实现此步骤的简便方法。我发现了以下解决方法。

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

中所述转移标准输出

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

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

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

希望这会有所帮助。

答案 1 :(得分:0)

回答我的问题:

  • 在调用loadModule(myModule.o)时,myModule中是否有一个函数在加载后立即被调用?
    答案:未使用。

  • 我可以像在Linux中一样使用缺少外部符号的方式编译VIP项目吗?稍后将在我的模块中使用ld()时重新放置?
    答案:不,VIP是完全链接的,不能包含未定义的符号。
    您可以具有指向函数的指针,并在它们可用时分配其地址。

  • 我可以限制Symbol-Table来分配sym-tbl吗,除了我需要的几个符号,如何?
    答案:是的,我在制作文件中使用了stripppc -K <symbol_to_keep> ...命令来实现这一目标。