Frage

Hallo, ich möchte wissen, wie i-Soundkarte von nasm Assembler-Programm zugreifen können int 0x80 verwenden. und auch, welche Werte soll ich in den Registern setzen, wenn die Soundkarte zugreifen zu können.

gibt es eine manuelle oder etwas, das Details über die Argumente hat, die wir an den Kernel übergeben haben die Soundkarte oder andere Hardware-Geräte zugreifen zu können, bitte, wenn jemand weiß, bitte sagen Sie mir.

Ich hatte eine Menge des Suchens und auch dort eine Menge von C-Bibliotheken und ALSA und OSS und Sachen wie das getan, aber was würde ich ist mag, dass, wenn ein von einigen Ressourcen kennen von den Grundlagen Lernen bis zur Montage Programm Schnittstelle mit die Hardware.

Und wenn jemand könnte ich einen kleinen Code-Eintrag, wie der Zugang erfolgt ich sehr dankbar wäre.

War es hilfreich?

Lösung

Wie Sie beobachtet haben, ist die Schnittstelle zwischen dem User-Space und Kernel-Space in Linux ist INT 0x80.

In Unix, als eine Frage der Philosophie, (fast) alles ist eine Datei, so dass Soundkarten wie behandelt werden „Character-Dateien.“ Der Kernel-syscalls ist gemäß der POSIX-Spezifikation - so "offen", "close", "ioctl", "Lesen", "Schreiben".

Der Zugriff auf die Soundkarte wird über die Treiber-Schnittstelle erfolgt, als eine Datei unter „/ dev /“. Einige Beispiel Dokumentation steht unter OSS Dokumentation , aber ich bin nicht sicher, ob seine aktuelle.

Diese Mitteilung zu beobachten, können Sie ‚strace‘ verwenden, um zu sehen, welche Systemaufrufe von einer bestehenden Anwendung verwendet werden.

Sie werden sehen, wahrscheinlich eine Folge wie:

     open("/dev/dsp", ... ) 
     ioctl() 
     write() 
     ... 
     write()
     close()

In der Regel würden Sie bekommen zu „öffnen“ durch die C-Bibliothek, aber da Sie, dass überspringen mögen, können Sie den syscalls ein paar Möglichkeiten finden - ein Weg wäre,

      objdump -d /usr/lib/libc.a

Zum Beispiel können Sie die offene finden ist syscall 0x5 durch die Suche nach <__libc_open>: Sie werden bemerken, dass EAX 5 ist, und der Rest der Parameter sind in EBX, ECX und EDX. (Die Verwendung und Parameter werden auch auf Linux Syscalls )

Andere Tipps

Dies ist, was Soundkartentreiber zu tun. Sie haben für jede Soundkarte benutzerdefinierte geschrieben werden, um eine gemeinsame API zu implementieren, die durch den O / S oder Anwendungen verwendet werden können. Das gleiche gilt für andere Hardware-Geräte. Hardware-Hersteller sind in der Regel kleiner als offen darüber, wie auf dieser Ebene ihre Sachen für den Zugriff auf (für eine Sache).

Nicht, dass ich ein Linux-Experte bin, aber das ist eine ziemlich grundlegende Frage mit allen O / S.

Von User-Modus, das wird nicht funktionieren -. Sie werden keinen direkten Zugriff auf die Sound-Hardware haben

Wenn Sie einen Kernel-Modus-Treiber erstellen, würden Sie in der Lage sein, direkt auf die Soundkarte Hardware stecken, aber an diesem Punkt denke ich, die meisten Anbieter haben verschiedene Implementierungen und folgen keinem einheitlichen Standard. Neuere Soundkarten können noch sein Adlib & Sound Blaster 16 kompatibel - das war der Hardware-Standard WAY zurück, wenn Spiele wurden DOS Targeting und direkt die Hardware, aber ich wäre nicht überrascht, wenn dies nicht mehr gültig . Eine schnelle Suche soll Möglichkeiten ergeben, um direkt die Schnittstelle für diese Legacy-Karten zugreifen. Alternativ könnten Sie DOS laufen innerhalb einer virtuellen Maschine und Zugriff auf die Hardware -. Meisten virtuellen Maschinen dieses Niveau der Soundkarte emulieren

Je was Sie versuchen, zu tun, sind Sie wahrscheinlich besser dran, eine vorhandene Bibliothek über die Schnittstelle an die Soundkarte zu handhaben, wenn Sie einen Soundkartentreiber schreiben wollen, was ich bezweifle, und das wäre am besten getan in C unter linux.

Portaudio ist eine (frei) ein, die relativ einfach zu bedienen ist. ein Beispiel lib mit einem C-Schnittstelle Portaudio (ich bin der Autor von wwviaudio) .

FMOD scheint mit den Spiele-Programmierung Jungs groß zu sein, obwohl es nicht frei ist.

sdl Mischer ist eine andere, die mit dem Linux-Spiele-Entwickler groß ist.

JACK ist groß in der Linux-Pro-Audio-Welt. (Man denke Glut -. Die Linux Antwort auf ProTools)

Es hat keinen Sinn bei dem Versuch, die Audio-Hardware direkt vom User-Space zu sprechen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top