你无法直接从用户模式进程中使用 IRQ 或 DMA。你需要编写一个内核驱动程序;更多细节请参考 Linux 内核黑客指南 ,并参考内核源代码中的例子。
虽然从用户模式程序中禁用中断可能会很危险(即使内核驱动程序也会尽可能缩短禁用中断的时间),但你可以这样做。在调用 iopl(3) 之后,你可以通过调用 asm("cli"); 简单地禁用中断,并通过 asm("sti"); 重新启用它们。
iopl(3)
asm("cli");
asm("sti");