Re: détection irqoccupé

トップ ページ

このメッセージに返信
著者: Christophe Baillon
日付:  
To: Olivier_Allard-Jacquin, Guilde
題目: Re: détection irqoccupé
Bon, puisque que beaucoup de personnes m'ont demandé en privé mon petit
programme, je le joins sur la guilde (il est tout petit).

Il s'agit d'un petit prog en C fait en 10 minutes qui se sert du fait
que quand on lit à une adresse de l'espace d'entrée/sortie,
on trouve 0xff si il n'y a rien à cette adresse, et une autre valeur
si qqe chose est présent.

C'est vraiment tout simple comme programme. Je l'avais pas fini,
(Les options ne sont pas gérées). Si quelqu'un a du temps pour
terminer proprement, il est le bienvenu.

Il faut etre root pour le lancer.
Il devrait se compiler avec :
gcc -o ioprobe ioprobe.c

si ca marche pas, en rajoutant -O3, ca devrait aller.


Si vous avez des commentaires, ou si ca ne marche pas, n'hésitez pas
à me le dire.

a+

>      Ca, c'est non seulement utile, mais c'est super intéréssant (ne
> serait-ce
> que pour le code en lui-même) !!

>
>      Si tu l'as sous la main, est-ce que tu peux me l'envoyer STP ?

>
>      Merci d'avance.

>
>
>                               Olivier

>
>


/*************************************************/
/**                IOProbe                      **/
/** This programm scan every ports IO           **/
/**  of a PC (just Intel plateform with Linux)  **/
/**  and print which one are used by any card   **/
/**                                             **/
/*************************************************/



/* Si on trouve la valeur FF a une adresse => port inutilise */


#include <asm/io.h>
//#include <sys/io.h>
#include <unistd.h>

#define TRUE 1
#define FALSE 0

int option_a = 0;
int option_p = 0;
int option_l = 0;
int option_v = 0;
int option_h = 0;


void usage()
{
  printf("IOProbe version 1.0\n");
  printf("Usage : IOProbe [-a] [-p port] [-l] [-v] [-h]\n");
  printf("  Options : [-a]      : Affiche tous les valeurs contenues dans chaque port\n");
  printf("            [-p port] : Affiche seulement les infos concernant port\n");
  printf("            [-l]      : Donne uniquement les ports utilis?s\n");
  printf("            [-v]      : Retourne le num?ro de version\n");
  printf("            [-h]      : Affiche cet ?cran d'aide\n");
  printf("ATTENTION : Le programme n'est pas termin?, Ne pas mettre d'options\n");
  printf("Scan des ports d'entr?e/sortie PC\n");
  printf("Auteur : Christophe Baillon (Janvier 2001/AFPA) - GPL\n\n\n");
}



void version()
{
printf("IOProbe version 1.0\n");
}


void parse(int argc, char **argv)
{
int c;

  if (c > 0)
    {
      for (c = 1; c <= argc; c++){
    if (strcmp(argv[c],"-a")) 
      {
        printf("Affichage complet (-a)\n");
        option_a = TRUE;
      }
    if (strcmp(argv[c], "-p")) 
      {
        printf("Option -p\n");
        option_p = TRUE;
      }
    if (strcmp(argv[c],"-l"))
      {
        printf("Option -l\n");
        option_l = TRUE;
      }
    if (strcmp(argv[c],"-v"))
      {
        printf("Option -v\n");
        option_v = TRUE;
      }
    if (strcmp(argv[c],"-h"))
      {
        printf("Option -h\n");
        option_h = TRUE;
      }
      }
    }
}



void scan_all()
{
int a;
unsigned char val;

  for(a = 0x200; a <= 0x8ff; a = a + 0x10)
    {
      ioperm(a, 1);
      val = inb(a);
      usleep(10);
      printf("Scan du port %x : %x  \n", a, val);
    }
}



void scan_used()
{
int a;
unsigned char val;

  for(a = 0x200; a <= 0x3ff; a = a + 0x10)
    {
      ioperm(a, 1);
      val = inb(a);
      usleep(10);
      if (val != 0xff)
    printf("Port %x utilis?. Valeur : %x  \n", a, val);
    }
}




void scan_port(int port)
{
int val;

  ioperm(port, 1);
  val = inb(port);
  if (val == 0xff)
    printf("Port %x inutilis? (valeur : %x)\n", port, val);
  else
    printf("Le port %x est utilis? (valeur : %x)\n", port, val);
}



main(int argc, char *argv[])
{
  if (argc > 1)
    usage();
  else
    {
      //parse(argc, argv);
      scan_used();
    }
}