как получить доступ к звуковой карте в Linux с помощью NASM - PullRequest
0 голосов
/ 13 мая 2009

привет, я хочу знать, как я могу получить доступ к звуковой карте из программы сборки nasm, используя int 0x80. а также какие значения я должен внести в регистры, когда получить доступ к звуковой карте.

есть ли какое-либо руководство или что-то, что содержит подробности об аргументах, которые мы должны передать ядру для доступа к звуковой карте или другим аппаратным устройствам, пожалуйста, если кто-нибудь знает, пожалуйста, сообщите мне.

Я много занимался поиском, и там было много библиотек c, ALSA и OSS и тому подобного, но мне бы хотелось, чтобы кто-нибудь знал о некоторых ресурсах об изучении основ о взаимодействии программы сборки с аппаратное обеспечение.

и если бы кто-нибудь мог дать мне небольшой список кода о том, как осуществляется доступ, я был бы очень благодарен.

Ответы [ 4 ]

1 голос
/ 13 мая 2009

Это то, что делают драйверы звуковой карты. Они должны быть специально написаны для каждой звуковой карты, чтобы реализовать общий API, который может использоваться O / S или приложениями. То же самое касается других аппаратных устройств. Производители оборудования, как правило, не очень открыты о том, как получить доступ к своим материалам на этом уровне (с одной стороны).

Не то чтобы я был экспертом по Linux, но это довольно фундаментальная проблема со всеми операционными системами.

1 голос
/ 15 мая 2009

Как вы заметили, интерфейс между пользовательским пространством и пространством ядра в Linux - INT 0x80.

В Unix, с точки зрения философии, (почти) все является файлом, поэтому звуковые карты рассматриваются как «Файлы символов». Системные вызовы ядра соответствуют спецификации POSIX, поэтому «open», «close», «ioctl», «read», «write».

Доступ к звуковой карте осуществляется через интерфейс драйвера в виде файла в / dev /. Некоторые примеры документации находятся по адресу Документация OSS , но я не уверен, что это актуально.

Чтобы наблюдать это общение, вы можете использовать 'strace', чтобы увидеть, какие системные вызовы используются любым существующим приложением.

Вероятно, вы увидите последовательность вроде:

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

Обычно вы можете «открыться» через библиотеку C, но так как вы хотите пропустить это, вы можете найти системные вызовы несколькими способами - одним из способов будет

      objdump -d /usr/lib/libc.a

Например, вы можете обнаружить, что open - это системный вызов 0x5, выполнив поиск <<code>__libc_ open>: Вы заметите, что eax равно 5, а остальные параметры находятся в ebx, ecx и edx. (Использование и параметры также перечислены в Системные вызовы Linux )

0 голосов
/ 15 мая 2009

В зависимости от того, что вы пытаетесь сделать, вам, вероятно, лучше использовать существующую библиотеку для обработки интерфейса со звуковой картой, если вы не хотите написать драйвер звуковой карты, в чем я сомневаюсь, и это было бы лучше сделано в Си на Linux.

Portaudio - это один (бесплатный), который относительно прост в использовании. один пример lib с использованием portaudio с интерфейсом C (я автор wwviaudio) .

FMOD , кажется, большой опыт в программировании игры, хотя это не бесплатно.

sdl mixer - еще один продукт, который очень популярен среди разработчиков игр для Linux.

JACK очень популярен в мире про-аудио Linux. (Подумайте над пылом - ответ Linux на Protools.)

Нет смысла пытаться общаться с аудиооборудованием напрямую из пространства пользователя.

0 голосов
/ 13 мая 2009

В режиме пользователя это не будет работать - у вас не будет прямого доступа к звуковому оборудованию.

Если вы создадите драйвер режима ядра, вы сможете напрямую использовать аппаратное обеспечение звуковой карты, но на данный момент я думаю, что большинство поставщиков имеют разные реализации и не следуют единым стандартам. Более новые звуковые карты все еще могут быть совместимы с Adlib и SoundBlaster 16 - это был аппаратный стандарт WAY , когда игры предназначались для DOS и напрямую использовали аппаратное обеспечение, но я не удивлюсь, если это больше не действует. Быстрый поиск должен дать способы прямого доступа к интерфейсу для этих устаревших карт. Кроме того, вы можете запустить DOS внутри виртуальной машины и получить доступ к аппаратному обеспечению - большинство виртуальных машин эмулируют этот уровень звуковой карты.

...