我正在为Linux(目前没有DMA)编写PCIe驱动程序,并且一旦从用户空间启用PCIe设备,就需要知道如何读写该PCIe设备。
在驱动程序中,我执行probe()的基础知识:
pci_enable_device();
pci_request_regions();
pci_iomap();
但是,如何从用户空间访问此内存以进行读写呢?我是否可以在PCIe驱动程序中添加文件操作? pci_iomap中的内存是否显示在用户空间代码可以调用的某个位置:
open('mapped memory location');
mmap(...);
如果是这样,那么位置在哪里?
注意:PCIe设备不会插入任何Linux子系统,例如音频,以太网等。
最佳答案
您可以使用 register_chrdev
和 device_create
之类的功能注册设备。考虑kernel source for /dev/null and /dev/mem:
static int __init chr_dev_init(void)
{
int minor;
if (register_chrdev(MEM_MAJOR, "mem", &memory_fops))
printk("unable to get major %d for memory devs\n", MEM_MAJOR);
mem_class = class_create(THIS_MODULE, "mem");
if (IS_ERR(mem_class))
return PTR_ERR(mem_class);
mem_class->devnode = mem_devnode;
for (minor = 1; minor < ARRAY_SIZE(devlist); minor++) {
if (!devlist[minor].name)
continue;
/*
* Create /dev/port?
*/
if ((minor == DEVPORT_MINOR) && !arch_has_dev_port())
continue;
device_create(mem_class, NULL, MKDEV(MEM_MAJOR, minor),
NULL, devlist[minor].name);
}
return tty_init();
}
fs_initcall(chr_dev_init);
关于linux - PCIe驱动程序-用户空间如何访问它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35276634/