Alsa-sound-mini-HOWTO | ||
---|---|---|
Пред. |
Пожалуйста, сначала прочтите файл FAQ в каталоге драйвера. Эта глава еще дорабатывается.
Если драйверы ALSA не компилируются правильно, и вы получаете сообщения типа ``version.h'', и/или заголовки некоторых файлов не могут быть найдены, то это означает, что у вас отсутствуют ".h" файлы ядра. Просмотрите kernel-HOWTO, разархивируйте ядро в каталог /usr/src и выполните make config.
Эти утилиты содержат программы написанные на c++. У большинства стоят компиляторы c++ из gcc или egcs, но следует проверить и наличие установленного libstdc++-devel, иначе ваша система при запуске скриптов настройки этих утилит выдаст сообщение об ошибке типа ``c++ compiler cannot create executables'' (ваш компилятор С++ не может создавать запускаемые файлы).
Пожалуйста, проверьте следующие шаги.
Драйверы ALSA используют различные устройства из /dev-tree. Удостоверьтесь в том, что вы запустили скрипт ./snddevices в каталоге исходных текстов драйверов ALSA.
Вы точно уверены, что ваша карта СОВМЕСТИМА с ALSA? Проверьте это еще раз. Иногда X123 - не обязательно X123b. С другой стороны, даже совместимая карта может доставить вам множество неудобств, я, например, очень долго возился при установке CS4237B, потому что к нему была очень туманная документация.
Возможно, у вас собрана поддержка звука в ядре 2.0.x, или загружается драйвер OSS/Lite (ядро) (проверьте это при помощи cat /proc/modules). Уберите драйвер или пересоберите ядро (взгляните на Kernel-HOWTO).
Звуковой модуль в ядрах 2.0 называется ``sound.o'', и не должен загружаться. (Есть еще драйвер ALSA ``snd.o'').
Если у вас ядро 2.2.x, и в нем не собран звуковой драйвер, то драйверы АLSA также не будут работать.
Я знаю, это звучит глупо, но позвольте вам напомнить еще раз. Если у вас ядро 2.0.x (команда ``uname -a'' выдает вам следующую информацию ``Linux penguin 2.0.35 #6 Wed Sep 23 10:19:16 CEST 1998 i686 unknown''), то вы должны убрать драйверы из ядра. Версии ALSA 0.4.x и более поздние не работают с ядрами 2.0
Если у вас ядро 2.2.x то вам не нужны звуковые драйверы. Ядра 2.2 должны быть собраны с поддержкой звука, но без каких-либо драйверов карт.
Другой причиной, того, что драйвер ссылается на занятость устройства может быть файл /etc/conf.modules, который до сих пор ссылается на драйвер карты. Вы должны удалить ссылки на драйвер карты и вставить ссылки на драйверы ALSA.
Другим источником ошибки "unresolved symbols" может являться новое ядро со старыми драйверами. Перекомпилируйте драйверы ALSA после того, как перекомпилируете новое ядро.
Вы уверены, что ваша карта работет? Посмотрите еще раз PnP-HOWTO и удостоверьтесь, что вы инициализировали ее правильно.
Проверьте и перепроверьте параметры вашей карты. Напоминаю: 534 это не 543, как и 0x534 это не 534.
Некоторые карты могут иметь модули с другим названием. Еще раз просмотрите команду ``modprobe''. Например, драйвер к Crystal 4232 должен загружаться как modprobe snd-card-cs4232, а не "snd-cs4231", или SoundBlaster PCI 64 загружается как "snd-card-audiopci", а не snd-es1370.
У драйверов ALSA, как и у большинства карт, есть настройки типа "mutе". Если вы правильно установили драйверы, но карта все равно не работает, то, возможно, вы забыли про настройки "mute" . Для этого вам потребуется "amixer" или "alsamixer", которые находятся в утилитах драйверов АLSA. Теперь наберите:
amixer set -c 1 Master 70 unmute amixer set -c 1 PCM 70 unmute amixer set -c 1 CD 70 unmute |
Некоторые карты имеют отдельный усилитель в микшере для входных и выходных сигналов. Это дополнение обычно называется "gain", "in-gain" для входа и "out-gain" для выхода. Устанавливая этот gain на определенный уровень, вы можете достичь максимальной громкости на колонках (подумайте о ваших родителях/соседях/своих ушах). Установки делаются командой
amixer set out-gain 100 unmute |
Если вы используете драйверы ALSA впервые, но уже пользовались встроенными драйверами ранее, то вам скорее всего понадобится обратная совместимость (можно использовать устройство /dev/pcmX ). Для этого вам потребуется установить "драйвер совместимости с OSS". Выполните команду modprobe snd-pcm1-oss && modprobe snd-mixer-oss. (Прочитайте конец этой главы об установке драйвера). Замечание: snd-pcm1-oss это не то же самое, что и snd-pcm1; snd-pcm1-oss вам потребуется для поддержки звука старым способом, а snd-mixer-oss для микшера.
Если вы пробовали установить несколько разных версий ALSA, то иногда, в этих случаях, микшер больше нельзя открыть. Это случается если вы установили 0.3.2, а потом переустановили версию 0.3.0-pre4 (IIRC). Вам следует удалить все файлы libasound и все ссылки из /usr/lib, а затем перекомпилировать все библиотеки и утилиты:
rm /usr/lib/libasound.* |
Лучше начинать с "insmod", а не с kerneld. Может быть, вам поступит сообщение об ошибке.
Очень много информации можно почерпнуть из файла INSTALL находящегося в каталоге драйверов. Если ваш драйвер не работает, то я бы посоветовал заглянуть туда и посмотреть дополнительную информацию по нему.
В крайнем случае, можно пересобрать драйвер, а сообщения об ошибках переправить в /var/log/messages. Зайдите в каталог драйверов, используя cd /usr/src/alsa-driver-...., и дайте следующую команду:
./configure --with-debug=detect; make clean; make |
Уберите драйвер (так как он активирован, посмотрите инструкцию по его удалению). Затем при помощи "modprobe", установите заново собранный драйвер. Просмотрите /var/log/messages на наличие сообщений.
Если эти сообщения не помогли вам разобраться в ситуации, то пошлите письмо с описанием вашей проблемы по адресу alsa-user@alsa-project.org.
В письме должна содержаться следующая информация:
Название вашей звуковой карты + названия микросхем, используемых картой
Соответствующие части isapnp.conf, если у вас карта ISA PnP
conf.modules, или команды которыми вы активировали драйвер ALSA
Все сообщения из /var/log/messages, касающиеся драйвера ALSA
Если вы обнаружите ошибку, то разработчики драйверов ALSA были бы вам очень признательны за следующую информацию о ней
Название драйвера + версия ядра: 'cat /proc/asound/version'
Информация по карте:
название карты (данное производителем)
список используемых картой микросхем
содержание 'cat /proc/asound/cards'
Все сообщения из /var/log/messages, относящиеся к драйверу ALSA
Описание ошибки
При использовании kmod/kerneld и драйверов ALSA для проигрывания CD, программы kmod/kerneld не используют драйверы. Это случается потому, что команда, поступающая на проигрыватель CD, приказывает, только ему воспроизводить звук, и не посылает сообщение kmod/kerneld о том, что есть звук. Пожалуй, единственным решением может быть использование modprobe.
Обычно IO порт последовательного устройства управляется стандартным драйвером устройства. До команды ``modprobe snd-serial'' мы должны предупредить драйвер, чтобы он освободил устройство.
Здесь описана процедура.
setserial /dev/ttyS0 uart none modprobe snd-serial |
(Замените /dev/ttyS0 соответствующим устройством /dev/ttySx, если ваше устройство MIDI использует другое последовательное устройство).
После того как вы замените ядро, вам следует пересобрать драйверы ALSA. Если вы в каталоге /usr/src, не забудьте скомандовать make clean до того, как выполните ./configure, make, make install.
Да, еще есть ошибка с ядром ``2.2.0ac1'' о котором скрипт настройки говорит ``not a number'' (использовано не числовое выражение). Я думаю, что это все же поправили в новых скриптах, иначе вам придется изменить версию ядра в исходниках.
Предположим, что у вас стоит работающая KDE, но не работают системные звуки: например звук при открытии окна или программы. При этом у вас работает проигрыватель CD, mp3 и микшер, то, возможно, у вас не запущено "kwmsound".
Поэтому удостоверьтесь, что "kwmsound" запускается вашим загрузочным скриптом ($KDEDIR/bin/startkde)
Если у вас скомпилирована поддержка звука в ядре, то все приложения будут работать с /dev/pcm0, /dev/audio и /dev/mixer. Это нормально, если вы используете совместимость с OSS при помощи модуля snd-pcm1-oss. Но было бы лучше, если бы вы использовали устройства ALSA, находящиеся в /dev/snd/.
Удаление из памяти более десяти модулей занятие довольно скучное. К счастью, все модули имеют приставку "snd-" , поэтому можно исхитриться и написать программу в одну командную строку. Вы можете удалить их, используя строку:
cat /proc/modules|gawk '/^snd-/{print $1}'|xargs -i rmmod {} |
Juergen Kahrs написал мне: "У меня есть скрипт, который выгружает из памяти модули soundcore, soundlow и sound, если они не используются". Этот скрипт обращается к /proc/modules трижды, поэтому там не должно оставаться модулей после запуска скрипта''. Его скрипт представлен ниже
awk '/^snd/||/^sound/&&($3==0){system("rmmod " $1)}' /proc/modules /proc/modules /proc/modules |
Замечание: если один модуль зависит от другого модуля (главного) вы не можете просто удалить главный модуль. Вам придется удалить сначала зависимый, а потом уже главный. (Я не сталкивался с такой ситуацией, но, вероятно, можно выгружать модули ALSA в том порядке в каком они стоят в /proc/modules).