Linux平台下pci总线驱动
发布网友
发布时间:2024-10-02 13:04
我来回答
共1个回答
热心网友
时间:2024-10-03 01:00
PCI总线,一种高性能局部总线,为满足外设间及外设与主机间的高速数据传输而诞生。在PCI系统中,PCI控制卡安装于PCI插槽内,支持32位或64位数据交换,实现智能PCI辅助适配器与CPU的并行任务执行。PCI允许多路复用,允许多个电子信号同时存在于总线上。每个设备配置有地址配置寄存器,初始化时配置总线地址,CPU可访问设备资源。PCI标准规定配置寄存器组最多256个连续字节,包括头部部分,用于设备类型、型号和厂商信息。
PCI总线架构中,根总线链接在pci_root_buses链表,pci_bus ->device链表连接所有设备,pci_bus->children链表连接下层总线,pci_dev->bus指向所属pci_bus,pci_dev->bus_list链接在bus的device链表上。所有设备链接在pci_device链表中。
在Linux环境下,PCI驱动包含两部分:PCI总线驱动及设备驱动,如字符设备、网络设备、tty设备、音频设备等。核心是pci_driver,负责资源申请、注册设备,并在探测函数中完成初始化。以三星平台s3c24XX为例,代码包括中断处理、打开、关闭和读取文件操作。
PCI驱动的代码模型包括设备支持项、中断处理程序、打开和关闭文件操作,以及文件操作结构体。misc设备注册用于管理PCI设备。设备初始化和卸载涉及使能、设置主控、注册杂项设备等步骤。
PCI I/O和PCI内存地址用于PCI设备与Linux核心驱动程序之间的通讯。例如,DEC21141快速以太网设备的内部寄存器映射到PCI I/O空间,Linux驱动通过读写这些寄存器控制设备。PCI视频卡使用大量PCI内存存储视频信息。
在系统初始化阶段,不允许访问PCI地址空间,直到通过PCI配置头中的命令域打开这些空间。重要的是,Linux设备驱动仅读写PCI I/O和PCI内存地址,无需直接访问配置空间,因为当系统初始化完成,设备地址空间已配置在总线上,驱动通过总线地址访问设备。
以上内容仅为PCI部分简介,深入了解可参考《linux内核情景分析》PCI驱动一章,内容详尽。