Использование inb, inl, inw для доступа к пространству ядра из пространства пользователя

Не могли бы вы привести примеры использования пространства пользователя в строке для доступа к пространству ядра в Ubuntu?

1
задан 18 January 2011 в 13:51

2 ответа

Эти функции (или макросы) определены в <asm/io.h>. Вы должны указать gcc -O, что, по-моему, код должен быть встроен (я думаю).

Для их использования введите

man inw

Makelinux.net также есть руководство о том, как их использовать.

Я не могу привести вам пример, поскольку это зависит от используемого вами оборудования, но это должно помочь вам начать работу.

Если кому-то это интересно, есть также модуль Python, portio , для обеспечения тех же функций.

0
ответ дан 18 January 2011 в 13:51

Для использования команд порта 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./звуковой сигнал

1
ответ дан 18 January 2011 в 13:51

Другие вопросы по тегам:

Похожие вопросы: