我有一個PCI設備,我想要的是通過/ dev/pcidevice中的「cat」讀取它的內存。我對字符設備的讀取功能的第一次嘗試是這樣的:在char設備中,我可以在哪裏放置ioread?
ssize_t cdev_read(struct file *filp, char __user *buffer, size_t count, loff_t *f_pos) {
ssize_t retval = 0;
struct mypci_dev *device = filp->private_data;
/* reading data from pci device */
device->values.fst = ioread16(device->bar[0]+OFFSET_FST);
device->values.snd = ioread16(device->bar[0]+OFFSET_SND);
...
device->values.lst = ioread16(device->bar[0]+OFFSET_LST);
retval = copy_to_user(buffer, &device->values.fst, count);
return retval;
}
而且它沒有工作:/我改變了copy_to_user線進入
retval = copy_to_user(buffer, "dummy", strlen("dummy")+1);
但貓的/ dev/pcidevice仍然什麼也沒有返回。
接下來,我將所有ioread16調用轉換爲cdev_open(),並且我得到了我想要的。但現在我很好奇爲什麼它只能這樣工作。我怎樣才能使它以另一種方式工作? 自動櫃員機我認爲定時器開始複製等,但某種等待,直到ioreads已經完成就足夠了。 任何想法?
非常感謝!人民幣()缺失。 – schotter 2013-03-01 10:16:09