in/out na porty rucne?

David Šauer davids na orfinet.cz
Neděle Červen 6 20:41:24 CEST 1999


>>>> "PS" == Petr Soucek <petr na ryston.cz> writes:

    >> Ale asi to predpoklada, ze bude mit napsanou funkci muj_inb, treba
    >> pomoci makra inb. (#include <asm/io.h> nutne).

    PS> No prave tomu jsem se chtel vyhnout...

Jasne, ale problem je v tom, ze linux je prenositelny, tedy funguje i na
architekturach, ktere zadne in/out nemaji. Jak slozite(?) muze byt napsani
programu stylu:

#include <sys/io.h>
#include <stdio.h>
#include <stdlib.h>

int
my_in (int port)
{
  return inb (port);
}

void
my_out (int port, int value)
{
  outb (value, port);
  return;
}

int
main ()
{
  char povel;
  int port, hodnota;
  char s[100];

  // tady povolit, jen co vas zajima ...
  if (ioperm (0, 0x3ff, 1))
    exit (2);
  
  while (1)
    {
      int i;  
      fgets(s, 99, stdin);
      i = sscanf (s, "%c %i,%i", &povel, &port, &hodnota);
      if (i == 0) continue;
      if ((i == 1) && (povel == 'q')) break;
      if ((i == 2) && (povel == 'i'))
        {
           printf ("%d\n", my_in (port));
           continue;
        }
      if ((i == 3) && (povel == 'o'))
        { 
           my_out (port, hodnota);
           continue;
        }
      fprintf (stderr, "Chyba\n");
    }
}

tento programek lze pouzit primo nebo pomoci gdb.
Jo jeste: preklad: egcs -O2 -o <vystup> <zdrojak>.
A upozorneni: nezkousel jsem to naostro a je to pod GNU ... tedy bez zaruky 
...
-- 
* David Sauer, student of Czech Technical University
* electronic mail: davids na orfinet.cz (mime compatible)


Další informace o konferenci Linux