Что вызывает ошибку сегментации при вызове 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); // 

Ответы на вопрос(1)

Ваш ответ на вопрос