之前遍历过使用WorkBench的VIP编译的Vx69镜像文件vxWorks,今天照猫画虎,以32位SMP模式下的Intel处理器为例,走一遍Vx7-2107的VxWorks执行顺序。通过对比可以看到,69和7的执行顺序基本一致
- sysInit() - $(BSP)/sysALib.s,这是VxWorks的启动地址,也就是说sysInit()就存放在RAM_LOW_ADRS,它的主要工作:关中断、设置usrInit()的栈、调用usrInit()
- usrInit() - $(Prj)/prjConfig.c,这是VxWorks的第一条C指令,主要负责pre-kernel的初始化,因此它的内部会调用大量的初始化函数
- sysStart() - oscorekernelconfigletteusrStartup.c,清除BSS、设置中断向量表基址
- cacheLibInit() - oscorekernelsrcaimcacheLib.c初始化指令Cache和数据Cache
- usrFdtInit() - osfirmwarefdtcfgusrFdt.c,初始化FDT库
- usrBoardLibInit() - osutilsboardlibcfgusrBoardLibInit.c,初始化板级子系统,
- sysHwInit() - ospslintelitl_x86_commoncfgusrItlCommon.c,初始化系统硬件
- usrAimCpuInit() - oscorekernelconfigletteusrAimCpu.c,初始化主CPU,其实啥也没干
- excShowInit() - osarchiakernelsrccpuexcArchShow.c,映射exception的几个show函数
- excVecInit() - osarchiakernelsrccpuexcArchLib.c,初始化exception向量
- vxCpuLibInit() - oscorekernelsrcmulticorevxCpuLib.c,初始化CPU标识函数,例如vxCpuIdGet()
- usrCacheEnable() - oscorekernelconfigletteusrCache.c,使能Cache
- objOwnershipInit() - oscorekernelsrcwindobjobjOwnerLib.c,设置object ownership的几个函数
- objLibInit() - oscorekernelsrcwindobjobjLib.c,初始化对象管理库
- vxMemProbeInit() - oscorekernelsrcservicesvxMemProbeLib.c,添加vxMemProbe()的异常处理
- classListLibInit() - oscorekernelsrcwindobjclassListLib.c,初始化Class的列表库
- semLibInit() - oscorekernelsrcwindsemLib.c,初始化信号量机制
- condVarLibInit() - oscorekernelsrcwindcondVarLib.c,初始化condition variables库
- classLibInit() - oscorekernelsrcwindobjclassLib.c,初始化Class库
- kernelBaseInit() - oscorekernelsrcserviceskernelBaseLib.c,初始化内核使用的对象
- taskCreateHookInit() - oscorekernelsrcwindtaskCreateHookLib.c,初始化task hook机制
- sysDebugModeInit() - oscorekernelsrcedrsysDbgLib.c,设置debug mode的flag
- usrKernelInit() - oscorekernelconfigletteusrKernel.c,配置内核使用的数据结构,包括初始化ISR对象、初始化内核的Task库、配置调度策略、初始化Tick队列、初始化中断级deferred work队列、记录系统内存池尺寸、调用kernelInit()初始化内核
- kernelInit() - oscorekernelsrcwindkernelLib.c,初始化并启动内核,包括设置中断栈尺寸、设置内存池位置、初始化中断lock-out等级、关闭时间片轮转策略、将系统Tick清零、初始化中断栈、初始化并启动系统的第一个任务tRootTask
- usrRoot() - $(Prj)/prjConfig.c,这就是系统第一个任务的入口地址,主要负责post-kernel的初始化,逐步加载系统服务,它内部同样由大量初始化函数组成
- usrKernelCoreInit() - 初始化内核的一些机制,包括Event、信号量的open机制、condition variables的open机制、消息队列及其open机制、看门狗、任务的open机制等
- poolLibInit() - oscorekernelsrcmmpoolLib.c,初始化Memory Pool库
- memInit() - oscorekernelsrcmmmemLib.c,初始化系统内存分区
- memPartLibInit() - oscorekernelsrcmmmemPartLib.c,初始化系统内存分区的class Id
- kProxHeapInit() - 创建kernel proximity heap,这个heap可以用于存储downloaded kernel models、 ISR handlers等,以及kernel common heap创建之前的内存分配
- pgPoolLibInit() - oscorekernelsrcmmpgPoolLib.c,初始化page pool库
- usrMmuInit() - oscorekernelconfigletteusrMmuInit.c,初始化MMU
- pmapInit() - 提供物理地址映射机制
- kCommonHeapInit() - oscorekernelsrcmmkCommonHeapLib.c,创建kernel Common Heap
- usrKernelCreateInit() - $(Prj)/prjConfig.c,初始化内核对象的creation机制,例如任务、消息队列、看门狗
- usrDebugAgentBannerInit() - osdebug_analysisrttoolsagentsrcosconfigvxworkscfgusrDebugAgent.c,注册debug agent banner
- usrShellBannerInit() - 注册shell banner
- intVecTableWriteProtect() - osarchiakernelsrccpux86intArchLib.c, 写保护exception向量表
- cacheDma32PartInit() - oscorekernelsrcservicescacheDma32Lib.c,初始化DMA buffers分区
- miiBusLibInit() - osnetenddrvsrcmiivxbMiiLib.c,初始化mii总线库
- vxbParamLibInit() - osdrvvxbuscoresrcutilvxbParamLib.c,初始化driver parameter机制
- usrIaPciUtilsInit() - ospslintelitl_x86_commoncfgusrIaPciUtils.c, Intel PCI机制的早期初始化
- sysHwInit1() - ospslintelitl_x86_commoncfgusrItlCommon.c,额外的系统初始化,例如初始化PIC、IPI向量等
- boardInit() - osutilsboardlibsrcboardLib.c,板级初始化
- sysHwInit2() - ospslintelitl_x86_commoncfgusrItlCommon.c,
- usrTextProtect() - oscorekernelconfigletteusrTextProtect.c, 写保护文本段
- excOsmInit() - osarchiakernelsrccpux86sysOsmLib.c, Handler for exception stack overflow
- usrKernelIntStkProtect() - oscorekernelconfigletteusrKernelStack.c,中断栈保护
- taskStackGuardPageEnable() - oscorekernelsrcmmtaskMemLib.c,任务栈保护
- usrNetApplUtilInit() - oscorekernelconfigletteusrNetApplUtil.c,初始化Networks的application/stack logging机制
- envLibInit() - oscorekernelsrcservicesenvLib.c,初始化环境变量机制
- edrStubInit() - oscorekernelconfigletteedrStub.c,在ED&R中记录boot类型
- usrSysctlInit() - oscorekernelconfigletteusrSysctl.c,提供SYSCTL机制
- kernelIdleTaskActivate() - oscorekernelsrcwindkernelLib.c,激活idle任务
- randomInit() - $(Prj)/prjConfig.c, 随机数生成器
- usrIosCoreInit () - $(Prj)/prjConfig.c,初始化IO系统
- usrNetworkInit0() - $(Prj)/prjConfig.c,初始化网络子系统
- usrHwSysctlInit() - oscorekernelconfigletteusrHwSysctl.c,初始化硬件的sysctl
- vxbDmaLibInit() - osdrvvxbussubsystemsrcdmavxbDmaLib.c,初始化DMA库
- vxbIsrHandlerInit() - osdrvvxbussubsystemsrcintvxbIsrHandler.c,初始化VxBus ISR handler
- vxbIntLibInit() - osdrvvxbussubsystemsrcintvxbIntLib.c,初始化vxbIntLib库
- vxDyncIntLibInit() - osdrvvxbussubsystemsrcintvxbDyncIntLib.c,初始化MSI支持库
- vxIpiLibInit() - osdrvvxbussubsystemsrcintvxIpiLib.c, 初始化IPI
- vxbLibInit() - osdrvvxbuscoresrcvxbLib.c, 初始化VxBus子系统
- intStartupUnlock() - osarchiakernelsrccpux86intArchLib.c, 打开中断
- sysIntEnableFlagSet() - osdrvvxbussubsystemsrcintvxbIntLib.c, 标记中断已使能
- usrSerialInit() - oscorekernelconfigletteusrSerial.c, 设置标准输入、输出设备
- usrClkInit() - $(Prj)/prjConfig.c, 初始化时钟、Aux、Timestamp
- cpcInit() - oscorekernelsrcmulticorecpcLib.c, 使能IPI
- vxdbgCpuLibInit() - osdebug_analysisdebugvxdbgsrcvxdbgCpuLib.c, 初始化debug IPI库
- miiBusMonitorTaskInit() - osnetenddrvsrcmiivxbMiiLib.c, 启动MII总线监测任务
- kbdDelayStart() - ospslintelitl_x86_commonsrcvxbI8042Kbd.c, 启动Intel 8042 Keyboard
- pgMgrBaseLibInit() - oscorekernelsrcmmpgMgrBaseLib.c, 初始化Basic Page Manager库
- pgMgrLibInit() - oscorekernelsrcmmpgMgrLib.c, 初始化Page Manager库
- usrRtpInit() - $(Prj)/prjConfig.c, 初始化RTP机制
- mmanLibInit() - oscorekernelsrcposixmmmmanLib.c, 初始化POSIX内存管理机制
- usrKernelExtraInit() - $(Prj)/prjConfig.c,初始化内核其它机制,例如Signal、POSIX Clock等
- usrPcConsoleInit() - osarchiakernelconfigletteusrPcConsole.c, 初始化PC console
- usrIosExtraInit() - $(Prj)/prjConfig.c,初始化IO系统其它机制,例如任务级job机制、message logging库、管道驱动、标准IO库、设备管理、文件系统相关机制、pty(pseudo-terminal)驱动、Boot Line解析等
- usrHostnameSetup() - oscorekernelconfigletteusrHostnameSetup.c, 给Target分配名字TARGET_HOSTNAME_DEFAULT
- sockLibInit() - osservicesocketsrcsockLib.c, 初始化Socket API
- selTaskDeleteHookAdd() - oscoreiosrciosselectLib.c, 完成select机制的初始化
- cpuPwrMgrEnable() - osdrvvxbuscoresrcutilcpuPwrLightLib.c, 使能CPU电源管理
- cplusCtorsLink() - oslang_liblibcpluscplus_kernelsrcrtscplusXtors.c, 加载静态对象的构造函数
- usrScInit() - $(Prj)/prjConfig.c,初始化系统调用机制
- usrKernelIntStkProtectNonCore0() - oscorekernelconfigletteusrKernelStack.c, 保护非引导核的中断栈
- usrSmpInit() - oscorekernelconfigletteusrSmp.c, 使能SMP
- usrBanner() - oscorekernelconfigletteusrBanner.c, 打印Shell的Banner
- usrNetworkInit() - $(Prj)/prjConfig.c,完成网络系统初始化
- usrToolsInit() - $(Prj)/prjConfig.c,软件开发工具,例如spy()、timex()、target loader、符号表、debug库、kernel shell等
- usrMmuOptimize() - oscorekernelconfigletteusrMmuOptimize.c, 优化MMU的page sizing
- usrAppInit() - $(Prj)/usrAppInit.c,VxWorks系统启动过程中调用的最后一个函数,因此一般把应用程序的入口放在这里
随着系统组件的不同,上述的初始化会有相应的调整
写了很多,又好像什么都没写出
读了很多,又好像什么都没读到
就当是个流水账,记住红色部分就可以了!