Jag får segmentation faults när jag adresserar portar.
Antingen har ditt program inte rootprivilegier, eller har
ioperm()
falerat av någon annan orsak. Testa det returnerade
värdet från ioperm()
. Testa också att du verkligen adresserar
de portar som du gett tillstånd till med ioperm()
(se Q3).
Om du använder 'delaying macros' (inb_p()
, outb_p()
, osv.),
kom ihåg att du då måste anropa ioperm()
för att ge accesstillstånd
till adress 0x80.
Jag kan inte hitta var in*()
, out*()
funktionerna
definieras, och gcc klagar över odefinierade referenser.
Du kompilerade inte med optimeringsflaggan på (-O1 eller högre
),
och därför kunde inte gcc lösa upp de makron som finns i
asm/io.h
. Eller glömde du kanske
#include <asm/io.h>
.
out*()
gör ingenting, eller gör något konstigt.
Kolla ordningen på parametrarna; set skall vara
outb(value, port)
, inte outb(port, value)
som förekommer
i MS-DOS.
Jag vill köra en standard RS-232 device/parallel printer/joystick...
Då är det nog bäst att använda en befintlig driver (i Linux kernel eller en X-server eller någon annanstans) för detta. Drivrutinerna är vanligtvis mycket flexibla, så att även en ickestandard apparat fungerar vanligtvis med dem. Se info om standard portar ovan efter hänvisningar till dokumentation.