Linux kernel 如何在Linux中访问DMA
我正在用Linux编写一个设备驱动程序,我需要为它实现Linux kernel 如何在Linux中访问DMA,linux-kernel,device-driver,dma,Linux Kernel,Device Driver,Dma,我正在用Linux编写一个设备驱动程序,我需要为它实现DMA 显然,DMA缓冲区可以通过调用pci\u alloc\u consistent()来分配。但是,我们如何从用户级别向这些缓冲区写入命令呢 任务包括将值写入特定寄存器,如何使用DMA命令实现这些值?我相信您可以通过I/O操作使用DMA进行写入,您可以通过GNU C库访问这些操作。您必须使用诸如ioperm或iopl之类的系统调用并以root用户身份运行才能访问DMA寄存器。至少这是一个人获得IO空间访问权的方式,IO空间可用于DMA访问
DMA
显然,DMA
缓冲区可以通过调用pci\u alloc\u consistent()
来分配。但是,我们如何从用户级别向这些缓冲区写入命令呢
任务包括将值写入特定寄存器,如何使用
DMA
命令实现这些值?我相信您可以通过I/O操作使用DMA进行写入,您可以通过GNU C库访问这些操作。您必须使用诸如ioperm或iopl之类的系统调用并以root用户身份运行才能访问DMA寄存器。至少这是一个人获得IO空间访问权的方式,IO空间可用于DMA访问。虽然我可能无法完全回答这个问题,但希望这能为您指明一个好的方向。我相信您可以通过I/O操作使用DMA编写,您可以通过GNU C库访问这些操作。您必须使用诸如ioperm或iopl之类的系统调用并以root用户身份运行才能访问DMA寄存器。至少这是一个人获得IO空间访问权的方式,IO空间可用于DMA访问。虽然我可能无法完全回答这个问题,但希望这能为您指出一个好的方向。当您说“用户级别”时,您的意思是“来自用户空间”。虽然有一些方法可以采用,但用户空间通常不具有DMA硬件的可见性。当你说用户级别时,你的意思是从用户空间。尽管有一些方法,但用户空间通常无法看到DMA硬件。