Настройка звука на i815 в Red Hat Linux 7.2 (и не только).
последние исправления - 17.05.2003
1. Введение и отказ от обязательств.
Все, что здесь написано, не является каким-то официальным документом и не
претендует на полноту и исключительность. К созданию этого опуса меня побудили
повторяющиеся вопросы (на форумах http://linuxportal.ru и
http://www.linux.ru) о том, как сделать то, что вынесено в заголовок.
Здесь я опишу только то, что сделал я и только то, что у меня гарантированно
работает. Ну и под занавес немного примечаний. Я не обязываю вас делать то,
что здесь описано и не утверждаю, что мои действия абсолютно правильны и что
по-другому поступить невозможно. Это всего лишь описание моих действий, а
не руководство к вашим действиям. Если вы решите действовать также, то все
возможные последствия останутся на вашей совести и я не гарантирую того, что
у вас все будет работать так же, как и у меня.
2. Что для этого нужно и где это взять.
- alsa-drivers. Я использовал версию alsa-driver-0.5.12a, взятую с
http://www.alsa-project.org.. Версия 0.9.2 также работает, чего-то особенного по сравнению с 0.5.12 делать не пришлось, кроме того, что поддержку OSS теперь вынесли в отдельную библиотеку и поэтому ее тоже необходимо скачать и установить. Что делают alsa-tools - я не выяснял. Без них все работает. :)
3. Пересобираем ядро.
Насколько я понял из разных ситуаций, связанных со звуком в линухах,
поддержку звука надо собирать модулем. Для этого надо из корня исходников
текущего ядра скомандовать
# make menuconfig
перейти в раздел "Sound" и выбрать опцию "M" для пункта "Sound Card Support"
(у меня ядро 2.4.17).
Проставьте то же самое напротив "Intel ICH (i8xx) audio
support" и "OSS sound modules" (если вы собираетесь использовать программы, которым для работы нужна OSS, например xmms). В раскрывшемся подменю про OSS везде поставьте
"*". Все, можно выйти из конфига, дальше как обычно:
# make -j 10 (если ресурсы позволяют, то можно и больше)
# make install (перед этой операцией переименуйте старое ядро чтобы не
потерять его)
# make modules
# make modules_install
Если вы используете загрузчик lilo, то не забудьте поправить его конфиг
/etc/lilo.conf на предмет появления нового ядра и обеспечения возможности
загрузки со старым ядром (на всякий случай). Для загрузчика GRUB может оказаться
необходимым поправить файл /boot/grub/grub.conf.
4. Собираем alsa-driver.
Все это делается как обычно
# ./configure --help (для просмотра дополнительные опций и значений по умолчанию)
# ./configure
# make
# make install
и так, как описано в его файле INSTALL, здесь проблем возникнуть не должно.
Если что-то не получается, то скорее всего не из-за самого alsa-driver'а,
а из-за чего-то другого. Постарайтесь как можно яснее и подробнее описать
проблему на каком-нибудь форуме (например http://linuxportal.ru или
http://www.linux.ru) и обязательно процитируйте сообщения об ошибках на
оригинальном языке (не переводите их).
После успешной сборки можно выполнить скрипт snddevices, который находится
там же. В INSTALL сказано, что его выполнять необязательно, если в ваше ядро
встроена поддержка devfs. Поправив /etc/devfsd.conf так, как предложено это сделать в INSTALL, я ничего не добился и скрипт snddevices все равно приходится выполнять после каждой перезагрузки.
Кстати, заметьте, что make install правит ваш modules.dep текущего ядра.
5. Правим /etc/modules.conf.
Пример части моего конфига, отвечающей за звук:
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-intel8x0
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
options snd-card-intel8x0 snd_mic_frame_size=128 snd_pbk_frame_size=128
snd_ac97_clock=41194 snd_cap_frame_size=128
Самая важная строка - последняя, а в ней самый важный параметр - snd_ac97_clock.
Именно его надо подкручивать, если звук идет быстрее или медленне, чем нужно.
Подробности читайте в INSTALL.
6. Примечания.
а) alsa-driver делает так, что при каждой перезагрузке уровни всех звуковых каналов занижаются до нуля. Чтобы этого не происходило, используйте программу
alsactl из пакета alsa-utils. Чтобы собрать программы из этого пакета, необходимо
скачать и собрать alsa-lib. Далее достаточно один раз настроить уровни нужных
звуковых каналов и скомандовать
# ./alsactl store 0 (0 - это номер моей звуковой карты, у вас скорее всего
такой же, но это не обязательно так)
Теперь надо в конец какого-нибудь стартового скрипта (скорее всего в
/etc/rc.d/rc.local) дописать строчку
alsactl restore 0
для того, чтобы конфигурация драйвера восстанавливалась при каждой загрузке
системы. Дополнительные опции можно узнать по команде
# ./alsactl --help
В этом пакете также присутствуют консольные микшер (alsamixer) и проигрыватель
компакт-дисков aplay (помощь - ./aplay --help).
б) В системе Debian 2.2 Potato после пересборки ядра необходимо поправить /etc/modules с целью отключения загрузки перечисленных там модулей, ответственных за звук.
в) На чипсете i845PE со встроенной микросхемой alc650 также используется опция intel8x0 для configure.
7. Автор.
San АНДРЕЕВ.
Обоснованные исправления и дополнения приветствуются.
8. Поправки.
Про OSS - DemonZla