Re: asm/io.h ?

From: Joerg Wunsch <j(at)uriah.heep.sax.de>
Date: Wed, 3 Oct 2001 16:15:47 +0200

As Bernd Walter wrote:

> Linux hat Support das User-Mode Programme raw auf die Hardware
> zugreifen koennen.
> Ich vermute die asm/io.h gehoert dazu.
> FreeBSD hat sowas nicht.

Stimmt nicht. Der Logarithmus unter FreeBSD ist nur ein anderer.

Man #include <machine/cpufunc.h>. Dort sind Makros wie outb()
etc. deklariert. Zu beachten ist, daß FreeBSD im Gegensatz zu Linux
die Argumente für outb() & Co. in der logisch richtigen Reihenfolge
hat, also erst den Port, dann den Wert. Man muß also die Aufrufe
irgendwie umbiegen.

Um einen Prozeß die Berechtigung zu erteilen, direkte IO-Befehle
auszuführen, muß er das Device /dev/io geöffnet halten. Man braucht
also sowas am Anfang:

        int iofd;

        ...
        if ((iofd = open("/dev/io", O_RDONLY)) == -1)
                err(1, "cannot open /dev/io");

Keine Frage, daß der Prozeß dazu root-Rechte haben muß und daß das
Ganze natürlich eher ein schräger Hack ist. Allerdings dürfte diese
Methode den geringsten Portierungsaufwand haben, wenn man eine Quelle
hat, die ebenfalls mit inb()/outb() schon arbeitet und wenn man sich
der potentiellen Probleme (Kernel könnte gleichzeitig ebenfalls auf
dieselben IO-Ports zugreifen, da er von alldem nichts weiß) bewußt
ist. Die Variante mit ppi(4) ist in jedem Falle eleganter, benötigt
aber in aller Regel einen Rewrite des entsprechenden Codes. Linux muß
übrigens inzwischen etwas ähnliches wie ppi(4) auch haben, Namen habe
ich aber vergessen.

-- 
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL
http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 03 Oct 2001 - 16:20:42 CEST

search this site