我正在为Linux编写PCIe驱动程序,目前没有DMA,并且需要知道从用户空间启用后如何读取和写入PCIe设备。
在驱动程序中,我在probe()中执行基础知识:
pci_enable_device();
pci_request_regions();
pci_iomap();
但是如何从用户空间访问这个内存来读写呢?我是否将文件操作添加到PCIe驱动程序?来自pci_iomap的内存是否显示用户空间代码可以调用的位置:
open('mapped memory location');
mmap(...);
如果是,那么位置是什么?
注意: PCIe设备不会插入任何Linux子系统,如音频,以太网等。
答案 0 :(得分:2)
如果您只想将内存从内核空间导出到用户空间并获得中断,请考虑UIO driver。
有了它,所有访问都将通过/ dev / uioX文件完成。您可以在其上执行mmap()以导出内存,并且您可以读取(使用阻塞读取)到" catch"中断。
UIO非常适合PCIe,内核中有already is a driver。
答案 1 :(得分:0)
您可以使用hoisting和register_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>