Alsa-sound-mini-HOWTO |
---|
Пред. | | |
Советы по устранению неисправностей
Пожалуйста, сначала прочтите файл FAQ в каталоге драйвера. Эта глава еще дорабатывается.
Компиляция драйвера
Linux ".h" файлы ядра
Если драйверы 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, потому что к нему была очень туманная документация.
если вы получаете сообщения типа``Device busy'' или ``unresolved symbols''
Возможно, у вас собрана поддержка звука в ядре 2.0.x, или загружается драйвер OSS/Lite (ядро) (проверьте это при помощи cat /proc/modules).
Уберите драйвер или пересоберите ядро (взгляните на Kernel-HOWTO).
Звуковой модуль в ядрах 2.0 называется ``sound.o'', и не должен загружаться.
(Есть еще драйвер ALSA ``snd.o'').
Если у вас ядро 2.2.x, и в нем не собран звуковой драйвер, то драйверы АLSA также не будут работать.
Ядра 2.0
Я знаю, это звучит глупо, но позвольте вам напомнить еще раз. Если у вас
ядро 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
Если у вас ядро 2.2.x то вам не нужны звуковые драйверы. Ядра 2.2 должны быть собраны с поддержкой звука, но без каких-либо драйверов карт.
Устранение ссылок на другой драйвер
Другой причиной, того, что драйвер ссылается на занятость устройства может быть файл /etc/conf.modules, который до сих пор ссылается на драйвер карты. Вы должны удалить ссылки на драйвер карты и вставить ссылки на драйверы ALSA.
Если у вас все еще появляется сообщение "Unresolved symbols"
Другим источником ошибки "unresolved symbols" может являться новое ядро со старыми драйверами. Перекомпилируйте драйверы ALSA после того, как перекомпилируете новое ядро.
Проверка установок PnP
Вы уверены, что ваша карта работет? Посмотрите еще раз PnP-HOWTO и удостоверьтесь, что вы инициализировали ее правильно.
Правильно ли вы указали параметры карты ?
Проверьте и перепроверьте параметры вашей карты. Напоминаю: 534 это не 543, как и 0x534 это не 534.
Некоторые карты могут иметь модули с другим названием. Еще раз просмотрите команду ``modprobe''. Например, драйвер к Crystal 4232 должен загружаться как modprobe snd-card-cs4232, а не "snd-cs4231", или SoundBlaster PCI 64 загружается как "snd-card-audiopci", а не snd-es1370.
Если драйвер загружается..... но звука нет
Настройки "mute"
У драйверов 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 |
Не забудьте, что вы должны пропустить "set" в командной строке, если у вас старый `amixer'.
Настройки "Gain"
Некоторые карты имеют отдельный усилитель в микшере для входных и выходных сигналов. Это дополнение обычно называется "gain", "in-gain" для входа и "out-gain" для выхода. Устанавливая этот gain на определенный уровень, вы можете достичь максимальной громкости на колонках (подумайте о ваших родителях/соседях/своих ушах). Установки делаются командой
amixer set out-gain 100 unmute |
Совместимость OSS/Linux
Если вы используете драйверы 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, а затем перекомпилировать все библиотеки и утилиты:
И чтобы полностью быть уверенным в успехе, вам надо удалить все драйверы ALSA, затем их перекомпилировать и переустановить.
Общие рекомендации
Попробуйте использовать"insmod"
Лучше начинать с "insmod", а не с kerneld. Может быть, вам поступит сообщение об ошибке.
Прочтите файл INSTALL
Очень много информации можно почерпнуть из файла 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
Описание ошибки
Совет по применению CD
При использовании kmod/kerneld и драйверов ALSA для проигрывания CD, программы kmod/kerneld не используют драйверы. Это случается потому, что команда, поступающая на проигрыватель CD, приказывает, только ему воспроизводить звук, и не посылает сообщение kmod/kerneld о том, что есть звук. Пожалуй, единственным решением может быть использование modprobe.
Совет по установке драйвера MIDI
Обычно 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 и драйверов ALSA
Предположим, что у вас стоит работающая KDE, но не работают системные звуки: например звук при открытии окна или программы. При этом у вас работает проигрыватель CD, mp3 и микшер, то, возможно, у вас не запущено "kwmsound".
Поэтому удостоверьтесь, что "kwmsound" запускается вашим загрузочным скриптом ($KDEDIR/bin/startkde)
Совет: используйте устройства ALSA
Если у вас скомпилирована поддержка звука в ядре, то все приложения будут работать с /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).