Renjith G Asked: 2011-01-19 02:51:35 +0800 CST2011-01-19 02:51:35 +0800 CST 2011-01-19 02:51:35 +0800 CST 使用inb、inl、inw从用户空间访问内核空间 772 您能否给我一些使用 inb、inl、inw 访问 ubuntu 中的内核空间的用户空间示例? /卡努 drivers 2 个回答 Voted Stefano Palazzo 2011-01-19T04:41:30+08:002011-01-19T04:41:30+08:00 这些函数(或宏)在<asm/io.h>. 您需要告诉 gcc-O优化代码以使其内联(我认为)。 对于它们的用法,请键入 man inw Makelinux.net 也有关于如何使用它们的指南。 我不能给你一个例子,因为它取决于你使用的硬件,但这应该让你开始。 如果有人对此感兴趣,还有一个Python 模块 portio可以提供相同的功能。 Kees Cook 2011-07-25T10:23:05+08:002011-07-25T10:23:05+08:00 要使用 IO 端口命令(输入/输出),您需要以 root 身份运行并通过 ioperm() 调用保留访问权限:http: //manpages.ubuntu.com/ioperm 如果这是beep.c: /* Copyright 2011, Kees Cook <[email protected]>, License: GPLv2 */ #include <unistd.h> #include <stdio.h> #include <sys/io.h> int main() { unsigned char orig, bits; /* gain access to speaker control port */ if (ioperm(0x61, 0x61, 1) < 0) { perror("0x61"); return 1; } /* gain access to speaker frequency port */ if (ioperm(0x42, 0x42, 1) < 0) { perror("0x42"); return 2; } /* turn on speaker */ orig = bits = inb(0x61); bits |= 3; outb(bits, 0x61); /* set 1000 Hz frequency */ bits = 0xA9; outb(bits, 0x42); bits = 0x04; outb(bits, 0x42); /* listen to the beep */ sleep(1); /* restore speaker bits to turn off speaker */ outb(orig, 0x61); return 0; } $ 发出哔哔声 $ sudo ./哔
这些函数(或宏)在
<asm/io.h>
. 您需要告诉 gcc-O
优化代码以使其内联(我认为)。对于它们的用法,请键入
Makelinux.net 也有关于如何使用它们的指南。
我不能给你一个例子,因为它取决于你使用的硬件,但这应该让你开始。
如果有人对此感兴趣,还有一个Python 模块 portio可以提供相同的功能。
要使用 IO 端口命令(输入/输出),您需要以 root 身份运行并通过 ioperm() 调用保留访问权限:http: //manpages.ubuntu.com/ioperm
如果这是
beep.c
:$ 发出哔哔声
$ sudo ./哔