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

PCIe具体解释分析

参考文章

PCIe总线详解_STATEABC-GitCode 开源社区

https://zhuanlan.zhihu.com/p/652808759

PCI总线学习(一):PCI总线结构-CSDN博客

PCI——第1章——PCI总线的基本知识-CSDN博客

计算机中register、cache、memory的区别 - Line's Blog

什么是内存管理单元(MMU)


LSPCI具体解释分析 - yxwkaifa - 博客园

上面这个文章,写的很有力度,所以作如下笔记,

一、PCI简单介绍
     PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的全部设备可在同一时间收到全部的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。
     PCI是Peripheral Component Interconnect(外围设备互联)的简称,是普遍使用在桌面及更大型的计算机上的外 设总线。PCI架构被设计为ISA标准的替代品,它有三个主要目标:获得在计算机和外设之间数据传输时更好的性能;尽可能的平台无关;简化往系统中加入和 删除外设的工作。

二、PCI寻址
     从如今開始,我想尽可能通过一些实际的样例来说明问题,而降低理论方面的问题的描写叙述,由于,相关的理论的东西,能够在其他地方找到。
     我们先来看一个样例,我的电脑装有1G的RAM,1G以后的物理内存地址空间都是外部设备IO在系统内存地址空间上的映射。

此处的RAM代表,
1 SRAM--静态随机存储器。
           位于CPU内部的cache(缓存)一般使用SRAM。
2 DRAM--动态随即存储器。
        外置的memory(内存),一般使用的DRAM。   

缓存,内存,CPU关系如下,

/proc/iomem描写叙述了系统中全部的设备I/O在内存地址空间上的映射。

我们来看地址从1G開始的第一个设备在/proc/iomem中是怎样描写叙述 的:
             40000000-400003ff : 0000:00:1f.1
     这是一个PCI设备,40000000-400003ff是它所映射的内存地址空间,占领了内存地址空间的1024 bytes的位置,而 0000:00:1f.1则是一个PCI外设的地址,它以冒号和逗号分隔为4个部分,第一个16位(指的是0000)表示域(上面的一串数字其实是十六进制数字,每个十六进制数字占4位二进制数位,原文说“第一个16位”),第二个8位(00 :这两个十六进制数字,占8位二进制数数位)表示一个总线编号,第三个5位(指的是1f。5位二进制数字,最大能表示31这个十进制数字)表示一 个设备号,最后是3位(指的是1),表示功能号。

     由于PCI规范同意单个系统拥有高达256个总线,所以总线编号是8位(在上面那串数字中0000:00:0f.1 ,00这两个十六进制位数字,即8个二进制位)。但对于大型系统而言,这是不够的,所以,引入了域的概念,每一个 PCI域能够拥有最多256个总线(在上面那串数字中000000:0f.1 ,0000这四个十六进制位数字,即共16个二进制位,十六个二进制位代表十进制255),每一个总线上可支持32个设备,所以设备号是5位,而每一个设备上最多可有8种功能,所以功能号是3位。由此,我们能够得 出上述的PCI设备的地址是0号域0号总线上的31号设备上的1号功能。

 那上述的这个PCI设备究竟是什么呢?以下是我的电脑上的lspci命令的输出:00:00.0 Host bridge: Intel Corporation 82845 845 (Brookdale) Chipset Host Bridge (rev 04)00:01.0 PCI bridge: Intel Corporation 82845 845 (Brookdale) Chipset AGP Bridge(rev 04)00:1d.0 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #1) (rev 02)00:1d.1 USB Controller: Intel Corporation 82801CA/CAM USB (Hub #2) (rev 02)00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 42)00:1f.0 ISA bridge: Intel Corporation 82801CAM ISA Bridge (LPC) (rev 02)00:1f.1 IDE interface: Intel Corporation 82801CAM IDE U100 (rev 02)00:1f.3 SMBus: Intel Corporation 82801CA/CAM SMBus Controller (rev 02)00:1f.5 Multimedia audio controller:Intel Corporation 82801CA/CAM AC'97 Audio Controller (rev 02)00:1f.6 Modem: Intel Corporation 82801CA/CAM AC'97 Modem Controller (rev 02)01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 420 Go](rev a3)02:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller(rev 46)02:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+(rev 10)02:04.0 CardBus bridge: O2 Micro, Inc. OZ6933 Cardbus Controller (rev 01)02:04.1 CardBus bridge: O2 Micro, Inc. OZ6933 Cardbus Controller (rev 01)

      lspci没有标明域,但对于一台PC而言,一般仅仅有一个域,即0号域。通过这个输出我们能够看到它是一个IDE interface。由上述的 输出能够看到,我的电脑上共同拥有3个PCI总线(0号,1号,2号)。在单个系统上,插入多个总线是通过桥(bridge)来完毕的,桥是一种用来连接总线 的特殊PCI外设。

   所以,PCI系统的总体布局组织为树型,我们能够通过上面的lspci输出,来画出我的电脑上的PCI系统的树型结构:

                   |---00:01.0(PCI桥)---01:00:0(nVidia显卡)
                   |
                   |                                      |--00:1d:0(USB1号控制器)
                   |---00:1d(USB控制器)--- |
                   |                                      |--00:1d:1(USB2号控制器)                  
                   |
                   |                                |--02:00.0(IEEE1394)
                   |                                |
00:00.0 ---  | ---00:1e:0(PCI桥)---|--02:01.0(8139网卡)
(主桥)       |                                |            
                   |                                |                                |--02:04.0(桥1)
                   |                                |--02:04(CardBus桥) |
                   |                                                                 |--02:04.1(桥2)
                   |                                        
                   |
                   |                                   |--00:1f:0(ISA桥)
                   |                                   |
                   |                                   |--00:1f:1(IDE接口)
                   |                                   |
                   |---00:1f(多功能板卡)--|--00:1f:3(SMBus)
                                                      |
                                                      |--00:1f:5(多媒体声音控制器)
                                                      |
                                                      |--00:1f:6(调制解调器)

  由上图能够得出,我的电脑上共同拥有8个PCI设备,当中0号总线上(主桥)上连有4个,1号总线上连有1个,2号总线上连有3个。00:1f是一个连有5个功能的多功能板卡。

之所以是上面的树型结构,是因为,PCI桥设备下,一定有所连接的另一个PCI总线(称为“次总线”,即主总线的子总线)。见下面两个图,每个PCI桥下都有次总线,次总线下面又连接着 Endpoint(Endpoint是PCIe总线上的终端设备).

而且,根据数据结构与算法,树这一数据结构,可推断出PCI桥下所连接的各个次总线的编号。

 

 

http://www.xdnf.cn/news/1931.html

相关文章:

  • 【基础IO上】复习C语言文件接口 | 学习系统文件接口 | 认识文件描述符 | Linux系统下,一切皆文件 | 重定向原理
  • 【kafka初学】启动执行命令
  • c#操作excel表格
  • Java与Kotlin在Android开发中的全面对比分析
  • 【Luogu】动态规划四
  • Hot100方法及易错点总结2
  • firewalld 详解
  • 微信小程序蓝牙连接打印机打印单据完整Demo【蓝牙小票打印】
  • 【prompt是什么?有哪些技巧?】
  • Linux操作系统复习
  • 3D模型文件格式之《STL格式介绍》
  • SSH服务介绍
  • string的基本使用
  • uniapp自定义封装tabbar
  • 探索亚马逊云科技:开启您的云计算之旅
  • Safety Estimands与Efficacy Estimands的差异剖析
  • 模式设计简介
  • 北斗导航 | 北斗卫星导航单点定位精度提升方法总结,原理,公式,关键代码
  • 架构师面试(三十六):广播消息
  • websheet 之 sheet操作
  • c++11新特性随笔
  • 使用开源免费雷池WAF防火墙,接入保护你的网站
  • Shell 脚本入门:从零开始写自动化脚本
  • 代码随想录算法训练营day11(二叉树)
  • 轻量级静态网站托管:服务器配置与网站性能深入探讨
  • Sui 携手 xMoney 和 xPortal 推出虚拟万事达卡,拓展现实支付场景接入
  • 分布式ID生成方案详解
  • 软件为什么需要性能测试?软件测试机构性能测试注意事项有哪些?
  • 实时数据驱动未来:谷云科技CDC实时数据集成平台新版本发布
  • JAVA常用分布式锁Redisson