pci的设备标识 域:总线编号:设备编号:功能号
pci规范中,设备的探测过程已经省去了,交给了bios引导过程中完成识别,也就是说在/sys/bus/pci/devices下的设备硬件信息,所以pci设备驱动开发者不需要去探测设备了,只需要读取这些已经探测完成的信息即可
pci设备的总线地址就是在/sys/bus/pci/devices/设备标识/device中的值,这个值已经映射到内核的地址空间了
cpu访问的设备的物理地址,都是设备的寄存器展现给总线的地址,这个地址只是在CPU和北桥芯片之间通信用的,这个地址到了北桥,需要转换为总线:设备号:功能号 给总线来区分pci设备。
这个地址的识别不仅仅是设备的地址,还包括设备内存,IO端口,这些内核空间的地址,北桥芯片都要负责转换 pci设备的中断线是共享的。
pci的设备内存映射,pci设备在引导过程中,会将这些信息放在/sys/bus/pci/device/设备标识/resource下,在设备驱动的资源初始化时,会将映射后的结果放在/sys/bus/pci/drivers/设备驱动名/maps下能知道这个映射后的地址
pci的设备资源包括了bar0~bar5,对应了设备下的resource,pci设备最多可实现6个IO地址区域,这个IO区域一般映射了IO寄存器,在内核中,pci设备的IO区域已经集成到通用资源管理,无需访问配置寄存器来了解设备被映射到内存或者IO空间的何处,只需要调用pci_resource_start这些函数就可以了。
在linux下,设备就是文件,最后可以通过mmap设备文结合设备的IO地址和内存资源,可以重新映射,达到操作内存就能操作设备的效果
阅读(5166) | 评论(0) | 转发(0) |