在VxWorks下如何动态加载.out文件,下面是实际的代码,供参考:
//Device.cpp
#include "other.h"
#ifdef __cplusplus
extern "C" {
#endif
int initDevice(char *arg);
#ifdef __cplusplus
}
#endif
int initDevice(char *arg)
{
printf("%s\n", arg);
}
生成的.out文件需对其使用如下命令
chmod.exe a+rx Device.out
int dynLoadOut( )
{
char szDeviceOutPath[128] = "/ata0a/App/Device.out";
for (int j = 0; j < 3; j++)
{
int fdX = open (szDeviceOutPath, O_RDONLY, 0644);
if (fdX == ERROR )
{
printf("openfile error:%s\n", szDeviceOutPath);
taskDelay(1000);
continue;
}
else
{
MODULE_ID modID = loadModule (fdX, LOAD_ALL_SYMBOLS);
close (fdX);
if (modID == 0)
{
printf("loadModule error\n");
return 1;
}
break;
}
}
printf("loadModule ok\n");
extern SYMTAB_ID sysSymTbl;
FUNCPTR deviceEntry = 0;
SYM_TYPE type;
STATUS stus = symFindByName(sysSymTbl, "initDevice", (char**)&deviceEntry, &type);
if (stus == ERROR)
{
printf("symFindByName error\n");
return 1;
}
else
{
printf("deviceEntry = 0x%x, type = %d\n", (int)deviceEntry, (int)type);
char szPara[128] = "have a test!"
(*deviceEntry)(szPara);
}
}