VxWorks网络加载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在网络初始化时加载END和subEND,并在其中初始化IP协议栈,在TMS初始化时绑定IP到SubEND,单播路由协议初始化在TMS初始化中,根据MIB配置确定初始化哪个单播路由协议,RIP初始化可以在网络初始化时,OSPF初始化在TMS 初始化中根据TMSMIB配置确定,END的IP地址在网络初始化时设置,SwEND的IP地址在网管配置时设置。
一、在configAll.H中定义了所有定置系统配置的宏
《INCLUDED SOFTWARE FACILITIES》:定义了基本组件;
《EXCLUDED FACILITIES》:定义了扩充组件,缺省不包括;
《KERNEL SOFTWARE CONFIGURATION》:内核运行的基本参数定义,包括文件个数、任务个数等等;
《"GENERIC" BOARD CONFIGURATION》:板通用属性定义;《"MISCELLANEOUS" CONSTANTS》:共享的信号量以及相关对象个数定义;《INCLUDED NETWORK FACILITIES》:包括的网络协议组件定义;《EXCLUDED NETWORK FACILITIES》:未包括的网络协议组件定义;
二、在bootConfig.C中的流程
usrInit()的流程,该例程被rom—start()中的boot代码调用。
调用intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS)设置中断向量;
调用excVecInit ()设置异常向量;
调用sysHwInit ()初始化硬件;
调用usrKernelInit ()配置VXWORK内核;
调用kernelInit ((FUNCPTR) usrRoot, ROOT_STACK_SIZE,启动usrRoot();usrRoot()有多个,一个在bootConfig。C中,一个在usrConfig。C中。
三、bootConfig.C中的usrRoot()流程(是BOOTROM用的)
调用 memInit (pMemPoolStart, memPoolSize);/* XXX select between memPartLibInit */初始化内存;
调用 sysClkConnect ((FUNCPTR) usrClock, 0);/* connect clock interrupt routine */
sysClkRateSet (60); /* set system clock rate */
sysClkEnable (); /* start it */
初始化系统时钟;
调用 iosInit (NUM_DRIVERS, NUM_FILES, "/null");初始化文件系统;
根据配置的串口和控制台口个数,初始化串口;
调用 wdbConfig(); /* configure and initialize the WDB agent */初始化WDB;
调用 pipeDrv (); /* install pipe driver */
excInit (); /* init exception handling */
excHookAdd ((FUNCPTR) bootExcHandler); /* install exc handler */ logInit (consoleFd, 5); /* initialize logging */
初始化相关功能模块;
调用 hashLibInit (); /* hashLib used by dosFS */初始化DOS文件系统;根据配置选择
bootAoutInit (); /* use a.out format */
#else /* coff or ecoff */
#if defined(INCLUDE_ECOFF)
bootEcoffInit (); /* use ecoff format */
#else /* coff */
#if defined(INCLUDE_COFF)
bootCoffInit (); /* use coff format */
#else /* coff */
#if defined(INCLUDE_ELF)
bootElfInit (); /* use elf format */
之上的其一初始化;
调用 if (muxLibInit() == ERROR)初始化MUX;
根据END个数加载END;
调用bootCmdLoop创建"tBoot"任务,启动下一步初始化;
四、bootCmdLoop()流程
调用key = autoboot (timeout);启动初始化;
五、autoboot()流程
调用 if (bootLoad (BOOT_LINE_ADRS, &entry) == OK)
go (entry); /* ... and never return */
从FLASH中读出BOOTLINE配置的启动文件,并运行该启动文件。
三、usrConfig.C中的usrRoot流程(是版本启动用的)
usrRoot()流程
usrRoot()是VXWORKS进入多任务环境下创建的第一个任务,用来初始化各种系统参数,并启动其它任务。
入口参数: char * pMemPoolStart, /* start of system memory partition */ unsigned memPoolSize /* initial size of mem pool */
调用 memInit (pMemPoolStart, memPoolSize); /* initialize memory pool */ 或memPartLibInit (pMemPoolStart, memPoolSize);/* initialize memory pool */
初始化系统内存池;
调用memShowInit ()初始化内存显示例程;
调用usrMmuInit ()初始化MMU单元;
调用 sysClkConnect ((FUNCPTR) usrClock, 0); /* connect clock ISR */ sysClkRateSet (60); /* set system clock rate */
sysClkEnable (); /* start it */
初始化系统时钟;
初始化_func_selWakeupListInit;
调用 iosInit (NUM_DRIVERS, NUM_FILES, "/null");初始化I/O系统;
安装控制台驱动,创建控制台设备,设置BAND率;