• VxWorks BSP开发入门


    VxWorks将所有硬件平台相关的代码封装在BSP(Board Support Package)库中,从而为应用层代码提供了独立于硬件平台和体系接口的特性。

    BSP库中封装了一组统一的API,包括硬件初始化、中断的触发和处理、硬件时钟和定时器管理、内存和总线内存空间映射、内存分配等。

    target/config/all 所有BSPs公共的配置

    target/config/all/configAll.h 包含针对所有VxWorks镜像的默认配置项,一般情况下,不要修改这个文件。如果你希望修改默认配置,在自己的BSP的config.h文件中覆盖该配置项即可(#define or #undef)

    target/config/bspname 特定BSP的配置

    target/config/comps/src包含configlette最小配置,编译时覆盖target/config/all

    1)target/config/all下的文件:

    bootConfig.c - bootROM镜像的初始化程序,包括完成的shell task的实现,同时包括NETIF完成网络设备的初始化。它是usrConfig.c的子集。只有config.h, configAll.h, bootConfig.c和bootInit.c这几个文件影响boot ROM的编译。

    bootInit.c - ROM初始化的第二阶段代码,romInit.s的romInit()函数执行结束之后,跳转到bootInit.c的romStart()函数,romStart()函数解压并重定位ROM镜像。首先,它从ROM拷贝代码段和数据段到RAM中;然后清除RAM中空闲的空间;最后,解压ROM镜像中压缩的部分。不同的配置选项决定了上述操作的具体实现。在Tornado 2.x中,romStart.c取代了bootInit.c

    dataSegPad.s - VxVMI代码段保护,确保代码段和数据段不共享同一MMU页

    usrConfig.c - VxWorks Image的初始化代码,usrConfig.c调用target/src/config/usrExtra.c完成各子系统的配置和初始化。

    2)target/config/comps/vxWorks目录

    该目录下包含VxWorks实时内核的基本CDF(Component Descriptor File)文件,参考CDL(Component Description Language)

    3)target/config/comps/src目录

    configlettes,target/config/all/usrConfig.c和target/src/config中引用的代码片段

    4)target/config/bspname

          包含BSP中与系统和硬件相关的代码

          Makefile和depend.bspname,前者为BSP主Makefile,后者为依赖文件。Makefile引用target/h/make下的子makefile,在Makefile文件中需要定义以下宏:CPU, TOOL,TARGET_DIR,VENDOR,BOARD,ROM_TEXT_ADRS(指定了bootROM的入口地址),ROM_WARM_ADRS(bootROM热启动的入口地址),ROM_SIZE,ROM_LOW_ADRS(加载VxWorks的地址),RAM_HIGH_ADRS(boot ROM拷贝到RAM的地址)

          config.h的配置包括:BSP版本号和子版本号,configAll.h(#include),缓存和MMU配置,共享内存和网络配置,内存地址和大小,ROM地址和大小,NVRAM参数,启动参数,时间戳,外部总线地址映射,网络设备和中断向量,bspname.h(#include)

    VxWorks启动流程

    romInit()主要实现三个功能:

    a) 禁止中断并初始化CPU

    b) 初始化内存,包括关闭caches以及初始化内存控制器(对于SPARC架构,还需要使能MMU)

    c) 设置stack pointer(栈)以及其他寄存器,为执行C程序做准备

    完成上述操作之后,跳转到romStart()执行。romInit()需要按照PIC(Position Independent Code位置无关代码)原则编码,因为启动策略和内存加载位置可能不同。

    romInit.s中不应该添加过多的初始化代码,在sysHwInit()中初始化各硬件外设会更容易。另外,romInit.s中初始化的硬件,在sysALib.s或者sysLib.c中需要重新初始化。

    VxWorks镜像的入口函数_sysInit在sysALib.s文件中,它做了与romInit.s一样的工作,除了系统内存配置。sysALib.s中的代码不需要按照PIC的原则编写,即不需要使用ROM_ADRS宏进行重新映射。sysLib.c为VxWorks和应用层代码提供了板级的API接口,它调用src/drv下面的驱动代码完成驱动的初始化和配置,比如sysSerial.c, sysScsi.c,sysNet.c等。

  • 相关阅读:
    中煜软件,数据库删除凭证
    excel vba获取拼音
    windows server 2012 R2 远程桌面授权模式尚未配置
    用C语言实现窗口抖动
    java修饰符
    Java对象和类
    Java基本语法
    Java开发环境笔记
    我的第一个Java程序和Java简介
    笔记本如何设置插入USB鼠标自动禁用触摸板
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/9177943.html
Copyright © 2020-2023  润新知