相关疑难解决方法(0)

我是否需要在Linux 3.12驱动程序中"启用"PCIe内存区域?

我有代码,从我的PCIe驱动程序的probe()函数调用(松散地基于这篇文章):

编辑: 根据Andreas Bombe的回复,我更改了代码使用pci_iomap(),但我仍然遇到系统挂起

static my_pci_dev pci_dev; /* local structure */
static int pci_setup_region(struct pci_dev *dev)
{
    int bar = 0;

    pci_dev.physical.addr = pci_resource_start(dev, bar);
    pci_dev.physical.size = pci_resource_len(dev, bar);

    pci_dev.virtual.addr = pci_iomap(dev, bar, pci_dev.physical.size);
    if (NULL == pci_dev.virtual.addr) {
        return -ENOMEM;
    } else {
        pci_dev.virtual.size = pci_dev.physical.size;
    }
    printk(KERN_ALERT "Virtual address: %p", pci_dev.virtual.addr);
    if (request_mem_region(pci_dev.physical.addr, pci_dev.physical.size, DEVICE_NAME) == NULL) {
        pci_release_resources();
        return -EBUSY;
    } else {
        pci_dev.physical.allocated = 1;
    }

    /* Test it out! …
Run Code Online (Sandbox Code Playgroud)

linux driver linux-device-driver linux-kernel pci-e

5
推荐指数
1
解决办法
3985
查看次数

标签 统计

driver ×1

linux ×1

linux-device-driver ×1

linux-kernel ×1

pci-e ×1