4. Установка

Настройка Linux для поддержки звука включает следующие этапы:

  1. Установка звуковой карты.
  2. Настройка Plug and Play (если необходимо).
  3. Настройка и компиляция ядра для поддержки звука.
  4. Создание файлов устройства.
  5. Загрузка ядра Linux и тестирование.

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

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

4.1 Установка звуковой карты

Для установки оборудования следуйте инструкциям производителя или заставьте продавца установить карту.

Старые карты обычно имели переключатели или наборы переключателей для установки IRQ, каналов DMA и т.п.; запишите используемые значения. Если вы не уверены, используйте значения по умолчанию. Старайтесь, если возможно, избегать конфликтов с другими устройствами (например картами ethernet, адаптерами SCSI, последовательными и параллельными портами).

Обычно вы должны использовать те же самые установки для портов ввода/вывода, IRQ и DMA, которых работают под DOS. Однако в некоторых случаях (особенно с PnP картами) вы можете использовать другие настройки, чтобы заставить карту работать под Linux. Нужно провести несколько экспериментов.

4.2 Настройка Plug and Play

Сейчас большинство звуковых карт использует протокол 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.
  • Выберите такие параметры для вашей звуковой карты, которые не конфликтуют с другими устройствами в вашей системе, и раскомментируйте соответствующие строки в файле /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 для карты. О деталях проконсультируйтесь в документации по драйверу карты.

4.3 Настройка ядра

Когда вы устанавливаете 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.

4.4 Создание файлов устройства

Для правильного проведения операций, для звукового драйвера должны быть созданы файлы устройства. По умолчанию они создаются во время установки вашей системы Linux. Быстрая проверка может быть произведена с помощью команды, показанной ниже. Если вывод такой же как показан (дата будет отличаться), тогда файлы устройства почти в норме.

% ls -l /dev/sndstat
crw-rw-rw- 1 root  root  14, 6 Apr 25 1995 /dev/sndstat

Заметим, что наличие правильных файлов устройства не гарантирует ничего. Драйвер должен быть загружен или вкомпилирован в ядро до того как устройство будет работать (больше об этом — далее).

В редких случаях, если вы считаете что файлы устройства являются неправильными, вы можете заново создать их. Большинство дистрибутивов Linux имеет скрипт /dev/MAKEDEV, который может быть использован для этой же цели.

4.5 Загрузка Linux и тестирование установки

Сейчас вы должны быть готовы к загрузке нового ядра и тестирования звукового драйвера. Следуйте обычной процедуре инсталляции и загрузите новое ядро (сохраните старое ядро на случай возникновения проблем).

В течение загрузки следите за сообщениями, которые следуют после включения питания (если они прокручиваются слишком быстро, чтобы прочитать их, вы можете заново просмотреть их командой 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

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

Если тесты прошли, вы можете быть уверенны, что звуковые устройства ЦАП и АЦП, и программное обеспечение работают. Если вы имеете проблемы, смотрите следующий раздел этого документа.

4.6 Разрешение проблем

Если вы всё ещё сталкиваетесь с проблемами после выполнения инструкций, изложенных в этом документе, здесь изложены некоторые вещи, которые необходимо проверить. Проверки изложены в порядке возрастания сложности. Если проверка не удалась, решите эту проблему до перехода к следующей стадии.

Шаг 1: Убедитесь, что вы действительно запустили скомпилированное ядро

Вы можете проверить дату ядра, для того чтобы увидеть, действительно ли вы запустили ядро, которое вы скомпилировали с поддержкой звука. Вы можете сделать это с помощью команды 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)? Если вы загружаетесь с дискеты, создали ли вы новый загрузочный диск и использовали его во время загрузки?

Шаг 2: Убедитесь, что звуковой драйвер встроен в ядро

Самый лёгкий путь проверить это -- просмотреть вывод /dev/sndstat как описано ранее. Если вывод не такой, как ожидалось, тогда что-то было неправильно во время конфигурации или компиляции ядра. Начните процесс инсталляции заново, начиная с процесса конфигурации или компиляции ядра.

Шаг 3: Обнаруживает ли ядро вашу звуковую карту во времязагрузки?

Убедитесь, что звуковая карта обнаруживается во время загрузки ядра. Вы должны следить за сообщением при загрузке. Если сообщения ушли за пределы экрана, вы обычно можете просмотреть их используя команду dmesg:

% dmesg

или

% tail /var/log/messages

Если ваша карта не нашлась, значит что-то неправильно. Убедитесь, что она действительно установлена. Если звуковая карта работает под DOS, то вы точно убедитесь, что оборудование работает, так что проблемы, скорее всего, с настройкой ядра. Либо вы настроили свою карту, указав неправильный тип или задав неправильные параметры, или ваша карта не совместима с любым звуковым драйвером Linux.

Ещё может быть, что у вас звуковая карта совместимого типа, которые требуют инициализации драйвером DOS. Попытайтесь загрузить DOS и загрузить поставляемый продавцом драйвер звука. Затем перезагрузите Linux ("тёплая" перезагрузка), нажав Control-Alt-Delete. Убедитесь, что номера портов ввода/вывода карты, настройки DMA, и IRQ в Linux те же самые, что и используются под DOS. Прочитайте файл Readme.cards из пакета звукового драйвера для инструкций о конфигурации вашего типа карты.

Если ваша карта не перечислена в этом документе, возможно, что драйвер Linux не поддерживает её. Вы можете проверить это с помощью некоторых ссылок, перечисленных в конце документа.

Шаг 4: Можете вы считывать данные с устройства dsp?

Попытайтесь считать с устройства /dev/audio, используя команду dd, показанную ранее в этом документе. Команда должна работать без ошибок.

Если она не работает, вероятно, что проблема в конфликте IRQ или DMA или некотором роде несовместимости оборудования (устройство не поддерживается Linux или драйвер настроен для неправильного устройства).

Маловероятная возможность -- сломанное оборудование. Постарайтесь протестировать звуковую карту под DOS для исключения этой возможности.

Когда все эти шаги дали сбой

Если вы всё ещё имеете проблемы, здесь некоторые заключительные пожелания о вещах, которые надо постараться сделать:

  • внимательно перечитайте этот документ
  • прочитайте материалы по ссылкам, перечисленным в конце этого документа и файлы с документацией, соответствующие драйверу ядра
  • пошлите вопрос в одну из групп новостей comp.os.linux или другую группу новостей (comp.os.linux.hardware -- это хороший выбор; вследствие высокого трафика в этих группах поместите строку "sound" в заголовке письма, так чтобы эксперты могли заметить его)
  • Использование поисковой системы Web с правильно составленным запросом может быстро дать хорошие результаты. Один из таких поисковых серверов https://www.google.com
  • попробуйте использовать последнюю версию ядра Linux (но только как последнюю надежду, поскольку последние версии ядер могут быть нестабильными)
  • пошлите сообщение автору звукового драйвера
  • пошлите сообщение автору этого документа (The Linux Sound HOWTO)
  • Запустите emacs и наберите Esc-x doctor :-)


Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024