Boot之bootrom启动顺序

原创
2020/01/01 12:20
阅读数 1W

欢迎关注VxWorks567
如转发,请标明出处!


    加载vxWorks的boot loader有很多种,最常见的就是使用BSP编译的bootrom


它在Target里的执行顺序如下

  • romInit() - $(BSP)/romInit.s,这是bootrom的启动地址,它在ROM(例如Flash、硬盘)中执行最小的初始化,包括:初始化CPU、关中断、清Cache、初始化romStart()的栈STACK_SAVE、调用romStart()

  • romStart() - config/all/bootInit.c,这是bootrom的第一条C指令,它将bootrom镜像中未压缩的文本段与数据段从ROM复制到RAM的RAM_LOW_ADRS,然后将RAM中未占用的空间清零,将bootrom的剩余压缩部分解压到RAM的RAM_HIGH_ADRS,最后跳转到这个RAM_HIGH_ADRS处的usrEntry()执行

  • usrEntry() - config/all/usrEntry.c,RAM中的第一条指令,它的唯一功能就是调用usrInit()

  • usrInit() - config/all/usrConfig.c,主要工作包括:将BSS清零、初始化Cache库、设置中断向量表基址、安装异常向量、调用sysHwInit()、使能Cache、调用usrKernelCorePreInit()初始化Class、对象、信号量等、初始化wdb、调用usrKernelInit()

    • usrKernelInit() - comps/src/usrKernel.c,配置内核使用的数据结构,包括初始化内核的Task库、配置调度策略、初始化Tick队列、初始化wind work队列、记录系统内存池尺寸、调用kernelInit()初始化内

    • kernelInit() - src/wind/kernelLib.c,初始化并启动内核,包括设置中断栈尺寸、设置内存池位置、初始化中断lock-out等级、关闭时间片轮转策略、将系统Tick清零、初始化中断栈、初始化并启动第一个任务tRootTask

  • usrRoot() - config/all/usrConfig.c,这就是系统第一个任务的入口地址,主要负责post-kernel的初始化,逐步加载系统服务,它内部同样由大量初始化函数组成

    • usrKernelCoreInit() - src/config/usrKernelCore.c,初始化内核的一些机制,包括Event、信号量的open机制、消息队列及open机制、看门狗、任务的open机制等

    • memInit() - src/os/mm/memLib.c,初始化系统内存池

    • usrMmuInit() - comps/src/usrMmuInit.c,初始化MMU

    • usrKernelCreateInit() - src/config/usrKernelCore.c,初始化内核对象的creation机制,例如任务、消息队列、看门狗

    • sysClkConnect() - src/drv/timer/xxxTimer.c,挂接系统时钟ISR,调用sysHwInit2()

    • sysHwInit2() - $(BSP)/sysLib.c,挂接中断,配置其它附加信息

    • iosInit() - src/os/io/iosLib.c,初始化IO系统

    • tyLibInit() - src/os/io/tyLib.c,初始化TTY库

    • ttyDrv() - src/os/io/ttyDrv.c,初始化TTY驱动

    • ttyDevCreate - src/os/io/ttyDrv.c,创建TTY设备

    • 初始化其它机制,例如任务级job机制、message logging库、管道驱动、标准IO库、ERF(Event Reporting Framework)库、设备管理、文件系统相关机制、pty(pseudo-terminal)驱动、存储设备加载、Boot Line解析等

    • bootAppShellInit() - src/boot/bootAppShell.c,初始化Boot Shell

    • Boot方式的初始化,例如文件系统、网络

    • bootApp() - src/boot/bootApp.c,启动Boot Loader主任务bootApp

  • bootAppTask() - src/boot/bootApp.c,bootApp的入口地址。它默认先等待7秒,如果Boot Shell接收到命令,则解析执行;如果7秒倒计时结束,则按照Boot Line将vxWorks镜像加载到RAM_LOW_ADRS,然后跳转到这个地址开始执行vxWorks


这正是:

 引导程序有多种,Bootrom很常用。
 纵然也有命令行,加载系统方始终。


我是泰山,专注VX 15年!
一起学习,共同进步!


本文分享自微信公众号 - 这里只有VxWorks(VxWorks567)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部