linux的pci驱动模型】的更多相关文章

做个笔记 linux通过pcibios_scan_root函数以深度优先的算法搜索整个pci架构,建立一个树形的链表,如下: 之后再调用pci_bus_add_devices函数把所有搜索到的pci_dev链接到pci_bus_type的klist_devices字段下.当设备驱动通过pci_register_driver注册的时候就会搜索klist_devices里的设备,看是否和驱动支持的设备相匹配. 这个模型需要注意的是pci_root_buses和pci_bus_type两个变量别弄混了…
1. Linux2.6内核引入总线.设备.驱动模型来描述各种总线(PCI.USB.I2C.SPI)与外围设备及其驱动之间的关系. 2. 在Linux内核中,总线用bus_type结构来描述,定义于文件:include/linux/Device.h struct bus_type { const char *name; struct bus_attribute *bus_attrs; struct device_attribute *dev_attrs; struct driver_attribu…
一.使用字符设备驱动程序 1. 编译/安装驱动 在Linux系统中,驱动程序通常采用内核模块的程序结构来进行编码.因此,编译/安装一个驱动程序,其实质就是编译/安装一个内核模块 2. 创建设备文件 通过字符设备文件,应用程序可以使用相应的字符设备驱动程序来控制字符设备. 创建字符设备文件的方法一般有两种: 1.使用mknod命令mknod/dev/文件名c 主设备号  次设备号 查询设备号的命令  cat /proc/devices 2. 使用函数在驱动程序中创建(后续课程介绍) 编写应用程序时…
尽管LDD3中说对多数程序员掌握设备驱动模型不是必要的,但对于嵌入式Linux的底层程序员而言,对设备驱动模型的学习非常重要.     Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统结构的一般性抽象描述.换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要新添加设备或驱动提供一般性的统一接口,这使得驱动程序的开发变得更简单了,而程序员只需要去学习接口就行了. 在内核里,有各种各样的总线,如 usb_bus_type.…
1. 关键数据结构 PCI设备上有三种地址空间:PCI的I/O空间.PCI的存储空间和PCI的配置空间.CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用.内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所有找到的PCI设备,以及这些设备的参数和属性. Linux驱动程序通常使用结构(struct)来表示一种设备,而结构体中的变…
裸机编写驱动比较自由,按照手册实现其功能即可,每个人写出来都有很大不同: 而Linux中还需要按照Linux的驱动模型来编写,也就是需要按照"模板"来写,写出来的驱动就比较统一. 一. Linux采用总线设备驱动模型.主要包含总线.设备.驱动三个部分. 总线:最先注册,有几个重要的回调函数,例如match函数用于匹配device和driver. 设备:设备的物理信息,例如设备名.物理地址.中断号等: 驱动:设备的驱动程序和设备名等信息,例如初始化函数.波特率设置函数.启动停止函数.中断…
本文将简要地介绍Linux总线设备驱动模型及其实现方式,并不会过多地涉及其在内核中的具体实现,最后,本文将会以平台总线为例介绍设备和驱动程序的实现过程. 目录: 一.总线设备驱动模型总体介绍及其实现方式 1.总线设备驱动模型总体介绍 2.总线实现方式 (1):描述 (2):注册和卸载 3.设备实现方式 4.驱动实现方式 二.平台总线设备驱动 1.平台设备的实现方式 2.平台驱动的实现方式 3.平台总线驱动与设备匹配机制 三.按键实例 1.按键设备 2.按键驱动 一.总线设备驱动模型总体介绍及其实…
Linux素来以其强大的网络功能著名,同时, 网络设备也作为三大设备之一, 成为Linux驱动学习中必不可少的设备类型, 此外, 由于历史原因, Linux并没有强制对网络设备贯彻其"一切皆文件"的思想, 网络设备不以/dev下的设备文件为接口,用户程序通过socket作为访问硬件的接口.本文以Linux3.14.0内核为例, 讨论Linux中的网络驱动模型 Linux的网络设备并不使用文件作为用户程序访问网络设备的接口,所以/sys/dev下和/dev下并没有相应的网络设备文件,在L…
1.总线.设备.驱动模型 本着高内聚.低耦合的原则,Linux 把设备驱动模型分为了总线.设备和驱动三个实体,这三个实体在内核里的职责分别如下: 设备和驱动向总线进行注册,总线负责把设备和对应的驱动绑定起来. 驱动通过总线 API 接口 platform_get_resource() 取得板级设备信息,这样驱动和设备之间就实现了高内聚.低耦合的设计, 无论设备怎么换,驱动都可以岿然不动. 代码架构如下图所示: 2.设备树 引入设备树之前,关于硬件设备的描述信息一般放在一个个类似 arch/xxx…
Linux素来以其强大的网络功能著名,同时, 网络设备也作为三大设备之一, 成为Linux驱动学习中必不可少的设备类型, 此外, 由于历史原因, Linux并没有强制对网络设备贯彻其"一切皆文件"的思想, 网络设备不以/dev下的设备文件为接口,用户程序通过socket作为访问硬件的接口.本文以Linux3.14.0内核为例, 讨论Linux中的网络驱动模型 Linux的网络设备并不使用文件作为用户程序访问网络设备的接口,所以/sys/dev下和/dev下并没有相应的网络设备文件,在L…