VxWorks 启动顺序

1)romInit(),位于romInit.s文件中,功能如下

A)初始化CPU,部分内存,基本的硬件。如果初始化正确,则内存LOCAL_MEM_LOCAL_ADRS到LOCAL_MEM_LOCAL_ADRS+LOCAL_MEM_SIZE是可读可写的。

B)禁止中断,清除CACHE,为下一个函数romStart(位于bootInit.c中)的执行配置启动类型。

2)romStart()位于bootInit.c文件中,功能如下

A)将代码段从FLASH拷贝到ROM中,根据vxWorks镜像类型也需要拷贝数据段,也有可能在拷贝的过程中执行解压缩。

B)清除RAM。

C)跳转到sysInit(位于sysAlib.s中),启动类型的参数需要被传递过去。

3)sysInit()位于sysAlib.s文件中,是RAM的入口,功能如下

A)使CACHE无效,初始化默认的系统中断表,初始化默认的系统故障表,初始化系统寄存器到默认状态。

4)usrInit(),位于usrConfig.c文件中,该函数是VxWorks中第一运行的C代码,功能如下

A)初始化CACHE。

B)清空BSS段。

C)初始化中断向量,分别调用intVecBaseSet()和excVecInit()。

D)初始化系统到一个安静的状态。调用sysHwInit()初始化系统硬件,注意在此函数中不能连接中断和分配内存,因为此时内存和中断都是不能使用,usrRoot之后才可以。

E)调用kernelInit(),此函数是一个库,这个函数会建立一个多任务的运行环境,并且绝不返回,它需要6个参数。

5)kernelInit(),功能如下:

A)调用intLockLevelSet,禁止轮询任务调度模式,创建中断栈,创建一个TCB,并启动任务usrRoot,终止线程usrInit的执行。此时中断可以使用。

6)usrRoot(),,位于usrConfig.c中。功能如下:

A)完成硬件和内核的初始化,然后执行应用代码。

B)usrConfig.c文件只能被复制但不能被修改,但为了调试可以经常性的临时修改,可以通过config,h进行配置。

C)usrRoot调用memInit函数,也可以调用memShowInit()和usrMmuInit()。

D)一旦多任务启动,BSP调用的第一个函数是SysClkConnect(),SysClkConnect()调用sysHwInit2(),sysHwInit2()负责完成任何没有在sysHwInit中完成板卡级别初始化,比如intConect()的调用。

E)接着usrRoot执行一个时钟初始化,设置为60HZ。

F)一旦时钟初始化完成,一些内核模块,如select,I/O子系统是被初始化的。更详细的可以看usrConfig.c,被宏定义config,h和configAll,h配置。

H)如果INCLUDE_WDB被定义,则wdbConfig(位于usrWdb.c中)被调用。如果INCLUDE_USR_APPL被调用,则usrRoot函数则执行默认的USER_APPL_INIT宏。

猜你喜欢

转载自blog.csdn.net/yz2010/article/details/79910325