linux设备驱动之PCI总线概述
文章目录
- 总线概念
- PCI总线
- PCI总线体系结构
- PCI设备寻址
- PCI寻址
- 配置寄存器
总线概念
总线是一种传输信号的信道;总线是连接一个或多个半导体的电气连线。总线由电气接口和编程接口组成,对于软件设计人员来说,重点关注编程接口。
PCI总线
PCI(Perpheral Component Interconnect)(外围设备互联),是在桌面及更大型的计算机上普遍使用的外设总线。
PCI总线优点:
- 在计算机和外设间传输数据时具有更好的性能
- 能够尽量独立于具体的平台
- 可以方便的实现即插即用
PCI总线体系结构
体系结构1
PCI桥用于生成PCI总线
体系结构2
PCI设备寻址
每个PCI设备由一个总线号、一个设备号、和一个功能号确定。PCI规范允许一个系统最多拥有256条总线,每条总线最多带32个设备,但每个设备可以是最多8个功能的多功能板(如:一个音频设备带一个CD-ROM驱动器)。
/proc/iomem描述了系统中所有设备I/O在内存地址空间上的映射。
可以看到地址从1G开始的第一个设备在/proc/iomem中是如何描述的:
40000000—400004ff : 0000:00:1f.1
这是一个PCI设备,40000000—400004ff 是它所映射的内存地址,占据了内存地址空间1024 bytes的位置,而0000:00:1f.1则是这个PCI外设的地址,它以冒号和逗号分隔为4个部分,第一个16位表示域,第二个8位表示一个总线号。第三个5位表示一个设备号,最后是3位,表示功能
PCI寻址
在linux系统中,可以通过 lspci 命令查看系统中的PCI设备
由下边的数据画出PCI结构图
可以得到如下结构图:
配置寄存器
每个PCI设备都有一组固定格式的寄存器,即配置寄存器,配置寄存器由linux内核中的PCI初始化代码与驱动程序共同使用。内核在启动时负责对配置寄存器进行初始化,包括设置中断号以及I/O基址等。
寄存器组织架构图:
这些寄存器中比较重要的配置
- 00H—01H Vendor ID 制造商标识
- 02H—03H Device ID 设备标识
- 04H—05H Command 命令寄存器
- 06H—07H Status 状态寄存器
- 08H Revison ID 版本识别号寄存器
- 09H—0bH Class Code 分类代码寄存器
- 0cH Cache Line Size CACHE 行长度寄存器
- 0dH Latency Timer 主设备延迟时间寄存器
- 0eH Header Type 投标类型寄存器
- 0fH Built-in-teset Register 自测试寄存器
- 10H—13H Base Address Register 0 基地址寄存器0
- 14H—17H Base Address Register 1 基地址寄存器1
- 18H—1bH Base Address Register 2 基地址寄存器2
- 1cH—19H Base Address Register 3 基地址寄存器3
- 30H—33H Expasion ROM Base Address 扩展ROM基地址
- 34H—3bH 保留
- 3cH Interrupt Line 中断线寄存器
- 3dH Interrupt Pin 中断引脚寄存器
- 3eH Min_Gnt 最小授权寄存器
- 3fH Max_Lat 最大延迟寄存器
linux设备驱动之PCI总线概述相关推荐
- Linux设备驱动-platform虚拟总线dya01
参考连接:https://www.cnblogs.com/deng-tao/p/6026373.html 参考书:<Linux设备驱动开发详解>宋宝华 根据参考资料和同事讨论总结. 摘要: ...
- 君君学Linux设备驱动第一天之概述及开发环境搭建
一.设备驱动的作用: 1 计算机系统里面的软件和硬件是互相成就的,没有软件的硬件是废铁,没有硬件作为依托的软件是空中楼阁. 2 当应用软件工程师不想了解硬件底层的具体操作的时候,就需要 ...
- Linux设备驱动-platform虚拟总线dya02
参考书:<linux设备驱动开发详解>宋宝华 上一篇介绍了platform的基本构成与源码,本篇用实例来说明platform的实现. 参考书中介绍了一个名为globalfifo的驱动,以他 ...
- linux设备驱动之pci设备的驱动架构
驱动工程师最关心就是如何编写PCI设备驱动了. 经过前面的处理,所有设备及其信息都已经遍历出来了.在深入分析PCI驱动架构之前,我们来回顾一下前面遍历PCI设备时,对pci_dev->dev的一 ...
- Linux设备驱动之——I2C总线
2 I2C子系统 2.1 LinuxI2C子系统架构 在内核中已经提供I2C子系统,所以在做I2C驱动之前,就必须要熟悉该子系统. 2.2 三大组成部分 1.I2C核心(i2c-core) I2C核 ...
- linux设备驱动之pci设备的I/O和内存
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ -------- ...
- Linux设备驱动模型2——总线式设备驱动组织方式
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 更深入理解资料:http://blog.csdn.net/oqqhutu12345678/article/details/78933386 ...
- Linux设备驱动——接口与总线
文章目录 串口 IIC SPI USB 以太网接口 串口 RS-232.RS-422.RS-485都是串行数据接口标准,最初是由电子工业协会(EIA)制定并发布的. 如今,RS-232的修改版RS-2 ...
- linux平台设备驱动模型是什么意思,Linux设备驱动模型之我理解
点击(此处)折叠或打开 /* my_bus.c */ #include #include #include #include #include #include "my_bus.h&qu ...
最新文章
- vue+element 后台管理系统(三)树形图
- Eclipse快捷键归纳及整理
- node install.js 很长_余生很长,放下错的人,才能拥抱属于你的幸福。很唯美的心灵鸡汤...
- jquery datatable搜索框添加按钮,改变keypress搜索为点击按钮搜索
- python启动方法_python进程开启的两种方式
- tp5易支付完整版源码
- Android模块化之MicroModule(微信Pins工程)
- rz/sz:工作原理
- 括号里面一个上面一个数下面一个数符号怎么打?/ 概率论组合符号怎么打?
- java实验报告大全
- 查看jdk版本号和安装目录
- 信噪比计算方式(小问题解惑)
- VS2015安装(windows10+64)
- SAI颈部正面的画法
- Monte Carlo算法
- python爬取网页数据总结_python之爬取网页数据总结(一)
- zhu hao shi de shi
- python 数据可视化sns作图
- MSDC 4.3 接口规范(8)
- virtualbox虚拟机窗口大小调整