Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 如何在Linux中访问DMA_Linux Kernel_Device Driver_Dma - Fatal编程技术网

Linux kernel 如何在Linux中访问DMA

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访问

我正在用Linux编写一个设备驱动程序,我需要为它实现
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硬件。