我有一个 pci 设备,我想要的只是通过从 /dev/pcidevice 中“cat”来读取它的内存。我对 char 设备的读取功能的第一次尝试如下所示:
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);
但 cat /dev/pcidevice 仍然没有返回任何内容。
接下来,我将所有 ioread16 调用转移到 cdev_open() 中,我得到了我想要的。但现在我很好奇为什么它只能这样工作。我怎样才能让它以另一种方式工作?ATM 我会考虑开始复制等的计时器,但是等到 ioreads 完成就足够了。有任何想法吗?