深入PCI与PCIe之二:软件篇 https://zhuanlan.zhihu.com/p/26244141 我们前一篇文章(深入PCI与PCIe之一:硬件篇 - 知乎专栏)介绍了PCI和PCIe的硬件部分.本篇主要介绍PCI和PCIe的软件界面和UEFI对PCI的支持. PCI/PCIe软件界面 1.配置空间 PCI spec规定了PCI设备必须提供的单独地址空间:配置空间(configuration space),前64个字节(其地址范围为0x00~0x3F)是所有PCI设备必须支持的(有不…
https://zhuanlan.zhihu.com/p/26652622 最近某手机厂商的闪存门在知乎上被人踢爆,在所谓“爵士水军”和“友商水军”的口水大战中,至少eMMC, UFS等火星名词被广泛的科普了一把.苹果粉也不时掺和进来,NVMe在苹果手机上的应用让这个群体平添了一份“高冷”,安卓的小伙伴们被鄙视的都不敢回嘴了! 本着看热闹不怕事大的原则,我这个低端山寨手机拥趸决定以一个吸引眼球的故事开始本系列:到底UFS 2.1和NVMe谁性能好,谁能“代表社会先进生产力”呢? UFS VS N…
我们在 浅谈Linux PCI设备驱动(一)中(以下简称 浅谈(一) )介绍了PCI的配置寄存器组,而Linux PCI初始化就是使用了这些寄存器来进行的.后面我们会举个例子来说明Linux PCI设备驱动的主要工作内容(不是全部内容),这里只做文字性的介绍而不会涉及具体代码的分析,因为要分析代码的话,基本就是对 Linux内核源代码情景分析(下册)第八章的解读,读者若想分析代码,可以参考该书的内容,我们这里就不去深入分析这些代码了. Linux PCI设备驱动代码必须扫描系统中所有的PCI总线…
一般来说,在x86平台上,有两大类方式能够訪问这一区间的寄存器,   1,配置机制1#或者配置机制2#   訪问时借助in/out指令.请注意,这样的方式有别于一般的in/out指令訪问PCI的IO空间,它引入了地址port和数据port.   配置机制2#仅仅在某些特定的主板上被使用. 新的设计应使用配置机制1#来产生配置空间的物理操作.这样的机制使用了两个特定的32位I/O空间,即CF8h和CFCh.这两个空间相应于PCI桥路的两个寄存器,当桥路看到CPU在局部总线对这两个I/O空间进行双字…
PCI是Peripheral Component Interconnect(外设部件互连标准)的缩写,它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽.PCI插槽也是主板带有最多数量的插槽类型,在目前流行的台式机主板上,ATX结构的主板一般带有5-6个PCI插槽,而小一点的MATX主板也都带有2-3个PCI插槽,可见其应用的广泛性.PCI是由Intel公司1991年推出的一种局部总线.从结构上看,PCI是在CPU和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对…
1.PCI 外设互联标准(或称个人电脑接口,Personal Computer Interface),实际应用中简称PCI(Peripheral Component Interconnect),是一种连接电子计算机主板和外部设备的总线标准.一般PCI设备可分为两种形式:直接布放在主板上的集成电路,在PCI规范中称作”平面设备“,另一种是安装在插槽中的扩展卡. PCI bus常见于现代的个人计算机中,已经取代ISA和VESA局部总线,成为标准扩展总线.PCI总线最终将被PCI Express或者更…
一.PCI PCI接口分为32bit和64bit两种,32bit就是一般台式机使用的普通的pci接口(图一.图三),64bit接口比32bit接口长一些一般只出现在服务器上(图四.图五).32bit和64bit都有5v和3.3v电压两种,5v电压的是PCI2.1标准的时钟频率为33MHz,3.3v电压的是PCI2.2标准以后出现的可以工作在66MHz的时钟频率上.不过现在一般来说,卡和插槽都做成可以同时兼容两种电压的版本,也都有防插错设计,只要能插上都是可以工作,不过工作在哪种时钟频率上就要分析…
1. PCI PCI 是 Peripheral Component Interconnect(外设部件互连标准)的缩写,它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽. PCI 插槽也是主板带有最多数量的插槽类型,在目前流行的台式机主板上: ATX 结构的主板一般带有 5-6 个 PCI 插槽, MATX(小一点)主板也都带有 2-3 个 PCI 插槽,可见其应用的广泛性: 2. PCB PCB( Printed Circuit Board),中文名称为印制电路板,又称…
上篇文章主要从硬件的角度分析了PCI设备的特性以及各种寄存器,那么本节就结合LInux源代码分析下内核中PCI设备的各种数据结构以及相互之间的联系和工作机制 2016-10-09 注:一下代码参考LInux3.11.1内核 基本的数据结构: struct pci_bus struct pci_bus { struct list_head node; /* node in list of buses */ struct pci_bus *parent; /* parent bus this bri…
一.PCI总线的信号定义 PCI总线是一条共享总线,在一条PCI总线上可以挂接多个PCI设备.这些PCI设备通过一系列信号与PCI总线相连,这些信号由地址/数据信号.控制信号.仲裁信号.中断信号等多种信号组成. PCI总线是一个同步总线,每一个设备都具有一个CLK信号,其发送设备与接收设备使用这个CLK信号进行同步数据传递.PCI总线可以使用33MHz或者66MHz的时钟频率,而PCI-X总线可以使用133MHz.266MHz或者533MHz的时钟频率. 除了RST#.INTA~D#.PME#和…
本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors ( vend_id varchar(20) not null, vend_name varchar(50) not null, vend_address varchar(100), vend_city varchar(100), vend_state varchar(100), vend_zip varchar(20), vend_country varchar(100), PRIMARY KE…
作者:朱金灿 来源:http://blog.csdn.net/clever101 gxl的二次开发分初级和高级之分.初级是gxl提供了几百个模块供你编排成不同的作业.高级就是你可以编写你的算法模块,然后把它插进gxl里去.下面具体谈谈gxl二次开发的高级部分.高级二次开发需要做下面几个工作: 1.      编写算法模块 算法模块一般是控制台exe形式存在,参数用命令行传入.我不确定python能否直接调用dll的接口函数. 2.      编写xml文件来构建 gxl的管理界面和输入参数界面采…
原文地址:http://www.cnblogs.com/jacklu/p/6139347.html 正如前几篇博客所说,使用WDF开发PCIe驱动程序是我本科毕业设计的主要工作.在读研的两年,我也分别为所在课题组移植了自己编写的驱动程序,在Windows 32位和64位平台下的PXI.PXIe.PCI.PCIe板卡分别得到了验证. 这篇文章根据自己最新编写的驱动代码(源代码请找博主索取),主要讲述如何为自己的硬件板卡移植驱动程序,并简单讲述如何使用Altera系列FPGA配置PCI IP核,然后…
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7)快照 (snapshot) (8)迁移 (migration) 本文将分析 PCI/PCIe 设备直接分配(Pass-through)和 SR-IOV, 以及三种 I/O 虚拟化…
Linux PCI/PCI-E设备配置空间读取与修改 1 前言 PCI和PCI Express,是计算机常使用的一种高速总线.操作系统中的PCI/PCI-E设备驱动以及操作系统内核,都需要访问PCI及PCI-E配置空间.PCI/PCI-E设备的正常运行,离不开PCI/PCI-E配置空间.通过读写PCI/PCI-E配置空间,可以更改设备运行参数,优化设备运行.本文介绍用户空间可以读取.修改.扫描PCI/PCIE设备的用户命令及使用. 在Linux内核中,为PCI和PCI-E只适用了一种总线PCI(…
How PCI Express Works | PCIe工作原理 PCI Express is a high-speed serial connection that operates more like a network than a bus. Learn how PCI Express can speed up a computer and replace the AGP and view PCI Express pictures. Peripheral Component Interco…
1:首先统一可扩展固件接口(UEFI)是一种规范定义操作系统和平台固件之间的软件接口. UEFI旨在替代基本输入/输出系统(BIOS)固件接口.(legacy) 硬件平台厂商越来越多地采用UEFI管理其引导固件开发的规范. 2:OVMF(Open Virtual机器固件),X64虚拟机的支持. The following guest OSes were tested with OVMF: - Red Hat Enterprise Linux 6 - Red Hat Enterprise Linu…
目前用于访问PCIe配置空间寄存器的方法需要追溯到原始的PCI规范.为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这种方法可以访问所有PCI设备的255 bytes配置寄存器.Intel Chipsets目前仍然支持这种访问PCI配置空间的方法. PCIe规范在PCI规范的基础上,将配置空间扩展到4K bytes,至于为什么扩展到4K,具体可以参考PCIe规范,这些功能都需要配置空间.原来的CF8/CFC方法仍然可以访问所有PC…
眼下用于訪问PCIe配置空间寄存器的方法须要追溯到原始的PCI规范. 为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这样的方法能够訪问全部PCI设备的255 bytes配置寄存器.Intel Chipsets眼下仍然支持这样的訪问PCI配置空间的方法. PCIe规范在PCI规范的基础上,将配置空间扩展到4K bytes,至于为什么扩展到4K,详细能够參考PCIe规范,这些功能都须要配置空间.原来的CF8/CFC方法仍然能够訪问全…
PCIe在传输中用8b/10b编码,所以单PCEe2.0的有效带度是4Gb/s x2模式将用于内部接口而非插槽模式 PCIe卡能使用在至少与之传输通道相当的插槽上(例如x1接口的卡也能工作在x4或x16的插槽上).一个支援较多传输通道的插槽可以建立较少的传输通道(例如8个通道的插槽能支援1个通道).PCIe设备之间的链接将使用两设备中较少通道数的作为标准.一个支援较多通道的设备不能在支援较少通道的插槽上正常工作,例如x4接口的卡不能在x1的插槽上正常工作(插不入),但它能在x4的插槽上只建立1个…
  原文  http://resources.infosecinstitute.com/system-address-map-initialization-x86x64-architecture-part-2-pci-express-based-systems/   This article is the second part of a series that clarifies PCI expansion ROM address mapping to the system address m…
http://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-1 Down to the TLP: How PCI express devices talk (Part I) Foreword While I was writing the Xillybus IP core for PCI express, I quickly found out that it’s very difficult to start…
从并行到串行: PCI Express(又称PCIe)是一种高性能.高带宽串行通讯互连标准,取代了基于总线的通信架构,如:PCI.PCI Extended (PCI-X) 以及加速图形端口(AGP). PCI-e的主要性能: 更低的生产成本 更高系统吞吐量 更好可扩展性和灵活性 上述传统基于总线的互连几乎根本无法达到PCI-e所拥有的优秀性能. PCI Express标准的制定是着眼未来的,它还在继续发展为系统提供更高的吞吐量.第一代PCIe约定的吞吐量是2.5千兆位/秒(Gbps),第二代则达…
PCI设备都有独立的配置空间,HOST主桥通过配置读写总线事务访问这段空间.PCI总线规定了三种类型的PCI配置空间,分别是PCI Agent设备使用的配置空间,PCI桥使用的配置空间和Cardbus桥片使用的配置空间. 本节重点介绍PCI Agent和PCI桥使用的配置空间,而并不介绍Cardbus桥片使用的配置空间.值得注意的是,在PCI设备配置空间中出现的地址都是PCI总线地址,属于PCI总线域地址空间. 2.3.1 PCI桥 PCI桥的引入使PCI总线极具扩展性,也极大地增加了PCI总线…
PCIe总线作为处理器系统的局部总线,其作用与PCI总线类似,主要目的是为了连接处理器系统中的外部设备,当然PCIe总线也可以连接其他处理器系统.在不同的处理器系统中,PCIe体系结构的实现方法略有不同.但是在大多数处理器系统中,都使用了RC.Switch和PCIe-to-PCI桥这些基本模块连接PCIe和PCI设备.在PCIe总线中,基于PCIe总线的设备,也被称为EP(Endpoint). 4.2.1 基于PCIe架构的处理器系统 在不同的处理器系统中,PCIe体系结构的实现方式不尽相同.P…
与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端.PCIe总线除了总线链路外,还具有多个层次,发送端发送数据时将通过这些层次,而接收端接收数据时也使用这些层次.PCIe总线使用的层次结构与网络协议栈较为类似. 4.1.1 端到端的数据传递 PCIe链路使用"端到端的数据传送方式",发送端和接收端中都含有TX(发送逻辑)和RX(接收逻辑),其结构如图4?1所示. 由上图所示,在PCIe总线的物理链路的一…
关于PCI设备的配置空间网上已经有很多资料了,如下图就是PCI设备必须支持的64个字节的配置空间,范围为0x00-0x3f. 很多PCI设备仅仅支持者64字节的配置空间.PCI和PCIe配置空间的区别如下文.此外PCI/PCI-X和PCIe设备还扩展了0x40和0xFF这段配置空间,这段空间主要存放一些与MSI或者MSI-X 中断机制相关的Capability结构.其中所有能够提交中断请求的PCIe设备,必须支持MSI或者MSI-X 中断机制相关的Capability结构.PCIe设备还支持0x…
1. 关闭PCIe 控制器: 通过向系统控制寄存器PERIPHCTRL30[pcie0_app_ltssm_enabl]写入0 关闭PCIe0 控制 器. 通过向系统控制寄存器PERIPHCTRL77[pcie1_app_ltssm_enabl]写入0 关闭PCIe1 控制 器. 2. 使能PCIe 控制器相关的时钟: 设置CRG 寄存器PERI_CRG30[pcie0_cken]使能PCIe0 控制器时钟. 设置CRG 寄存器PERI_CRG30[pcie1_cken]使能PCIe1 控制器时…
概述 1.PCI设备一般都具有双重身份,一方面作为PCI设备注册到Linux内核,另一方面,作为字符设备或者块设备,或者网络设备注册到Linux内核,所以,在看PCI设备时一定要注意到这点. 2. 一.PCI接口规范 1.PCI接口的配置空间 PCI总线规范定义的配置空间总长度为256个字节,配置信息按一定的顺序和大小依次存放.前64个字节的配置空间称为配置头,对于所有的设备都一样,配置头的主要功能是用来识别设备.定义主机访问PCI卡的方式(I/O访问或者存储器访问,还有中断信息).其余的192…
前言 今天其实我在公司也没有做什么,但是昨天就把pcie遍历的mmio形式做了出来,赞扬公司的台湾服务器,至少我可以使用google来去搜索我想要的资料和答案,有一位大神在台湾的论坛上发布了一片博文,针对dos环境下的mmio的方法,在国内通过百度等等方法是无法访问到的,当然最让人失望的是,如果我不开代理,直接输入网址也是无法进入的,可能有很多人觉得你遍历pcie干吗?嘿嘿,那就是告诉你如何通过代码去访问我门电脑里面最底层的设备,这是一种极其需要能力的.好了,不扯皮了,小编带你通过c语言与汇编的…