VxWorks 7的启动顺序
之前遍历过使用WorkBench的VIP编译的VxWorks6.9镜像文件VxWorks,今天以32位SMP模式下的Intel处理器为例,看看VxWorks 7的VxWorks执行顺序。通过对比可以看到,VxWorks 6.9和VxWorks 7的执行顺序基本一致
- 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系统启动过程中调用的最后一个函数,因此一般把应用程序的入口放在这里