我試圖通過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