|
主机加载
vxWorks主机loader源代码位于/host/src/tgtsvr/loader(普通版本没有)。可以将源代码文件分为3类:
- 一般
loadlib.c, unldlib.c, asyncldlib.c, cpluslib.c
- 目标模块格式
loadaout.c, loadcoff.c, loadelf.c, loadpecoff.c, loadsom.c
- 体系结构相关
aout68k.c, aoutspar.c, aoutx86.c; coffarm.c, coffi960.c;
elfmips.c, elfppc.c, elfsparc.c;pecoffx86.c;somhppa.c
当你从WindSH调用loadModule,实际调用的是loadModuleAt(),text,data,bbs各区地址都为NULL,这样目标模块加载到WDB内存池中任何位置。LoadModuleAt再调用asyncLoadModuleAt()。asyncLoadModuleAt()用ioRead将目标模块读入并存储在主机内存中,并用sllPutAtTail将加载请求添加到loader线程的队列中。
目标机加载
vxWorks目标机loader源代码位于/target/src/ostool。调用序列如下。
loadModule() 调用loadModuleAt() 函数, text, data,bbs各区地址都为NULL。 loadModuleAt再调用loadModuleAtSym() 。loadModuleAtSym()再调用loadRoutine函数指针。
体系结构不同,loadRoutine也不同,可能是下面所列的一种:
- aoutLdMdlAtSym
- ldCoffModAtSym
- ldEcoffMdlAtSym
- loadElfFmtManage
- ldPecoffModAtSym
- ldSomCoffMdlAtSym
loadRoutine执行加载,重定位和符号解析。
(未完待续)
from wind river techtips
by amine@263.net

Knowledge is power, but enthusiasm pulls the switch.
欢迎访问 http://www.embedsys.net [2006.8.12正式开通]
《VxWorks程序开发实践》http://bbs.edw.com.cn/dispbbs.asp?BoardID=3&ID=28388
|