当前位置: 首页 > news >正文

VxWorks系统下龙芯平台的PCI驱动与硬件配置

概述

在VxWorks操作系统中,PCI(外围组件互连)总线的支持对于嵌入式系统至关重要。本文档将详细解释龙芯(Loongson)平台上VxWorks系统的PCI驱动架构,重点分析g64120aPci.c驱动文件和hwconf.c硬件配置文件的作用及其相互关系。

系统架构

1. PCI驱动层 (g64120aPci.c)

g64120aPci.c是VxWorks系统中针对龙芯平台的PCI总线控制器驱动程序,基于Marvell/Galileo GT64120A系统控制器。

主要功能:
PCI总线枚举与配置

自动扫描PCI总线上的设备

配置设备的基地址寄存器(BAR)

分配中断资源

配置空间访问

实现PCI配置空间的读写操作

支持Type 0和Type 1配置周期

处理配置访问中的异常情况

内存空间管理

映射PCI内存空间到CPU地址空间

管理I/O空间和内存空间的地址转换

中断处理

提供PCI设备的中断连接和断开功能

管理中断向量分配

关键函数:

/* PCI配置空间读写 */
LOCAL STATUS g64120aPciMethodDevCfgRead(VXB_DEVICE_ID, PCI_HARDWARE*, UINT32, UINT32, void*);
LOCAL STATUS g64120aPciMethodDevCfgWrite(VXB_DEVICE_ID, PCI_HARDWARE*, UINT32, UINT32, UINT32);
/* 地址转换 */
LOCAL STATUS g64120aPciMethodConvertBaseAddress(VXB_DEVICE_ID, UINT32*);/* 设备控制 */
LOCAL STATUS g64120aPciDevControl(VXB_DEVICE_ID, pVXB_DEVCTL_HDR);

2. 硬件配置层 (hwconf.c)

hwconf.c文件定义了系统的硬件资源配置,使用VxWorks的硬件配置框架(HCF)来描述所有硬件设备及其资源。

配置结构:
PCI控制器资源配置

const struct hcfResource godson2fPci0Resources[] = {{ "regBase",        HCF_RES_INT,    { (void *)0xbf002000 } },{ "mem32Addr",      HCF_RES_ADDR,   { (void *)NULL } },{ "mem32Size",      HCF_RES_INT,    { (void *)0 } },{ "memIo32Addr",    HCF_RES_ADDR,   { (void *)0x14000000 } },{ "memIo32Size",    HCF_RES_INT,    { (void *)0x04000000 } },// ... 更多资源配置
};

中断控制器配置

const struct intrCtlrInputs mipsLsnIntCtlrInputs0[] = {{11, "ns16550", 0, 0 },     /* 串口0中断 */{12, "ns16550", 1, 0 },     /* 串口1中断 */{16, "lsPciInt", 0, 0 },    /* PCI中断0 */{17, "lsPciInt", 1, 0 },    /* PCI中断1 */// ... 更多中断配置
};

设备列表

const struct hcfDevice hcfDeviceList[] = {{ "g64120aPci", 0, VXB_BUSID_PLB, 0, godson2fPci0Num, godson2fPci0Resources },{ "mipsLsnIntCtlr", 0, VXB_BUSID_PLB, 0, mipsLsnIntCtlrNum0, mipsLsnIntCtlrResources0 },{ "ns16550", 0, VXB_BUSID_PLB, 0, ns16550Dev0Num, ns16550Dev0Resources },// ... 更多设备
};

协同工作机制

1. 系统初始化流程

VxBus注册阶段

g64120aPciRegister()函数注册PCI驱动到VxBus系统

系统读取hwconf.c中的设备配置信息

设备实例初始化

g64120aPciInstInit()初始化PCI控制器

配置PCI桥接器和地址空间

调用vxbPciAutoConfig()进行自动配置

PCI总线枚举

系统扫描PCI总线上的所有设备

为每个设备分配资源并创建VxBus设备实例

2. 地址空间映射

龙芯平台的PCI地址空间映射关系:

text

CPU地址空间          PCI地址空间
0x1fd00000   <-->   PCI I/O空间
0x14000000   <-->   PCI内存空间
0x08000000   <-->   PCI预取内存空间

3. 中断处理流程

PCI设备产生中断

GT64120A中断控制器接收中断

通过mipsLsnIntCtlr转发到CPU

VxWorks中断服务程序处理中断

应用层开发

1. PCI设备驱动开发

基于这个架构,开发PCI设备驱动的典型流程:

/* 初始化PCI设备 */
STATUS pciDeviceInit(void)
{VXB_DEVICE_ID pciDev;STATUS status;/* 查找PCI设备 */pciDev = vxbPciDeviceFindByVendor(busCtrlID, VENDOR_ID, DEVICE_ID);if (pciDev == NULL) {return ERROR;}/* 获取内存资源 */pResource = vxbResourceGet(pciDev, VXB_RES_MEM, 0);if (pResource == NULL) {return ERROR;}/* 映射内存空间 */virtAddr = vmMap(NULL, pResource->start, pResource->len, VM_WRITE | VM_READ | VM_UNCACHED);return OK;
}

2. 配置自定义PCI设备

在hwconf.c中添加新设备:

/* 添加新的PCI设备资源 */
struct hcfResource myPciDeviceResources[] = {{ "vendorId",   HCF_RES_INT, { (void *)0x1234 } },{ "deviceId",   HCF_RES_INT, { (void *)0x5678 } },{ "memBase",    HCF_RES_ADDR, { (void *)0x50000000 } },{ "memSize",    HCF_RES_INT, { (void *)0x100000 } },
};/* 注册到设备列表 */
const struct hcfDevice hcfDeviceList[] = {// ... 其他设备{ "myPciDriver", 0, VXB_BUSID_PCI, 0, NELEMENTS(myPciDeviceResources), myPciDeviceResources },
};

调试与问题排查

1. 启用调试信息

在g64120aPci.c中设置调试标志:

UINT32 g64120aDebug = TRUE;  /* 启用调试输出 */

2. 常见问题

PCI设备未找到

检查Vendor ID和Device ID配置

验证PCI总线扫描范围

内存映射失败

检查地址空间冲突

验证物理地址到虚拟地址的转换

中断无法工作

检查中断控制器配置

验证中断线分配

总结

VxWorks系统在龙芯平台上的PCI支持通过g64120aPci.c驱动和hwconf.c配置文件的紧密配合实现。这种架构提供了灵活的硬件配置能力和强大的PCI设备管理功能,为嵌入式系统开发提供了坚实的基础。理解这两个文件的工作原理对于在龙芯平台上开发VxWorks应用程序至关重要。

后续在龙芯1e300上验证读写fpga内存。。。

#include <vxWorks.h>#define PCI_MEM_BASE_ADDR 0xb0000000int FpgaPciRead32(unsigned int offset)
{return (*(volatile int*)(PCI_MEM_BASE_ADDR + offset));
}void FpgaPciWrite32(unsigned int offset, int data)
{*(volatile int*)(PCI_MEM_BASE_ADDR + offset) = data;
}
http://www.dtcms.com/a/523812.html

相关文章:

  • 【2026计算机毕业设计】基于Django的新闻资讯平台的设计与实现
  • Linux小课堂: 基于 SSH 的安全文件传输与增量同步机制深度解析之从 wget 到 rsync 的全流程实战
  • 使用ffmpeg裁剪视频
  • 凡科建站网站西安全网推广公司
  • 免费网站建设程序下载建站用什么工具
  • 香港科技大学工学院2026/2027年度研究生课程招生宣讲会-重庆大学专场
  • Qualcomm SNPE(Neural Processing SDK)集成到 OpenWRT + QCS6490 的完整配置指南
  • LangGraph 官方教程:聊天机器人之一
  • Git与Gitee使用中的几个问题
  • 关于淘宝店网站建设的可行性报告网站建设的公司
  • Flink DatastreamAPI详解(四)
  • 线性代数直觉(四):找到特征向量
  • iis网站服务器 建立出现问题微信小程序制作费用是多少
  • 亚马逊云代理商:2025 AWS 服务器配置趋势走向怎么样?
  • 建设银行网站修改手机号湖南省和城乡住房建设厅网站
  • 云电脑与云手机的关系
  • 加性高斯白噪声和码间串扰的信道中Ungerboeck和Forney接收机的区别
  • 厨房电子秤芯片方案:SIC8833
  • 2025MathorCup大数据竞赛A题B题选题建议与分析,思路模型
  • 做网站的公司属于什么行业工商银行手机银行app下载
  • FastGateway 容器化部署与安全集成实践:技术架构与生态融合
  • 流媒体网站建设规划 所需设备网站建设方案500字
  • 非视距城市合成孔径雷达中的多径利用——论文阅读
  • 蓝牙 nRF52732 最简操作
  • 如何做简单视频网站wordpress云服务器配置
  • Spring Boot+RabbitMQ 实战:4 种交换机模式(Work/Fanout/Direct/Topic)保姆级实现
  • 【2026计算机毕业设计】基于Django的智慧办公hr招聘辅助管理系统
  • NBIOT (1) : 当世界开始“低语“
  • 酒店网站制作公司有谁做分销网站
  • Git 服务器搭建