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

прежде всего удалить тотем и выполнить sudo apt-get install -f, а затем повторно установить тотем или попробовать. Это будет работать для вас

Cheers

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

18 ответов

Чтобы использовать команды ввода-вывода IO (вход / выход), вам нужно запустить от имени пользователя root и зарезервировать доступ через вызов 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; }

$ make beep

$ sudo ./beep

1
ответ дан 25 July 2018 в 22:36

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

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

man inw

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

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

если кого-то интересует это, есть также руководство, чтобы обеспечить такую же функциональность.

1
ответ дан 25 July 2018 в 22:36

Чтобы использовать команды ввода-вывода IO (вход / выход), вам нужно запустить от имени пользователя root и зарезервировать доступ через вызов 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; }

$ make beep

$ sudo ./beep

1
ответ дан 26 July 2018 в 22:57

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

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

man inw

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

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

Если кто-то заинтересован в этом, существует также guide , чтобы обеспечить ту же функциональность.

1
ответ дан 26 July 2018 в 22:57

Чтобы использовать команды ввода-вывода IO (вход / выход), вам нужно запустить от имени пользователя root и зарезервировать доступ через вызов 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; }

$ make beep

$ sudo ./beep

1
ответ дан 2 August 2018 в 04:02

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

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

man inw

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

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

Если кто-то заинтересован в этом, существует также guide , чтобы обеспечить ту же функциональность.

1
ответ дан 2 August 2018 в 04:02

Чтобы использовать команды ввода-вывода IO (вход / выход), вам нужно запустить от имени пользователя root и зарезервировать доступ через вызов 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; }

$ make beep

$ sudo ./beep

1
ответ дан 4 August 2018 в 20:06

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

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

man inw

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

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

Если кто-то заинтересован в этом, существует также guide , чтобы обеспечить ту же функциональность.

1
ответ дан 4 August 2018 в 20:06

для использования порта ввода-вывода команды (вход/выход), нужно запустить как root и защищены доступа через 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; }

$ сделать бип

$ судо ./бип

1
ответ дан 6 August 2018 в 04:06

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

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

man inw

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

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

Если кто-то заинтересован в этом, существует также guide , чтобы обеспечить ту же функциональность.

1
ответ дан 6 August 2018 в 04:06

для использования порта ввода-вывода команды (вход/выход), нужно запустить как root и защищены доступа через 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; }

$ сделать бип

$ судо ./бип

1
ответ дан 6 August 2018 в 04:07

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

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

man inw

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

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

Если кто-то заинтересован в этом, существует также guide , чтобы обеспечить ту же функциональность.

1
ответ дан 6 August 2018 в 04:07

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

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

   man inw  

У Makelinux.net также есть guide о том, как их использовать.

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

Если кто-то заинтересован в этом, существует также модуль Python, portio , чтобы обеспечить ту же функциональность.

1
ответ дан 7 August 2018 в 22:06

Чтобы использовать команды ввода-вывода IO (вход / выход), вам нужно запустить от имени пользователя root и зарезервировать доступ через вызов ioperm (): http://manpages.ubuntu.com/ioperm [ ! d3]

Если это beep.c :

  / * Copyright 2011, Kees Cook & lt; kees@outflux.net> ;, Лицензия: GPLv2 *  / #include & lt; unistd.h & gt;  #include & lt; stdio.h & gt;  #include & lt; sys / io.h & gt;  int main () {unsigned char orig, bits;  / * получить доступ к порту управления динамиком * / if (ioperm (0x61, 0x61, 1) & lt; 0) {perror ("0x61");  return 1;  } / * получить доступ к порту частоты динамиков * / if (ioperm (0x42, 0x42, 1) & lt; 0) {perror ("0x42");  return 2;  } / * включить динамик * / orig = bits = inb (0x61);  бит | = 3;  outb (бит, 0x61);  / * установить частоту 1000 Гц * / bits = 0xA9;  outb (бит, 0x42);  бит = 0x04;  outb (бит, 0x42);  / * слушать звуковой сигнал * / sleep (1);  / * восстановить биты колонок, чтобы выключить динамик * / outb (orig, 0x61);  return 0;  }  

$ make beep

$ sudo ./beep

1
ответ дан 7 August 2018 в 22:06

Чтобы использовать команды ввода-вывода IO (вход / выход), вам нужно запустить от имени пользователя root и зарезервировать доступ через вызов ioperm (): http://manpages.ubuntu.com/ioperm [ ! d3]

Если это beep.c :

  / * Copyright 2011, Kees Cook & lt; kees@outflux.net> ;, Лицензия: GPLv2 *  / #include & lt; unistd.h & gt;  #include & lt; stdio.h & gt;  #include & lt; sys / io.h & gt;  int main () {unsigned char orig, bits;  / * получить доступ к порту управления динамиком * / if (ioperm (0x61, 0x61, 1) & lt; 0) {perror ("0x61");  return 1;  } / * получить доступ к порту частоты динамиков * / if (ioperm (0x42, 0x42, 1) & lt; 0) {perror ("0x42");  return 2;  } / * включить динамик * / orig = bits = inb (0x61);  бит | = 3;  outb (бит, 0x61);  / * установить частоту 1000 Гц * / bits = 0xA9;  outb (бит, 0x42);  бит = 0x04;  outb (бит, 0x42);  / * слушать звуковой сигнал * / sleep (1);  / * восстановить биты колонок, чтобы выключить динамик * / outb (orig, 0x61);  return 0;  }  

$ make beep

$ sudo ./beep

1
ответ дан 10 August 2018 в 10:20

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

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

   man inw  

У Makelinux.net также есть guide о том, как их использовать.

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

Если кто-то заинтересован в этом, существует также модуль Python, portio , чтобы обеспечить ту же функциональность.

1
ответ дан 10 August 2018 в 10:20

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

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

   man inw  

У Makelinux.net также есть guide о том, как их использовать.

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

Если кто-то заинтересован в этом, существует также модуль Python, portio , чтобы обеспечить ту же функциональность.

1
ответ дан 13 August 2018 в 16:45

Чтобы использовать команды ввода-вывода IO (вход / выход), вам нужно запустить от имени пользователя root и зарезервировать доступ через вызов ioperm (): http://manpages.ubuntu.com/ioperm [ ! d3]

Если это beep.c :

  / * Copyright 2011, Kees Cook & lt; kees@outflux.net> ;, Лицензия: GPLv2 *  / #include & lt; unistd.h & gt;  #include & lt; stdio.h & gt;  #include & lt; sys / io.h & gt;  int main () {unsigned char orig, bits;  / * получить доступ к порту управления динамиком * / if (ioperm (0x61, 0x61, 1) & lt; 0) {perror ("0x61");  return 1;  } / * получить доступ к порту частоты динамиков * / if (ioperm (0x42, 0x42, 1) & lt; 0) {perror ("0x42");  return 2;  } / * включить динамик * / orig = bits = inb (0x61);  бит | = 3;  outb (бит, 0x61);  / * установить частоту 1000 Гц * / bits = 0xA9;  outb (бит, 0x42);  бит = 0x04;  outb (бит, 0x42);  / * слушать звуковой сигнал * / sleep (1);  / * восстановить биты колонок, чтобы выключить динамик * / outb (orig, 0x61);  return 0;  }  

$ make beep

$ sudo ./beep

1
ответ дан 13 August 2018 в 16:45

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

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