Re: segmentierte Addressierung

From: Marc Santhoff <M.Santhoff(at)t-online.de>
Date: Fri, 11 Feb 2005 18:40:23 +0100

Am Fr, den 11.02.2005 schrieb Oliver Fromme um 17:44:
> Marc Santhoff <M.Santhoff(at)t-online.de> wrote:
> > Um den INT15 mit dem syscall i386_vm86() aufzurufen soll ich die Adresse
> > des Puffers für den Rückgabewert angeben, und zwar in ES:BX. ES bekommt
> > das Datensegment und BX den Offset.
> >
> > Wenn ich die Parameter zusammensetze läuft der Prozeß aber so wie ich es
> > verstehe noch nicht im virtuellen 86er Modus.
> >
> > Wie schreibe ich die Adesse da rein, einfach obere Hälfte nach EX und
> > untere 16 Bit nach BX? Oder kennt der kernel eine Funktion zur
> > Addressermittlung oder -übersetzung?
>
> Ich nehme an, Du willst das im Kernel-Kontext für einen
> Treiber machen, oder? (Aus dem Userland heraus ist es
> nicht möglich, soviel ich weiß.)

Nein, aus einem User-Programm.

> Du brauchst die Funktionen vm86_getpage(), vm86_getptr()
> und vm86_datacall(). Die geben Dir eine im VM86-Modus
> gültige Speicherseite, übersetzen den Pointer in ein Seg-
> ment-Offset-Paar, und sorgen für den Datentransfer.

Dann wäre es wohl nötig, einen Mini-Kerneltreiber zu schreiben ...

> Guck mal in src/sys/i386/isa/vesa.c, dort z.B. die Funk-
> tion vesa_bios_save_palette(). Die macht genau sowas.

Danke für den Link.

> Wie gesagt, das geht nur aus dem Kernelkontext heraus.
> Wenn Du den BIOS-Interrupt aus dem Userland heraus auf-
> rufen willst, mußt Du wohl einen kleinen Stub im Kernel
> schreiben, der das für Dich macht, und diesen dann aus
> dem Userland heraus aufrufen. Je nach Kontext kann dafür
> ein eigener System-call sinnvoll sein, oder auch ein
> ioctl oder ein sysctl.

Ich hoffe diese Lösung ganz weglassen zu können (via doscmd, da teste
ich noch), aber wenn's nicht anders geht, schaue ich mir das näher an.

Danke,
Marc

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 11 Feb 2005 - 18:46:21 CET

search this site