Настройка звука на 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

[Обновления: Sat, 17 May 2003 06:41]