部分链接的 Vxworks 图像项目 (VIP)
Partially Linked Vxworks Image Project (VIP)
我工作的产品结构为我的 VIP 项目引用的几个 DKM 项目。
不过,有一个 "Unknown" 函数实现,稍后将在初始化阶段加载。
为了加载它:
1. 我声明了一个函数指针(funcPtr)。
2. 在我调用 LoadModule()
之后。 ld()
3.调用symFind()
获取新加载符号的地址
4.分配funcPtr
地址。
我对这个解决方案有疑问,因为我的发布版本中不能有符号-table。
它被视为敏感的组织数据,但没有它我无法使用 symFind()
以下任何问题都可以缓解或解决我的问题,所以我将不胜感激:)
调用loadModule(myModule.o)
时,myModule中是否有函数在加载后立即调用?
我可以编译缺少 extern 符号的 VIP 项目吗,例如 linux。
稍后当我为我的模块使用 ld() 时,它会被重新定位?
我可以限制 Symbol-Table 来分配 sym-tbl 除了我需要的几个符号,如何?
前段时间我遇到了同样的问题。我已经实现了如下动态链接工具(在 VxWorks 6.8 上),假设存在一个签名为 void* callMeDynamic()
:
的函数
使用loadModule()
加载需要的目标文件。
获取函数的地址。
我找不到实现这一步的简单方法。我找到了以下解决方法。
2.1。创建管道并按照 Using a VxWorks Pipe
中所述转移标准输出
2.2。调用 lkup(callMeDynamic)
并使用所述管道保存输出。
2.3。解析 lkup 转储的输出并获取您的入口函数的地址。
- 转换并将获得的地址分配给合适的函数指针
- 根据需要调用函数
希望对您有所帮助。
回答我的问题:
在调用loadModule(myModule.o)时,myModule中是否有加载后立即调用的函数?
回答:没用过。
我可以编译缺少外部符号的 VIP 项目吗,例如 linux。稍后当我为我的模块使用 ld() 时,它会被重新定位吗?
回答:不能,VIP是全链接的,不能有未定义的符号。
您可以拥有指向函数的指针,并在它们可用时分配它们的地址。
我可以限制 Symbol-Table 分配 sym-tbl 除了我需要的几个符号,如何?
回答:是的,我在 make-file 中使用 stripppc -K <symbol_to_keep> ...
命令来实现它。
我工作的产品结构为我的 VIP 项目引用的几个 DKM 项目。
不过,有一个 "Unknown" 函数实现,稍后将在初始化阶段加载。
为了加载它:
1. 我声明了一个函数指针(funcPtr)。
2. 在我调用 LoadModule()
之后。 ld()
3.调用symFind()
获取新加载符号的地址
4.分配funcPtr
地址。
我对这个解决方案有疑问,因为我的发布版本中不能有符号-table。
它被视为敏感的组织数据,但没有它我无法使用 symFind()
以下任何问题都可以缓解或解决我的问题,所以我将不胜感激:)
调用
loadModule(myModule.o)
时,myModule中是否有函数在加载后立即调用?我可以编译缺少 extern 符号的 VIP 项目吗,例如 linux。 稍后当我为我的模块使用 ld() 时,它会被重新定位?
我可以限制 Symbol-Table 来分配 sym-tbl 除了我需要的几个符号,如何?
前段时间我遇到了同样的问题。我已经实现了如下动态链接工具(在 VxWorks 6.8 上),假设存在一个签名为 void* callMeDynamic()
:
使用
loadModule()
加载需要的目标文件。获取函数的地址。
我找不到实现这一步的简单方法。我找到了以下解决方法。
2.1。创建管道并按照 Using a VxWorks Pipe
中所述转移标准输出2.2。调用 lkup(callMeDynamic)
并使用所述管道保存输出。
2.3。解析 lkup 转储的输出并获取您的入口函数的地址。
- 转换并将获得的地址分配给合适的函数指针
- 根据需要调用函数
希望对您有所帮助。
回答我的问题:
在调用loadModule(myModule.o)时,myModule中是否有加载后立即调用的函数?
回答:没用过。我可以编译缺少外部符号的 VIP 项目吗,例如 linux。稍后当我为我的模块使用 ld() 时,它会被重新定位吗?
回答:不能,VIP是全链接的,不能有未定义的符号。
您可以拥有指向函数的指针,并在它们可用时分配它们的地址。我可以限制 Symbol-Table 分配 sym-tbl 除了我需要的几个符号,如何?
回答:是的,我在 make-file 中使用stripppc -K <symbol_to_keep> ...
命令来实现它。