您的位置:首页 > 运维架构 > Linux

linux设备驱动之PCI总线概述

2019-05-06 16:04 330 查看

文章目录

  • 配置寄存器
  • 总线概念

    总线是一种传输信号的信道;总线是连接一个或多个半导体的电气连线。总线由电气接口和编程接口组成,对于软件设计人员来说,重点关注编程接口。

    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 最大延迟寄存器
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: