使用 inb, inl, inw 从用户空间访问内核空间

Ren*_*h G 6 linux programming drivers kernel

什么是使用的一些用户空间的示例inbinl以及inw在Linux中访问内核空间?

Mat*_*Mat 5

inboutb和朋友不是用于内核↔用户空间通信,它们用于读取和写入特定于平台的IO端口。

这些功能的典型用途是与串行或并行端口(以及由此连接的设备)直接交互,而无需一路创建特定的内核设备驱动程序。
X 服务器还可以使用它们与视频(或可能的输入设备)硬件进行低级通信。

要从用户空间使用这些调用,需要做两件事:

  • 调用进程必须具有 CAP_SYS_RAWIO能力(这通常意味着它需要以 root 身份运行)。
  • 调用进程必须请求许可才能使用它想要的端口,ioperm或者iopl系统调用。

Linux I/O 端口编程 mini-HOWTO将带您了解要点,最后有一个简单的示例程序*
请注意,使用它的程序直接与这些端口后面的任何硬件(或固件)通信。内核不会验证或以其他方式干扰这些调用。因此,误用它们可能会导致严重的问题。小心轻放。

*您需要使用#include <stdlib.h>并替换<asm/io.h><sys/io.h>以使其编译。