Avanti Indietro Indice

8. Risoluzione dei problemi

D1.

Quando accedo alle porte ottengo "segmentation faults".

R1.

Il tuo programma non ha i privilegi di root, oppure la chiamata ioperm() è fallita per qualche altro motivo. Controlla il valore restituito da ioperm(). Inoltre, assicurati di stare accedendo proprio alle porte che hai abilitato con ioperm() (vedi D3). Se stai usando le macro di ritardo (inb_p(), outb_p(), e via dicendo), ricordati di effettuare una chiamata a ioperm() per ottenere l'accesso anche alla porta 0x80.

D2.

Non riesco a trovare le funzioni in*() e out*() definite ovunque, e gcc si lamenta per dei riferimenti non definiti (undefined references).

R2.

Non hai compilato con l'ottimizzazione abilitata (-O) e quindi gcc non riesce a risolvere le macro contenute in asm/io.h. Oppure hai dimenticato di mettere #include <asm/io.h>

D3.

out*() non fà nulla, o fà qualcosa di strano.

R3.

Controlla l'ordine dei parametri; deve essere outb(valore, porta) e non outportb(porta, valore) come è in MS-DOS.

D4.

Voglio controllare un dispositivo standard RS-232/una stampante parallela/un joystick...

R4.

Probabilmente ti conviene usare i driver esistenti (nel kernel di Linux, o in un server X, o da qualche altra parte). I driver generalmente sono abbastanza versatili, tanto da far funzionare anche i dispositivi non standard, di solito. Vedere le informazioni precedentemente date riguardo le porte standard per indicazioni sulla documentazione.


Avanti Indietro Indice