Не могли бы вы привести примеры использования пространства пользователя в строке для доступа к пространству ядра в Ubuntu?
Эти функции (или макросы) определены в <asm/io.h>
. Вы должны указать gcc -O
, что, по-моему, код должен быть встроен (я думаю).
Для их использования введите
man inw
Makelinux.net также есть руководство о том, как их использовать.
Я не могу привести вам пример, поскольку это зависит от используемого вами оборудования, но это должно помочь вам начать работу.
Если кому-то это интересно, есть также модуль Python, portio , для обеспечения тех же функций.
Для использования команд порта IO (в/) Вы должны работать как корень и зарезервировали доступ через ioperm () вызов: http://manpages.ubuntu.com/ioperm
Если это beep.c
:
/* Copyright 2011, Kees Cook <kees@outflux.net>, 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./звуковой сигнал