我从事的产品是由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吗,除了我需要的几个符号,如何?
答案 0 :(得分:0)
我前一段时间也面临着同样的问题。假设存在一个带有签名void* callMeDynamic()
的函数,我已经在VxWorks 6.8上实现了以下动态链接功能:
使用loadModule()
加载所需的目标文件。
获取函数的地址。
我找不到实现此步骤的简便方法。我发现了以下解决方法。
2.1。创建管道并按照Using a VxWorks Pipe
中所述转移标准输出 2.2。调用lkup(callMeDynamic)
并使用上述管道保存输出。
2.3。解析lkup转储的输出并获取入口函数的地址。
希望这会有所帮助。
答案 1 :(得分:0)
回答我的问题:
在调用loadModule(myModule.o)时,myModule中是否有一个函数在加载后立即被调用?
答案:未使用。
我可以像在Linux中一样使用缺少外部符号的方式编译VIP项目吗?稍后将在我的模块中使用ld()时重新放置?
答案:不,VIP是完全链接的,不能包含未定义的符号。
您可以具有指向函数的指针,并在它们可用时分配其地址。
我可以限制Symbol-Table来分配sym-tbl吗,除了我需要的几个符号,如何?
答案:是的,我在制作文件中使用了stripppc -K <symbol_to_keep> ...
命令来实现这一目标。