我是GPU操作系统内核空间世界的新手。我想以PCI设备的形式访问GPU内存,通过它暴露在条上的内存来使用exmaple dev_alloc ()
,它正在分配内存并将一个地址返回给这个地址。
void *addr;
addr = dev_alloc ()
//check that the allocated address is in the device bar range
if(In_bar_range(virt_to_phy(addr))) {
WRITE_ONCE(addr[0], 0);
READ_ONCE(addr[0]);
}
我还尝试使用pci_iomap进行映射,如下所示
void* __iomap map;
u32 val;
map=pci_iomap(pci_dev,0,8);
iowrite8(0, map);
val=ioread8(map);
dev_info(&dev " value = %ud ", val);
试图从值中读取失败。它不返回0。它返回一个垃圾值。我不知道寻址转换(IO_MMU)是否有问题,或者我是否缺少某种CPU和GPU之间的同步,或者是否是另一个问题?
发布于 2022-04-28 17:25:18
不太确定您已经使用了什么,而且它可能会根据内核版本而有所不同,但我假设您已经有了一个指向设备的指针。
如果您还没有,那么首先需要通过pci_iomap()
(asm/pci_iomap.h
)获得一个iomem映射,传递一个指向设备(struct pci_dev
)和PCI条号的指针。然后,正如在DMA-API-HOWTO
中解释的那样,您应该能够使用io{read,write}*()
函数之一defined in asm/iomap.h
来读取/写入此映射。
https://stackoverflow.com/questions/72047051
复制相似问题