PCIe驱动程序 - 用户空间如何访问它?

时间:2016-02-08 18:26:31

标签: linux linux-kernel linux-device-driver pci-e userspace

我正在为Linux编写PCIe驱动程序,目前没有DMA,并且需要知道从用户空间启用后如何读取和写入PCIe设备。

在驱动程序中,我在probe()中执行基础知识:

pci_enable_device();
pci_request_regions();
pci_iomap();

但是如何从用户空间访问这个内存来读写呢?我是否将文件操作添加到PCIe驱动程序?来自pci_iomap的内存是否显示用户空间代码可以调用的位置:

open('mapped memory location');
mmap(...);

如果是,那么位置是什么?

注意: PCIe设备不会插入任何Linux子系统,如音频,以太网等。

2 个答案:

答案 0 :(得分:2)

如果您只想将内存从内核空间导出到用户空间并获得中断,请考虑UIO driver

有了它,所有访问都将通过/ dev / uioX文件完成。您可以在其上执行mmap()以导出内存,并且您可以读取(使用阻塞读取)到" catch"中断。

UIO非常适合PCIe,内核中有already is a driver

答案 1 :(得分:0)

您可以使用hoistingregister_chrdev等功能注册设备。考虑device_create

<script>
var myCounter = 0;
var myVar = setInterval(myTimer ,1000);
function myTimer() {
    var d = new Date();
    document.getElementById("demo").innerHTML = d.toLocaleTimeString();
}

function checkTime() {
    myCounter += 1;
    if (myCounter == 1) {
        clearInterval(myVar);
        document.getElementById("test").innerHTML = "ok";
    } else {
        myVar = setInterval(myTimer ,1000);
        myCounter = 0;
        document.getElementById("test").innerHTML = "clicked again";
    }
}
</script>