首页 > 其他分享 >VxWorks 6.9 BSP开发指南

VxWorks 6.9 BSP开发指南

时间:2023-12-21 14:33:29浏览次数:34  
标签:src target vxworks config VxWorks BSP hwif installDir 6.9

概述

本文主要是记录《VxWorks BSP Developer's Guide 6.9》和《VxBus Device Driver Developer's Guide 6.9》的部分章节内容,重点关注VxWorks 6.9的BSP移植和驱动开发。

BSP概述

本章主要介绍VxWorks启动过程中调用的BSP相关函数,BSP移植的主要工作就是实现这些函数。

函数 文件 描述
romInit() romInit.s 初始化CPU和内存
sysHwInit() sysLib.c 硬件外设初始化
sysHwInit0() sysLib.c 在sysHwInit()之前完成特定硬件外设初始化,该函数只在部分BSP中需要
sysHwInit1() sysLib.c 只有64bit需要,初始化所有硬件外设和虚拟内存
sysHwInit2() sysLib.c 准备VxWorks应用运行所需的硬件外设

BSP所需的源文件包括:


Required BSP Files:
    installDir/vxworks-6.x/target/config/bspname/bspname.h
    installDir/vxworks-6.x/target/config/bspname/config.h
    installDir/vxworks-6.x/target/config/bspname/Makefile
    installDir/vxworks-6.x/target/config/bspname/README
    installDir/vxworks-6.x/target/config/bspname/romInit.s
    installDir/vxworks-6.x/target/config/bspname/sysALib.s
    installDir/vxworks-6.x/target/config/bspname/sysLib.c
    installDir/vxworks-6.x/target/config/bspname/target.ref

Optional BSP Files:
    installDir/vxworks-6.x/target/config/bspname/sysSerial.c
    installDir/vxworks-6.x/target/config/bspname/configNet.h
    installDir/vxworks-6.x/target/config/bspname/sysEnd.c

VxBus Device Driver Directories:
    installDir/vxworks-6.x/target/src/hwif/busCtlr
    installDir/vxworks-6.x/target/src/hwif/console
    installDir/vxworks-6.x/target/src/hwif/cpu
    installDir/vxworks-6.x/target/src/hwif/demo
    installDir/vxworks-6.x/target/src/hwif/dmaCtlr
    installDir/vxworks-6.x/target/src/hwif/end
    installDir/vxworks-6.x/target/src/hwif/end2
    installDir/vxworks-6.x/target/src/hwif/fw
    installDir/vxworks-6.x/target/src/hwif/h
    installDir/vxworks-6.x/target/src/hwif/hEnd
    installDir/vxworks-6.x/target/src/hwif/i2c
    installDir/vxworks-6.x/target/src/hwif/intCtlr
    installDir/vxworks-6.x/target/src/hwif/mf
    installDir/vxworks-6.x/target/src/hwif/mii
    installDir/vxworks-6.x/target/src/hwif/nvram
    installDir/vxworks-6.x/target/src/hwif/resource
    installDir/vxworks-6.x/target/src/hwif/sio
    installDir/vxworks-6.x/target/src/hwif/spi
    installDir/vxworks-6.x/target/src/hwif/storage
    installDir/vxworks-6.x/target/src/hwif/timer
    installDir/vxworks-6.x/target/src/hwif/usb
    installDir/vxworks-6.x/target/src/hwif/util
    installDir/vxworks-6.x/target/src/hwif/vxbus

VxWorks Configuration Directories:
    installDir/vxworks-6.x/target/config/all
    installDir/vxworks-6.x/target/src/config
    installDir/vxworks-6.x/target/config/comps
    installDir/vxworks-6.x/target/config/comps/src
    installDir/vxworks-6.x/target/config/comps/vxWorks
Copy

重要源文件说明:

prjParams.h VxWorks组件化配置和裁剪,自动生成开关宏(COMPONENTS INCLUDED)和宏参数(PARAMETERS)文件。prjParams.h通常被config.h包含,prjComps.h被target/config/comps/src/configAll.h包含。
prjComps.h
configAll.h 被config.h包含
configNet.h 增强型网络驱动配置文件
config_pre.h  
config.h  
sysALib.s  
sysLib.c  
linkSyms.c  
prjConfig.c 包含config.h,是VxWorks应用程序的入口,因为prjConfig.c的usrRoot()函数调用了usrAppInit()。创建工程或者重新编译VxWorks系统镜像工程时自动生成,用来初始化VxWorks系统各个组件,每次重新编译工程时会重置。
usrConfig.c 编译bootrom文件时使用,功能与prjConfig.c类似。
vxBus.c  
usrAppInit.c  

VxWorks Image启动流程


sysInit : sysALib.s
    禁用中断,初始化栈,跳转到usrInit()

usrInit() : prjConfig.c
    sysStart(startType)  /* 清零BSS段,配置异常向量表基地址等 */
    sysHwInit0();
    intVecBaseSet ((FUNCPTR *) VEC_BASE_ADRS);
    excShowInit();
    usrBootHwInit()
    cacheLibInit()
    excShowInit()
    excVecInit()
    sysHwInit()          /* 外设驱动初始化 */
    usrCacheEnable()
    objInfoInit()
    objLibInit()
    vxMemProbeInit()
    classListLibInit()
    semLibInit()
    classLibInit()
    kernelBaseInit()
    taskCreateHookInit()
    sysDebugModeInit()
    usrKernelInit()

sysHwInit() : sysLib.c
    hardWareInterFaceInit()

usrKernelInit() : usrKernel.c
    调用taskLibInit()初始化task库,计算内存池结束地址memPoolEndAdrs,最后调用kernelInit()

kernelInit() : kernelLib.c
    初始化并启动内核,从内存池顶部创建根堆栈和TCB,最后创建tRootTask任务用于执行usrRoot()初始化

usrRoot() : prjConfig.c
    初始化内存、系统时钟、I/O系统,标准输入输出,异常处理,添加用户应用程序。

usrAppInit() : usrAppInit.c
    用户代码入口。
Copy

VxWorks 6.9 BSP开发指南

VxWorks设备驱动

VxWorks设备驱动有VxBus-enabled和legacy(pre-VxBus)两种实现方式。VxBus形式的设备驱动天然支持SMP(symmetric multiprocessing)。

VxBus驱动框架为VxWorks内核和硬件外设定义了一组标准的驱动接口。

VxBus设备驱动有三个要素:设备、驱动和实例。

应用程序通过vxbDevMethodGet()函数去查询每一个实例。

开发流程

重要结构体:


struct hcfResource
    {
    char *  name;
    UINT32  type;
    union
        {
        char *  string;
        UINT32  integer;
        void *  addr;
        ULONG   longval;
        } u;
    };

struct hcfDevice
    {
    char *      devName;
    int         devUnit;
    int         busType;
    int         busIndex;
    int         count;
    const struct hcfResource * pResource;
    };
Copy

1、实现vxbDevRegInfo设备描述块结构体实例,并通过vxbDevRegister(structure vxbDevRegInfo *pDevInfo)注册驱动程序;

VxWorks系统启动时,通过sysHwInit() -> hardWareInterFaceInit() -> hardWareInterFaceBusInit()调用vxbDevRegister()注册驱动程序。


struct vxbDevRegInfo
{
    struct vxbDevRegInfo * pNext;
    UINT32  devID;
    UINT32  busID;
    UINT32  vxbVersion;
    char    drvName[MAX_DRV_NAME_LEN+1];
    struct drvBusFuncs * pDrvBusFuncs;
    struct vxbDeviceMethod * pMethods;
    BOOL (*devProbe) ( struct vxbDev * pDevInfo);
    struct vxbParams * pParamDefaults;
};
Copy

pNext用于总线级联,如果没有级联,则置为NULL。

drvName表示设备名称,同时实现设备与驱动的匹配,只有与hcfDeviceList中的设备名称一致,才能匹配上。

pMethods用于提供总线的各种方法,但是通常只提供该总线特有的方法,因为通用方法如open, read等,一般都通过I/O层的系统调用,它们需要单独注册。

devProbe用于检测当前是否存在该类型的设备,如果不需要探测,则置为NULL。

pDrvBusFuncs提供了设备初始化需要的接口:


struct drvBusFuncs
{
    void (*devInstanceInit) (struct vxbDev *);
    void (*devInstanceInit2) (struct vxbDev *);
    void (*devInstanceConnect) (struct vxbDev *);
};
Copy

devInstanceInit在VxWorks内核初始化前被调用,devInstanceInit2在VxWorks内核初始化之后内调用,一般设备初始化都通过devInstanceInit2实现。

devInstanceConnect用于设备连接,通常可以不使用,如果它依赖于其他设备,则可以把启动代码放在这里。

2、在hcfDeviceList中添加设备;

hcfDeviceList[]数组管理VxBus驱动框架的所有设备,每个成员描述符的最后一个成员变量pResource用于配置设备特性信息,如串口波特率等。可以通过devResourceGet()函数获取。

3、VxWorks系统启动时,会实例化hcfDeviceList中的设备;

实例化的过程是VxWorks系统遍历hcfDeviceList[]数组,如果hcfDevice->devName与vxbDevRegInfo->drvName与匹配,则调用指向的驱动的初始化函数,如devInstanceInit。

4、在vxbDevRegInfo设备描述结构体实例注册的几个初始化函数中添加示例的设备驱动代码;

vxBusShow命令可以查看所有初始化的设备。

原文地址:VxWorks 6.9 BSP开发指南

标签:src,target,vxworks,config,VxWorks,BSP,hwif,installDir,6.9
From: https://www.cnblogs.com/ambulance/p/17918968.html

相关文章

  • docker方式安装Rancher 2.6.9
    一、说明公司当前有一个用TKE搭建的K8s集群,目前遇到的问题:目前TKE已经基本不更新了公司内K8s集群所承载了所有项目的测试环境,目前资源已经无法满足一台节点坏跟现网集群环境不一致,现网是每个项目一个集群针对上面的问题,经过内部沟通,决定在公司内重新搭建一套多集群K8s环境,为了便于......
  • Websphere - WSVR0605W 错误
    官方连接:https://www.ibm.com/support/pages/wsvr0605w-thread-may-be-hung-message-logsWSVR0605W-"Threadmaybehung"messageinthelogsTroubleshootingProblemAWSVR0605WmessageintheSystemOut.logmightbemisleadingbecausethismessagenorma......
  • BSP视频教程第28期:CANopen主从机组网实战,CAN词典工具使用方法以及吃透PDO玩法
    视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519 本期视频的实战性较强,涉及到的内容比较多,特别是PDO同步周期和同步非周期玩法要吃透。视频教程:https://www.bilibili.com/video/BV1zy4y1A7HS/视频提纲:参考资料:CANopen主从机代码,CAN词......
  • 全志芯片bsp命名规则 sunxi
    全志芯片bsp命名规则DOT小文哥于2022-07-2514:34:57发布阅读量2.1k收藏9点赞数4分类专栏:全志-FAQ文章标签:linux版权全志-FAQ专栏收录该内容142篇文章24订阅订阅专栏在linuxbsp中,allwinner平台统一命名为“sunxi”。即:linuxbsp中的“sunxi”可以理解为是allwinne......
  • 安装kubernetes-v1.26.9集群,安装配置calico网络
    安装kubernetes-v1.26.9集群,安装配置calico网络1、配置基础环境1、资源规划一共三台主机,安装配置一个master01,两个worker01master01:192.168.2.10worker01:192.168.2.11worker02:192.168.2.12镜像仓库服务器:192.168.2.20VMware虚拟机规格:CentOSLinux7(Core)2核CPU、3G内......
  • FreeRTOS qemu mps2-an385 bsp 移植制作 :串口打印篇
    开发环境Win1064位+VSCode,ssh远程连接ubuntuVMwareWorkstationPro16+Ubuntu20.04FreeRTOSv202212.01(备注:可以在github获取最新版本)qemuqemu-system-armmps2-an385开发板,qemu版本QEMUemulatorversion4.2.1或更高armgcc交叉编译工具链:当前使用gcc编译环境......
  • FreeRTOS qemu mps2-an385 bsp 移植制作 :系统运行篇
    开发环境Win1064位+VSCode,ssh远程连接ubuntuVMwareWorkstationPro16+Ubuntu20.04FreeRTOSv202212.01(备注:可以在github获取最新版本)qemuqemu-system-armmps2-an385开发板,qemu版本QEMUemulatorversion4.2.1或更高armgcc交叉编译工具链:当前使用gcc编译环境......
  • FreeRTOS qemu mps2-an385 bsp 移植制作 :环境搭建篇
    开发环境Win1064位+VSCode,ssh远程连接ubuntuVMwareWorkstationPro16+Ubuntu20.04FreeRTOSv202212.01(备注:可以在github获取最新版本)qemuqemu-system-armmps2-an385开发板,qemu版本QEMUemulatorversion4.2.1或更高armgcc交叉编译工具链:当前使用gcc编译环境......
  • vue3+vite import 引入ThreeBSP库 报错
    我在网上查了一下先用npm下载了三方包npmithree-js-csg再使用constThreeBSP=require('three-js-csg')(THREE)的方法引入出现了这个报错查了是因为require是webpack里的vite不支持所以找不到然后我就尝试使用import的方法引入importThreeBSPfrom'three-js......
  • JMS connection pools and sessions pools in WebSphere Application Server
    转载:[url]http://www-01.ibm.com/support/docview.wss?uid=swg21168924QuestionFrequentlyAskedQuestionsconcerningconnectionpoolsandsessionspoolsinIBM®WebSphere®ApplicationServer.AnswerQ:WebSphereMQQueueConnectionFactoriesinWebSphere......