4238|6

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

vxworks模块加载 [复制链接]

 我用Tornado2.2(vxworks5.5),在虚拟机上建立文件系统FAT16格式,通过ftp从windows向目标机vxworks传递应用模块api.o,文件 可以用ls查看到,在目标机sell上运行ld(1,0,"C:/api.o"),报错"error loading,errno=0x3d0001".该文件在Tornado用target server加载可以成功运行.
api.c内容如下
#include
#include
void test()
{
pritf("welcome!");
}
然后工程中添加ldtest.c,内容主要如下
/* 打开第一个可执行文件位于ram0 */
fd = open("ram0/myapp.out", O_RDONLY, 0);
if(fd == ERROR) {
printf("Can not open application program file. \n\r") ;
return(ERROR);
} else {
printf("Application program file opened. \n\r") ;
}

/* 加载模块 */
printf("Autoload application model...\n");
if((hModule = loadModule(fd, LOAD_ALL_SYMBOLS)) == NULL) {
close(fd);
printf("LoadModule for application is error = 0x%x. \n\r", errno);
return(ERROR);
}
close(fd);

文件打开不报错,但在loadModule中报错,用errno为S_objLib_OBJ_ID_ERROR,查看源码在/target/h/objLib.h中代码
#define OBJ_VERIFY(objId,classId)                                         \
    (                                                                    \
      (                                                                         \
      (((OBJ_ID)(objId))->pObjClass == (struct obj_class *)(classId)) || \
       (                                                                 \
       ((OBJ_ID)(objId))->pObjClass &&                                         \
         (((OBJ_ID)(objId))->pObjClass ==                                \
        (CLASS_ID)(((struct obj_class *)(classId))->initRtn))                   \
       )                                                                 \
      )                                                                  \
        ?                                                                \
            OK                                                           \
        :                                                                \
            (errno = S_objLib_OBJ_ID_ERROR, ERROR)                       \
经过我测试发现错出在(((OBJ_ID)(objId))->pObjClass ==                                \
        (CLASS_ID)(((struct obj_class *)(classId))->initRtn)) 上,这一行代码看不懂.
谁能指导我一下可能错出在那一方面上?怎么解决?不胜感激.

最新回复

to frank_zhou:我加了文件系统,有才c:/ to leifeng281:我现在用workbench的simulation可以没问题,估计tornado有问题,没打过补丁,不知道和动态加载有关系啊 不管怎么样,多谢了   详情 回复 发表于 2009-1-24 15:36
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己顶一下,有人能指导一下吗?
那行代码怎么解释?模块的编译需要有什么设置吗?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
什么平台?tornado补丁打过没有?
我在PPC上这样用都是正常的
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
[code]
/******************************************************************************
函数名:     runDynamicLoadFunc
描述:       运行动态加载的模块函数
调用:      
被调用:     
输入参数:   moduleName模块名称 funcName函数名称
输出参数:   无
返回:       0正确 -1输入名称错误 -2文件系统中找不到该模块 -3模块中找不到该函数
说明:      
******************************************************************************/
int runDynamicLoadFunc(char * moduleName, char * funcName)
{
    SYM_TYPE * pType;
    FUNCPTR pFunc;

    MODULE_ID moduleId;

    if(NULL == moduleName || NULL == funcName )
    {
        return -1;
    }

    moduleId = ld(1, TRUE, moduleName);
    if(NULL == moduleId)
    {
        printf("load %s module error\n", moduleName);
        return -2;
    }

    if(ERROR == symFindByName(sysSymTbl, funcName, (char**)&pFunc, pType))
    {
        printf("find %s symbol error\n", funcName);
        return -3;
    }
    else
    {
        (*pFunc)();
    }

    return 0;
}
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
这是我用的一个动态加载函数
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
ld(1,0,"C:/api.o"),这个有问题,路径不对。这个c:/api.o不认识的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
to frank_zhou:我加了文件系统,有才c:/
to leifeng281:我现在用workbench的simulation可以没问题,估计tornado有问题,没打过补丁,不知道和动态加载有关系啊
不管怎么样,多谢了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表