我试图通过PCI提供DMA。为此,我有一个sysfs驱动程序的例子。我成功地将数据存储到RAM中,但不幸的是我无法读取它们。我有一个函数store_dmaread和show_dmaread。我通过这样的c代码访问它们。写函数可以正常工作,但是我通过read()函数打开的显示函数(读取DMA数据,打印它们),但用户空间缓冲区在该函数中不可见。从sysfs读取数据
char buf[2] = {3,3};
fw = open("/sys/bus/pci/devices/0000\:01\:00.0/dmaread", O_RDWR);
read (fw,buf, 2);
write (fw, buf, 2);
close(fw);
驱动程序中的功能是这样的:
static ssize_t show_dmaread(struct device *dev, struct device_attribute *attr, char *buf)
{
printk("User space buffer value %d \n", buf[0]) // PRINTS 0
// MORE CODE WHICH WORKS
}
static ssize_t store_dmaread(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
// WORKS FINE THE ATTRIBUTE CHANGES ITS VALUE
}
非常感谢帮助
非常感谢你,我现在明白,但仍然无法访问自动分配的缓冲区。我可以在函数show fill it中打开它的值来访问它,但是show函数完成后,我找不到任何解决方案如何在用户空间访问它。 – Nuke