Boot之vxWorks7启动顺序

2021-09-15 12:32:24 浏览数 (1)

之前遍历过使用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系统启动过程中调用的最后一个函数,因此一般把应用程序的入口放在这里

随着系统组件的不同,上述的初始化会有相应的调整

写了很多,又好像什么都没写出

读了很多,又好像什么都没读到

就当是个流水账,记住红色部分就可以了!

0 人点赞