私は pci デバイスを持っていますが、必要なのは /dev/pcidevice から "cat" してそのメモリを読み取ることだけです。char デバイスの read 関数の最初の試みは次のようになりました。
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 が終了するまで何らかの待機があれば十分でしょう。何か案は?