static struct pci_driver ne2k_driver = { .name = DRV_NAME, .probe = ne2k_pci_init_one, .remove = __devexit_p(ne2k_pci_remove_one), .id_table = ne2k_pci_tbl, ... }; 7.4 设备初始化步骤 使能设备。 请求I/O 端口以及 I/O 内存资源。 设置DMA mask size(coherent 及 streaming DMA...
int dma_set_coherent_mask(struct device *dev, u64 mask); 在这里,dev 是指向设备的设备结构的指针,而 mask 是一个位掩码,描述了您的设备支持的地址位。通常,设备的设备结构嵌入在设备的总线特定设备结构中。例如,&pdev->dev 是指向 PCI 设备的设备结构的指针(pdev 是指向您设备的 PCI 设备结构的指针)...
PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间, 其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始 化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/...
PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci...
Linux下PCI设备驱动开发详解(四),一般来说,用模块方式编写PCI设备驱动,通常至少要实现以下几个部分:初始化设备模块、设备打开模块、数据读写模块、中断处理模块、设备释放模块、设备卸载模块。
PCI Express(PCIeorPCI-E):PCI 的当前代,用串行接口取代并行接口。 PCI Express Mini Card:应用于较新的笔记本,取代 MiniPCI。 Express Card:应用于较新的笔记本,取代 CardBus。 这些技术都是互相兼容的,内核驱动可以使用同一套。内核不需要感知硬件到底用的是什么插槽和总线变种。
struct pci_driver *driver; void *driver_data; u64 dma_mask; u32 current_state; unsigned short vendor_compatible[DEVICE_COUNT_COMPATIBLE]; unsigned short device_compatible[DEVICE_COUNT_COMPATIBLE]; unsigned int irq; struct resource resource[DEVICE_COUNT_RESOURCE]; ...
PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准。Linux的内核能较好地支持PCI总线,本文以Intel 386体系结构为主,探讨了在Linux下开发PCI设备驱动程序的基本框架。
一、PCI总线系统体系结构 PCI是外围设备互连(Peripheral Component Interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用。PCI提供了一组完整的总线接口规范,其目的是描述如何将计算机系统中的外围设备以一种结构化和可控化的方式连接在一起,同时它还刻画了外围设备在连接时的电气...
对该驱动程序稍微了解后,先跳过其他部分,直接看DMA相关代码。在e1000_probe函数,即“插入新设备”函数中,下面这段代码先对DMA缓冲区的大小进行检查 如果是64位DMA地址,则把pci_using_dac标记为1,表示可以使用64位硬件,挂起32位的硬件;如果是32位DMA地址,则使用32位硬件;若不是64位也不是32位,则报错“没有可用...