Настройка Linux для поддержки звука включает следующие этапы:
Если вы работаете в Red Hat Linux, то там есть утилита, названная
sndconfig
, которая в большинстве случаев обнаружит вашу звуковую
карту и настроит все необходимые файлы конфигурации для загрузки звуковых
драйверов, соответствующих вашей звуковой карте. Если вы работаете в
Red Hat, то я надеюсь, что вы будете использовать ее. Если эта утилита
работает нормально, то вы можете пропустить остаток этого раздела.
Если sndconfig
не работает, вы используете другой дистрибутив
Linux или вы хотите использовать ручной метод для того, чтобы лучше понять
что вы делаете, то следующие разделы опишут эти шаги более детально.
Для установки оборудования следуйте инструкциям производителя или заставьте продавца установить карту.
Старые карты обычно имели переключатели или наборы переключателей для установки IRQ, каналов DMA и т.п.; запишите используемые значения. Если вы не уверены, используйте значения по умолчанию. Старайтесь, если возможно, избегать конфликтов с другими устройствами (например картами ethernet, адаптерами SCSI, последовательными и параллельными портами).
Обычно вы должны использовать те же самые установки для портов ввода/вывода, IRQ и DMA, которых работают под DOS. Однако в некоторых случаях (особенно с PnP картами) вы можете использовать другие настройки, чтобы заставить карту работать под Linux. Нужно провести несколько экспериментов.
Сейчас большинство звуковых карт использует протокол Plug and Play для установки параметров адресов ввода/вывода, прерываний и каналов DMA. Если у вас одна из старых карт, которая использует фиксированные параметры или переключатели на плате, то вы можете перейти к следующему разделу.
И в версии 2.2 ядра Linux еще не имеется полной поддержки Plug and Play. Наилучшим способом решения этой проблемы будет использование пакета isapnp, который поставляется с большинством дистрибутивов Linux (или вы можете скачать его с сервера Red Hat http://www.redhat.com/).
Сначала посмотрите документацию на ваш дистрибутив Linux. В нем уже может установлена поддержка Plug and Play, или она может работать чуть-чуть по другому, чем описано здесь. если вам необходимо настроить ее самому, то подробности этого процесса могут быть найдены в справочных страницах утилит isapnp. Вкратце процесс состоит в следующем:
pnpdump
для получения списка возможных
параметров для всех ваших Plug and Play устройств, сохраняя результат в
файле /etc/isapnp.conf.
(ACT Y)
в конце файла.
isapnp
запускается при загрузке
компьютера, обычно это выполняется в скриптах загрузки. Перезагрузите
систему, или вручную запустите isapnp
.
Если по некоторым причинам вы не можете или не желаете использовать пакет isapnp, то есть несколько других способов. Если вы используете карту при работе в Microsoft Windows 95 или 98, то вы можете использовать менеджер устройств для настройки карты, а затем программно перезагрузиться в Linux, используя программу LOADLIN. Убедитесь, что и Windows и Linux используют одни и те же параметры карты.
Если вы используете карту при работе в DOS, то вы можете использовать
утилиту icu
, которая поставляется с картами SoundBlaster16 PnP,
для настройки карт в DOS, а затем программно перезагрузиться в Linux с
помощью программы LOADLIN. Далее убедитесь, что DOS и Linux используют одни
и те же параметры карты.
Некоторые из драйверов звуковых карт включают программное обеспечение, которое необходимо для инициализации Plug and Play для карты. О деталях проконсультируйтесь в документации по драйверу карты.
Когда вы устанавливаете Linux вы вероятно используете готовое ядро. Эти ядра обычно не обеспечивают поддержку звука. Желательно самим перекомпилировать ядро с необходимыми вам драйверами. Вы можете также пересобрать ядро для его обновления или чтобы освободить память, уменьшая размер ядра. Later, when your sound card is working, you may wish to rebuild the kernel sound drivers as modules.
Вы должны проконсультироваться с Linux Kernel HOWTO для получения детальной информации о компиляции ядра. Я буду упоминать здесь только вещи, специфичные для звуковых карт.
Если вы до этого никогда не настраивали ядро для поддержки звука, то хорошей идеей будет прочитать соответствующие файлы документации, поставляемые с драйвером звука, особенно информацию относящуюся к вашему типу карты. Файлы могут быть найдены в каталоге с документацией по ядру, обычно они устанавливаются в каталог /usr/src/linux/Documentation/sound. Если у вас нет этого каталога, то вы либо используете очень старое ядро, либо вы не установили исходные тексты ядра.
Следуйте обычной процедуре построения ядра. В настоящее время существует три интерфейса процесса конфигурации. Графический интерфейс, который запускается под управлением X11 может быть запущен командой "make xconfig". Управляемая меню система, которая требует только текстовый экран вызывается командой "make menuconfig". Оригинальный метод, используя "make config", запускает простой текст-ориентированный интерфейс.
При настройке ядра представляется большой выбор типов имеющихся звуковых карт, и параметров используемых драйверов. Контекстная помощь внутри утилиты настройки должна обеспечивать объяснение каждого их параметров. Выберите необходимые параметры.
После настройки параметров, вы должны откомпилировать и установить новое ядро, как это описано в Kernel HOWTO.
Для правильного проведения операций, для звукового драйвера должны быть созданы файлы устройства. По умолчанию они создаются во время установки вашей системы Linux. Быстрая проверка может быть произведена с помощью команды, показанной ниже. Если вывод такой же как показан (дата будет отличаться), тогда файлы устройства почти в норме.
% ls -l /dev/sndstat
crw-rw-rw- 1 root root 14, 6 Apr 25 1995 /dev/sndstat
Заметим, что наличие правильных файлов устройства не гарантирует ничего. Драйвер должен быть загружен или вкомпилирован в ядро до того как устройство будет работать (больше об этом далее).
В редких случаях, если вы считаете что файлы устройства являются неправильными, вы можете заново создать их. Большинство дистрибутивов Linux имеет скрипт /dev/MAKEDEV, который может быть использован для этой же цели.
Сейчас вы должны быть готовы к загрузке нового ядра и тестирования звукового драйвера. Следуйте обычной процедуре инсталляции и загрузите новое ядро (сохраните старое ядро на случай возникновения проблем).
В течении загрузки следите за сообщениями, которые следуют после включения
питания (если они прокручиваются слишком быстро чтобы прочитать их, вы
можете заново просмотреть их командой dmesg
).
Sound initialization started
<Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5
<Sound Blaster 16> at 0x330 irq 5 dma 0
<Yamaha OPL3 FM> at 0x388
Sound initialization complete
Они должны соответствовать вашему типу карты и установкам переключателей (если они есть).
Заметим, что вышеприведенные сообщения не появляются, когда вы используете
звуковой драйвер в виде загружаемого модуля ядра (до тех пор пока вы не
разрешите его, например командой insmod sound trace_init=1
).
Когда драйвер звука находится в ядре, должны появляться сообщения Sound
initialization started (инициализация звука начата)
и Sound
initialization complete (инициализация звука выполнена)
. Если они не
появляются, это обозначает, что драйвера звука нет в ядре. В этом случае вы
должны проверить действительно ли вы установили ядро с включенным звуковым
драйвером.
Если ничего не появляется между строками Sound initialization
started
и Sound initialization complete
, это означает, что
никакого звукового устройства не обнаружено. Скорее всего это означает, что
вы не разрешили правильный тип драйвера, карта не поддерживается,
неправильно заданы порты ввода/вывода или что у вас PnP карта, которая не
была сконфигурирована.
Драйвер может также выдавать некоторые сообщения об ошибках и предупреждения в процессе загрузки. Наблюдайте за ними в процессе первой загрузки после настройки звукового драйвера.
Далее вы должны проверить файл устройства /dev/sndstat. Чтение файла статуса звукового драйвера должно дать дополнительную информацию был ли драйвер звуковой карты инициализирован правильно. Простой вывод должен выглядеть подобно этому:
% cat /dev/sndstat
Sound Driver:3.5.4-960630 (Sat Jan 4 23:56:57 EST 1997 root,
Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586)
Kernel: Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586
Config options: 0
Installed drivers:
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401
Card config:
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x330 irq 5 drq 0
OPL-2/OPL-3 FM at 0x388 drq 0
Audio devices:
0: Sound Blaster 16 (4.13)
Synth devices:
0: Yamaha OPL-3
Midi devices:
0: Sound Blaster 16
Timers:
0: System clock
Mixers:
0: Sound Blaster
Команда, приведенная выше, может выдавать некоторые сообщения об ошибках. "No such file or directory (Нет такого файла или директории)" сообщает, что вам нужно создать файлы устройства (смотри раздел 4.3). "No such device (Нет такого устройства)" означает, что звуковой драйвер не был загружен или вкомпилирован в ядро. Возвратитесь к разделу 4.2 и исправьте это.
Если строки в секции "Card config:" файла /dev/sndstat
перечислены
внутри скобок (такие как "(SoundBlaster at 0x220 irq 5 drq 1,5)"), это
означает, что устройство было сконфигурировано, но не обнаружено.
Теперь вы готовы к проигрыванию простых звуковых файлов. Возьмите простой звуковой файл и пошлите его на звуковое устройство для быстрой проверки вывода звука, например
% cat endoftheworld >/dev/dsp
% cat crash.au >/dev/audio
(Убедитесь, что вы не опустили ">" в командной строке, приведенной выше).
Заметим, что в общем, использование cat
это не лучший способ
проигрывания звуковых файлов, это просто быстрая проверка. Вы должны взять
соответствующую программу проигрывания звука (описано позже), которая будет
выполнять работу лучше.
Эти команды работают, если по крайней мере одно устройство перечислено в
разделе аудио-устройств файла /dev/sndstat
. Если раздел
аудио-устройств пуст, вы должны проверить почему устройство не опознается.
Если вышеприведенные команды возвращают "I/O error (Ошибка ввода/вывода)", вы должны посмотреть в конце сообщений ядра, используя команду "dmesg". Вероятно, что сообщение об ошибке будет напечатано там. Часто бывает такое сообщение "Sound: DMA (output) timed out - IRQ/DRQ config error? (Звук: время ожидания DMA (вывод) -- ошибка настройки IRQ/DRQ?)". Вышеприведенное сообщение означает, что драйвер не получил от устройства звука ожидаемого прерывания. В большинстве случаев это означает, что сконфигурированы IRQ или каналы DMA с которыми драйвер не может работать. Лучший выход чтобы заставить его работать -- испробовать все возможные номера DMA и IRQ, поддерживаемые устройством.
Другая возможная причина -- устройство не совместимо с устройством для которого сконфигурирован драйвер. Это довольно распространенный случай, когда считающиеся "SoundBlaster (Pro/16) compatible" звуковые карты не работают с драйвером SoundBlaster. В этом случае вы должны попытаться найти устройство с которым совместима ваша звуковая карта (например запросом в группу новостей comp.os.linux.hardware).
Некоторые простые звуковые файлы могут быть получены с ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z
Теперь вы можете проверить запись звука. Если вы имеете возможность ввода звука, вы можете проделать быструю проверку этого, используя команды, такие как следующие:
# record 4 seconds of audio from microphone
EDT% dd bs=8k count=4 </dev/audio >sample.au
4+0 records in
4+0 records out
# play back sound
% cat sample.au >/dev/audio
Очевидно, что, чтобы это работало вам нужен микрофон, соединенный к звуковой карте и вы должны говорить в него. Вам также нужна программа микширования, чтобы установить микрофон как устройство ввода и выровнять уровни усиления записи.
Если тесты прошли, вы можете быть уверенны, что звуковые устройства ЦАП и АЦП, и программное обеспечение работают. Если вы имеете проблемы, смотрите следующий раздел этого документа.
Если вы все еще сталкиваетесь с проблемами после выполнения инструкций, изложенных в этом документе, здесь изложены некоторые вещи, которые необходимо проверить. Проверки изложены в порядке возрастания сложности. Если проверка не удалась, решите эту проблему до перехода к следующей стадии.
Вы можете проверить дату ядра, для того чтобы увидеть действительно ли вы
запустили ядро, которое вы скомпилировали с поддержкой звука. Вы можете
сделать это с помощью команды uname
:
% uname -a
Linux fizzbin 2.2.4 #1 Tue Mar 23 11:23:21 EST 1999 i586 unknown
или просмотрев файл /proc/version:
% cat /proc/version
Linux version 2.2.4 (root@fizzbin) (gcc version 2.7.2.3) #1 Tue Mar 23 11:23:21 EST 1999
Если дата не соответствует той, когда вы компилировали ядро, значит вы все еще работаете со старым ядром. Действительно ли вы перезагрузились? Если вы используете LILO, действительно ли вы переставили его (обычно запуском lilo)? Если вы загружаетесь с дискеты, создали ли вы новый загрузочный диск и использовали его во время загрузки?
Самый легкий путь проверить это -- просмотреть вывод
/dev/sndstat
как описано ранее. Если вывод не такой как ожидалось,
тогда что-то было неправильно во время конфигурации или компиляции
ядра. Начните процесс инсталляции заново, начиная с процесса конфигурации
или компиляции ядра.
Убедитесь, что звуковая карта обнаруживается во время загрузки ядра. Вы
должны следить за сообщением при загрузке. Если сообщения ушли за пределы
экрана, вы обычно можете просмотреть их используя команду dmesg
:
% dmesg
или
% tail /var/log/messages
Если ваша карта не нашлась, значит что-то неправильно. Убедитесь, что она действительно установлена. Если звуковая карта работает под DOS, то вы точно убедитесь, что оборудование работает, так что проблемы скорее всего с настройкой ядра. Либо вы настроили свою карту указав неправильный тип или задав неправильные параметры, или ваша карта не совместима с любым звуковым драйвером Linux.
Еще может быть, что у вас звуковая карта совместимого
типа,
которые требуют инициализации драйвером DOS. Попытайтесь загрузить DOS и
загрузить поставляемый продавцом драйвер звука. Затем перезагрузите Linux
("теплая" перезагрузка), нажав Control-Alt-Delete
. Убедитесь, что
номера портов ввода/вывода карты, настройки DMA, и IRQ в Linux те же самые,
что и используются под DOS. Прочитайте файл Readme.cards из
пакета звукового драйвера для инструкций о конфигурации вашего типа карты.
Если ваша карта не перечислена в этом документе, возможно, что драйвер Linux не поддерживает ее. Вы можете проверить это с помощью некоторых ссылок, перечисленных в конце документа.
Попытайтесь считать с устройства /dev/audio используя команду
dd
показанную ранее в этом документе. Команда должна работать без
ошибок.
Если она не работает, вероятно что проблема в конфликте IRQ или DMA или некотором роде несовместимости оборудования (устройство не поддерживается Linux или драйвер настроен для неправильного устройства).
Маловероятная возможность -- сломанное оборудование. Постарайтесь протестировать звуковую карту под DOS для исключения этой возможности.
Если вы все еще имеете проблемы, здесь некоторые заключительные пожелания о вещах, которые надо постараться сделать:
comp.os.linux
или
другую группу новостей (comp.os.linux.hardware -- это хороший выбор;
вследствие высокого трафика в этих группах поместите строку "sound" в
заголовке письма, так чтобы эксперты могли заметить его)
Esc-x doctor
:-)