VxWorks 7的启动顺序

之前遍历过使用WorkBench的VIP编译的VxWorks6.9镜像文件VxWorks,今天以32位SMP模式下的Intel处理器为例,看看VxWorks 7的VxWorks执行顺序。通过对比可以看到,VxWorks 6.9和VxWorks 7的执行顺序基本一致

VxWorks 7 boot Sequence

  • sysInit() - $(BSP)/sysALib.s,这是VxWorks的启动地址,也就是说sysInit()就存放在RAM_LOW_ADRS,它的主要工作:关中断、设置usrInit()的栈、调用usrInit()
  • usrInit() - $(Prj)/prjConfig.c,这是VxWorks的第一条C指令,主要负责pre-kernel的初始化,因此它的内部会调用大量的初始化函数
  • sysStart() - os\core\kernel\configlette\usrStartup.c,清除BSS、设置中断向量表基址
  • cacheLibInit() - os\core\kernel\src\aim\cacheLib.c初始化指令Cache和数据Cache
  • usrFdtInit() - os\firmware\fdt\cfg\usrFdt.c,初始化FDT库
  • usrBoardLibInit() - os\utils\boardlib\cfg\usrBoardLibInit.c,初始化板级子系统,
  • sysHwInit() - os\psl\intel\itl_x86_common\cfg\usrItlCommon.c,初始化系统硬件
  • usrAimCpuInit() - os\core\kernel\configlette\usrAimCpu.c,初始化主CPU,其实啥也没干
  • excShowInit() - os\arch\ia\kernel\src\cpu\excArchShow.c,映射exception的几个show函数
  • excVecInit() - os\arch\ia\kernel\src\cpu\excArchLib.c,初始化exception向量
  • vxCpuLibInit() - os\core\kernel\src\multicore\vxCpuLib.c,初始化CPU标识函数,例如vxCpuIdGet()
  • usrCacheEnable() - os\core\kernel\configlette\usrCache.c,使能Cache
  • objOwnershipInit() - os\core\kernel\src\wind\obj\objOwnerLib.c,设置object ownership的几个函数
  • objLibInit() - os\core\kernel\src\wind\obj\objLib.c,初始化对象管理库
  • vxMemProbeInit() - os\core\kernel\src\services\vxMemProbeLib.c,添加vxMemProbe()的异常处理
  • classListLibInit() - os\core\kernel\src\wind\obj\classListLib.c,初始化Class的列表库
  • semLibInit() - os\core\kernel\src\wind\semLib.c,初始化信号量机制
  • condVarLibInit() - os\core\kernel\src\wind\condVarLib.c,初始化condition variables库
  • classLibInit() - os\core\kernel\src\wind\obj\classLib.c,初始化Class库
  • kernelBaseInit() - os\core\kernel\src\services\kernelBaseLib.c,初始化内核使用的对象
  • taskCreateHookInit() - os\core\kernel\src\wind\taskCreateHookLib.c,初始化task hook机制
  • sysDebugModeInit() - os\core\kernel\src\edr\sysDbgLib.c,设置debug mode的flag
  • usrKernelInit() - os\core\kernel\configlette\usrKernel.c,配置内核使用的数据结构,包括初始化ISR对象、初始化内核的Task库、配置调度策略、初始化Tick队列、初始化中断级deferred work队列、记录系统内存池尺寸、调用kernelInit()初始化内核
  • kernelInit() - os\core\kernel\src\wind\kernelLib.c,初始化并启动内核,包括设置中断栈尺寸、设置内存池位置、初始化中断lock-out等级、关闭时间片轮转策略、将系统Tick清零、初始化中断栈、初始化并启动系统的第一个任务tRootTask
  • usrRoot() - $(Prj)/prjConfig.c,这就是系统第一个任务的入口地址,主要负责post-kernel的初始化,逐步加载系统服务,它内部同样由大量初始化函数组成
  • usrKernelCoreInit() - 初始化内核的一些机制,包括Event、信号量的open机制、condition variables的open机制、消息队列及其open机制、看门狗、任务的open机制等
  • poolLibInit() - os\core\kernel\src\mm\poolLib.c,初始化Memory Pool库
  • memInit() - os\core\kernel\src\mm\memLib.c,初始化系统内存分区
  • memPartLibInit() - os\core\kernel\src\mm\memPartLib.c,初始化系统内存分区的class Id
  • kProxHeapInit() - 创建kernel proximity heap,这个heap可以用于存储downloaded kernel models、 ISR handlers等,以及kernel common heap创建之前的内存分配
  • pgPoolLibInit() - os\core\kernel\src\mm\pgPoolLib.c,初始化page pool库
  • usrMmuInit() - os\core\kernel\configlette\usrMmuInit.c,初始化MMU
  • pmapInit() - 提供物理地址映射机制
  • kCommonHeapInit() - os\core\kernel\src\mm\kCommonHeapLib.c,创建kernel Common Heap
  • usrKernelCreateInit() - $(Prj)/prjConfig.c,初始化内核对象的creation机制,例如任务、消息队列、看门狗
  • usrDebugAgentBannerInit() - os\debug_analysis\rttools\agent\src\osconfig\vxworks\cfg\usrDebugAgent.c,注册debug agent banner
  • usrShellBannerInit() - 注册shell banner
  • intVecTableWriteProtect() - os\arch\ia\kernel\src\cpu\x86\intArchLib.c, 写保护exception向量表
  • cacheDma32PartInit() - os\core\kernel\src\services\cacheDma32Lib.c,初始化DMA buffers分区
  • miiBusLibInit() - os\net\end\drv\src\mii\vxbMiiLib.c,初始化mii总线库
  • vxbParamLibInit() - os\drv\vxbus\core\src\util\vxbParamLib.c,初始化driver parameter机制
  • usrIaPciUtilsInit() - os\psl\intel\itl_x86_common\cfg\usrIaPciUtils.c, Intel PCI机制的早期初始化
  • sysHwInit1() - os\psl\intel\itl_x86_common\cfg\usrItlCommon.c,额外的系统初始化,例如初始化PIC、IPI向量等
  • boardInit() - os\utils\boardlib\src\boardLib.c,板级初始化
  • sysHwInit2() - os\psl\intel\itl_x86_common\cfg\usrItlCommon.c,
  • usrTextProtect() - os\core\kernel\configlette\usrTextProtect.c, 写保护文本段
  • excOsmInit() - os\arch\ia\kernel\src\cpu\x86\sysOsmLib.c, Handler for exception stack overflow
  • usrKernelIntStkProtect() - os\core\kernel\configlette\usrKernelStack.c,中断栈保护
  • taskStackGuardPageEnable() - os\core\kernel\src\mm\taskMemLib.c,任务栈保护
  • usrNetApplUtilInit() - os\core\kernel\configlette\usrNetApplUtil.c,初始化Networks的application/stack logging机制
  • envLibInit() - os\core\kernel\src\services\envLib.c,初始化环境变量机制
  • edrStubInit() - os\core\kernel\configlette\edrStub.c,在ED&R中记录boot类型
  • usrSysctlInit() - os\core\kernel\configlette\usrSysctl.c,提供SYSCTL机制
  • kernelIdleTaskActivate() - os\core\kernel\src\wind\kernelLib.c,激活idle任务
  • randomInit() - $(Prj)/prjConfig.c, 随机数生成器
  • usrIosCoreInit () - $(Prj)/prjConfig.c,初始化IO系统
  • usrNetworkInit0() - $(Prj)/prjConfig.c,初始化网络子系统
  • usrHwSysctlInit() - os\core\kernel\configlette\usrHwSysctl.c,初始化硬件的sysctl
  • vxbDmaLibInit() - os\drv\vxbus\subsystem\src\dma\vxbDmaLib.c,初始化DMA库
  • vxbIsrHandlerInit() - os\drv\vxbus\subsystem\src\int\vxbIsrHandler.c,初始化VxBus ISR handler
  • vxbIntLibInit() - os\drv\vxbus\subsystem\src\int\vxbIntLib.c,初始化vxbIntLib库
  • vxDyncIntLibInit() - os\drv\vxbus\subsystem\src\int\vxbDyncIntLib.c,初始化MSI支持库
  • vxIpiLibInit() - os\drv\vxbus\subsystem\src\int\vxIpiLib.c, 初始化IPI
  • vxbLibInit() - os\drv\vxbus\core\src\vxbLib.c, 初始化VxBus子系统
  • intStartupUnlock() - os\arch\ia\kernel\src\cpu\x86\intArchLib.c, 打开中断
  • sysIntEnableFlagSet() - os\drv\vxbus\subsystem\src\int\vxbIntLib.c, 标记中断已使能
  • usrSerialInit() - os\core\kernel\configlette\usrSerial.c, 设置标准输入、输出设备
  • usrClkInit() - $(Prj)/prjConfig.c, 初始化时钟、Aux、Timestamp
  • cpcInit() - os\core\kernel\src\multicore\cpcLib.c, 使能IPI
  • vxdbgCpuLibInit() - os\debug_analysis\debug\vxdbg\src\vxdbgCpuLib.c, 初始化debug IPI库
  • miiBusMonitorTaskInit() - os\net\end\drv\src\mii\vxbMiiLib.c, 启动MII总线监测任务
  • kbdDelayStart() - os\psl\intel\itl_x86_common\src\vxbI8042Kbd.c, 启动Intel 8042 Keyboard
  • pgMgrBaseLibInit() - os\core\kernel\src\mm\pgMgrBaseLib.c, 初始化Basic Page Manager库
  • pgMgrLibInit() - os\core\kernel\src\mm\pgMgrLib.c, 初始化Page Manager库
  • usrRtpInit() - $(Prj)/prjConfig.c, 初始化RTP机制
  • mmanLibInit() - os\core\kernel\src\posix\mm\mmanLib.c, 初始化POSIX内存管理机制
  • usrKernelExtraInit() - $(Prj)/prjConfig.c,初始化内核其它机制,例如Signal、POSIX Clock等
  • usrPcConsoleInit() - os\arch\ia\kernel\configlette\usrPcConsole.c, 初始化PC console
  • usrIosExtraInit() - $(Prj)/prjConfig.c,初始化IO系统其它机制,例如任务级job机制、message logging库、管道驱动、标准IO库、设备管理、文件系统相关机制、pty(pseudo-terminal)驱动、Boot Line解析等
  • usrHostnameSetup() - os\core\kernel\configlette\usrHostnameSetup.c, 给Target分配名字TARGET_HOSTNAME_DEFAULT
  • sockLibInit() - os\service\socket\src\sockLib.c, 初始化Socket API
  • selTaskDeleteHookAdd() - os\core\io\src\ios\selectLib.c, 完成select机制的初始化
  • cpuPwrMgrEnable() - os\drv\vxbus\core\src\util\cpuPwrLightLib.c, 使能CPU电源管理
  • cplusCtorsLink() - os\lang_lib\libcplus\cplus_kernel\src\rts\cplusXtors.c, 加载静态对象的构造函数
  • usrScInit() - $(Prj)/prjConfig.c,初始化系统调用机制
  • usrKernelIntStkProtectNonCore0() - os\core\kernel\configlette\usrKernelStack.c, 保护非引导核的中断栈
  • usrSmpInit() - os\core\kernel\configlette\usrSmp.c, 使能SMP
  • usrBanner() - os\core\kernel\configlette\usrBanner.c, 打印Shell的Banner
  • usrNetworkInit() - $(Prj)/prjConfig.c,完成网络系统初始化
  • usrToolsInit() - $(Prj)/prjConfig.c,软件开发工具,例如spy()、timex()、target loader、符号表、debug库、kernel shell等
  • usrMmuOptimize() - os\core\kernel\configlette\usrMmuOptimize.c, 优化MMU的page sizing
  • usrAppInit() - $(Prj)/usrAppInit.c,VxWorks系统启动过程中调用的最后一个函数,因此一般把应用程序的入口放在这里