源码分析vxWorks6.x的ARM板BSP启动过程(下)

五、执行kernelInit()

该函数是由风河vxWorks库文件封装的,功能为提取kernel并运行,使得后期的初始化能够以kernel下运行的任务来完成。该任务名为tRootTask,它执行的方式类似于usrRootkernelInit先调用intLockLevelSet函数,屏蔽round-robin scheduling模式(不知怎么翻译),并创建中断堆栈。然后从内存池顶端产生root堆栈及TCB(任务控制块),产生root线程usrRoot,并终止线程usrInit。至此,中断被使能。

六、以任务形式执行usrRoot

usrRoot将完成内核及所有硬件的初始化(网络、驱动、I/O),然后执行其他程序代码。它首先会调用memInit函数(可以选择memShowInitusrMmuInit),一旦系统开始多任务执行,BSP会调用第一个函数sysClkConnect,该函数马上又调用sysHwInit2,此函数完成sysHwInit中未完成的所有板件初始化工作,例如用intConnect建立中断源的连接。接着usrRoot继续时钟的初始化,它会修改SYS_CLK_RATE来设置时钟默认频率(通常为60),然后调用sysClkEnable使能时钟。

接下来通过图形简化介绍启动方式,由于vxWorks的有多种程序映像类型,主要可以分成两类:BootRom类型和vxWorks类型,其中,BootRom类型映像是一个最小化、专用的vxWorks引导映像,实现最少的系统初始化,主要用于启动装载vxWorks映像,其功能类似于PC机的BIOSBootRom运行时也建立起多任务环境,包括usrRoot任务、网络任务、TFFS任务和FTP任务等。引导映像在运行时,可能在ROM/Flash中执行(例如ROM驻留型引导映像),也可能在RAM 中执行,在系统中其对应的编译规则文件是rules.bsp,它的启动流程图如下:

源码分析vxWorks6.x的ARM板BSP启动过程(下)_第1张图片

vxWorks类型映像为系统的主映像,也即系统最终要运行的映像。该映像在运行时至少有一部分(如数据段和BSS)需要在RAM中运行。在系统中其对应的编译规则文件是rules.vxWorks,它的启动流程图如下:

源码分析vxWorks6.x的ARM板BSP启动过程(下)_第2张图片

BSP文件中sysLib.c是最大的,在BSP开发初期建议只实现基本功能,包括sysModel()sysBspRev()sysHwInit()sysHwInit2()sysMemTop()

你可能感兴趣的:(网络,化工,任务,图形)