前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Boot之vxWorks7启动顺序

Boot之vxWorks7启动顺序

作者头像
Taishan3721
发布2021-09-15 12:32:24
8720
发布2021-09-15 12:32:24
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档