Quando accedo alle porte ottengo "segmentation faults".
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.
Non riesco a trovare le funzioni in*() e out*()
definite ovunque, e gcc si lamenta per dei riferimenti non definiti
(undefined references).
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>
out*() non fà nulla, o fà qualcosa di strano.
Controlla l'ordine dei parametri; deve essere
outb(valore, porta) e non outportb(porta, valore) come è
in MS-DOS.
Voglio controllare un dispositivo standard RS-232/una stampante parallela/un joystick...
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.