Что вызывает ошибку сегментации при вызове inb_p ()?
Я получаю ошибку сегментации при попытке прочитать порт с помощью inb_p (). Я'я собираю это в системе Debian с ядром 2.6.6 в двухъядерной системе Intel D525 (Advantech PCM 9389 SBC) Вот пример программы, которая иллюстрирует segfault.
Какова вероятная причина? Как это исправить?
В настоящее время я неНет никаких устройств, подключенных. Может ли это вызвать сегфо? Я бы ожидал получить либо ноль, либо какой-нибудь случайный байт, но это не ошибка.
Другие вещи, которые я пробовал: 1) Объявили входную переменную как int вместо char. 2) Использовал iopl () вместо ioperm ()
/*
* ioexample.c: very simple ioexample of port I/O
* very simple port i/o
* Compile with `gcc -O2 -o ioexample ioexample.c',
* and run as root with `./ioexample'.
*/
#include
#include
#include
#include
#define BASEPORT 0x0100 /* iobase for sample system */
#define FLIPC 0x01
#define FLIPST 0x0
#define DIPSWITCH 0x25
int main()
{
char cinput;
cinput = 0xff;
setuid(0);
printf("begin\n");
/* Get access to the ports */
if (ioperm(BASEPORT+DIPSWITCH, 10, 1))
{
perror("ioperm");
exit(EXIT_FAILURE);
}
printf("read the dipswitch with pause\n");
cinput = inb_p(BASEPORT+DIPSWITCH); //