Как установить поддержку звуковых карт AWE

Что вам понадобится

Ниже приведен список того, что необходимо для установки поддержки SB AWE под Linux:

Если у вас PnP-карта, вам также понадобится:

Смотрите раздел "Источники", в котором описано, где можно найти эти программы.

Если у вас система Debian GNU/Linux - это означает, что нужны пакеты kernel-source-<версия>, awe-drv и, возможно, пакет isapnptools. Вы, наверное, также захотите установить другие awe-* пакеты, хотя они не так и важны для установки. Я настойчиво рекомендую установку пакета kernel-package для более простой компиляции и установки ядра.

Начало работы

Предположим, что вы правильно установили вашу карту в гнездо на материнской плате, и, возможно, проверили ее работоспособность в DOS или Windows.

Следующим шагом будет настройка инициализации карты в процессе загрузки (только если у вас PnP-карта). Следуйте документации в исходных текстах, соберите и установите пакет isapnptools (или используйте уже собранный пакет дистрибутива Debian), и, затем, наберите

# pnpdump > /etc/isapnp.conf

будучи root-ом. Эта команда сгенерирует нормальный конфигурационный файл для ваших PnP-карт, но с закомментированными устройствами. Аккуратно отредактируйте этот файл, сравнивая значения номеров DMA-каналов, базовых значений портов ввода-вывода и номера IRQ с соответствующими значениями под DOS или Windows, если это возможно (в Windows'95, изучите ресурсы, выделенные карте в пункте resources (ресурсы) в device manager) ("Свойства:Система")). Если у вас возникли проблемы, еще раз подробно прочтите документацию к пакету isapnptools.

Предостережение

ВНИМАНИЕ: isapnptools часто не могут правильно определить все три порта ввода-вывода устройства WaveTable карты SB AWE. Пожалуйста, сравните строку WaveTable в вашем файле isapnp.conf с тем, что приведено в примере в приложении к этому HOWTO. Настройте базы портов ввода-вывода, если это необходимо.

Предостережение

ВНИМАНИЕ: В соответствии с isapnp-faq, isapnp иногда неправильно программирует логический номер устройства. Если вы встретите сообщения об ошибках типа:

Error occurred executing request 'LD 2' on or around line...
Во время исполнения запроса 'LD 2' возникла ошибка в строке...

попробуйте добавить строку (VERIFYLD N) в начале файла isapnp.conf. Вам придется использовать версию 1.10 или новее, чтобы этот ключ сработал. Если у вас нет возможности использовать версию 1.10 или новее, вы также можете ПРОПИСАТЬ логический номер устройства напрямую. Читайте isapnp-faq для более полной информации по этому вопросу. Если и это не заработает, свяжитесь со мной (и ребятами, занимающимися isapnp, им тоже будет интересно, я думаю).

Предостережение

ВНИМАНИЕ: Убедитесь, что в последней строке написана команда (WAITFORKEY), которая иногда опускается старыми версиями pnpdump.

Пример файла isapnp.conf для одной PnP-карты (звуковой карты) вы можете найти в приложении к этому документу (см.раздел "Пример isapnp.conf").

Если у вас Debian-система, то никаких дополнительных настроек не потребуется. isapnp будет запускаться в процессе загрузки в файле /etc/init.d/boot той частью скрипта, которую вы наверно захотите добавить в свои загрузочные скрипты:
# Настройка ISA PnP карт до загрузки
# модулей. Это необходимо сделать ДО загрузки модулей, чтобы
# настроить и запустить PnP карты ДО того, как
# драйверы там все напутают.
#
if [ -x /etc/init.d/isapnp ]
then
  /etc/init.d/isapnp start
fi
где /etc/init.d/isapnp - это:
#! /bin/sh
# /etc/init.d/isapnp: конфигурация Plug and Play карт
test -x /sbin/isapnp || exit 0
/sbin/isapnp /etc/isapnp.conf
exit 0

Если у вас другой дистрибутив Linux, то все зависит от вас. Я не знаю, что делать в других дистрибутивах (кто-нибудь желает послать мне более точную информацию?). Просто убедитесь в том, что isapnp запускается до загрузки модулей (см. ниже).

Сборка ядра

До сборки ядра вам придется установить Звуковой Драйвер AWE в стандартный драйвер звука ядра. Даже если ваши исходные тексты ядра включают расширение awedrv (см.каталог /drivers/sound/lowlevel/), вы захотите обновить программу awedrv. Следуйте инструкциям по установке в каталоге исходных текстов awedrv. Вкратце, вам придется запустить скрипт, который произведет необходимые изменения в исходных текстах ядра.

Проверьте, обновились ли исходные тексты ядра после запуска этого скрипта. Он просто проверяет, существует ли конкретный файл - если он существует, то он ничего не делает. Вам лучше предварительно удалить файл drivers/sound/lowlevel/awe_wav.c до запуска этого скрипта.

Затем вам надо настроить ядро, включив в нем поддержку звука. Я надеюсь, что вы немного разбираетесь в сборке ядра; обращайтесь в "HOWTO: Звук в Linux" (Linux Sound HOWTO) и "HOWTO: Ядро" (Kernel HOWTO) за подробной информацией. Перейдите в каталог исходных текстов ядра (например /usr/src/linux) и наберите:

# make config

или make menuconfig, или make xconfig. Затем вам придется настроить ядро обычным образом. Используйте возможность создать маленькое и очень мощное ядро, собранное специально для вашей машины. Обязательно включите пункт "Поддержка загружаемых модулей" (Enable loadable module support), если вы собираетесь собрать драйвер звука в виде модуля (вы должны это сделать, если у вас PnP карта), но я уверен, что вы включите эту опцию в любом случае.

Затем вам будет задан вопрос о поддержке звука. Можно ответить Y или M здесь, если у вас не-PnP карта. Ответьте M здесь, если у вас PnP-карта. Вы должны собрать поддержку звуковой карты в виде модуля, при наличии PnP карты потому, что PnP карта должна быть инициализирована до загрузки модуля драйвера звука.

На следующие вопросы необходимо ответить Y, на все другие N:

Sound Blaster (SB, SBPro, SB16, clones) support (CONFIG_SB) [Y/n/?]
	(Поддержка Sound Blaster (SB, SBPro, SB16, clones) (CONFIG_SB) [Y/n/?])

Generic OPL2/OPL3 FM synthesizer support (CONFIG_ADLIB) [Y/n/?]
	(Поддержка Стандартного OPL2/OPL3 FM-синтезатора (CONFIG_ADLIB) [Y/n/?])

/dev/dsp and /dev/audio support (CONFIG_AUDIO) [Y/n/?]
	(Поддержка /dev/dsp и /dev/audio (CONFIG_AUDIO) [Y/n/?])

MIDI interface support (CONFIG_MIDI) [Y/n/?]
	(Поддержка MIDI-интерфейса (CONFIG_MIDI) [Y/n/?])

FM synthesizer (YM3812/OPL-3) support (CONFIG_YM3812) [Y/n/?]
	(Поддержка FM-синтезатора (YM3812/OPL-3) (CONFIG_YM3812) [Y/n/?])

lowlevel sound driver support [Y/n/?]
	(Поддержка звукового драйвера низкого уровня [Y/n/?])
 
AWE32 support (CONFIG_AWE32_SYNTH) [Y/n/?]
	(Поддержка AWE32 (CONFIG_AWE32_SYNTH) [Y/n/?])

Только последний вопрос касается WaveTable-синтезатора. Остальные касаются поддержки SB 16 драйвером звука OSS/Free.

В дополнение к этому, вам придется настроить порт ввода-вывода звуковой карты. Еще раз взгляните в файл isapnp.conf за подсказкой, если он есть. Для меня следующих стандартных значений достаточно. Заметьте, что стандартное значение, написанное в конфигурационном скрипте, может быть неверно (особенно значения SBC_IRQ и SB_MPU_BASE часто неверны для многих карт).

I/O base for SB Check from manual of the card (SBC_BASE) [220]
	(Номер базового порта для SB (сверьтесь с руководством по карте) (SBC_BASE) [220])

Sound Blaster IRQ Check from manual of the card (SBC_IRQ) [5]
	(Номер IRQ для SB (сверьтесь с руководством по карте)(SBC_IRQ) [5])

Sound Blaster DMA 0, 1 or 3 (SBC_DMA) [1]
	(Номер DMA для SB (SBC_DMA) [1])

Sound Blaster 16 bit DMA (_REQUIRED_for SB16, Jazz16, SMW) 5, 6 or 7
(use 1 for 8 bit cards) (SB_DMA2) [5]
	(Номер 16-битного DMA для SB (_ОБЯЗАТЕЛЬНО_ для SB16, Jazz16, SMW) 5, 6 or 7
	(используйте 1 для 8-битных карт) (SB_DMA2) [5]

MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of the card (SB_MPU_BASE) [330]
	(Номер базового порта MPU401 для SB16, Jazz16 and ES1688 (сверьтесь с
	руководством по карте (SB_MPU_BASE) [330])

SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Use -1 with SB16 (SB_MPU_IRQ) [-1]
	(SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Используйте -1 для SB16 (SB_MPU_IRQ) [-1])

Теперь пересоберите ядро. Пользователь Debian должны использовать пакет kernel-package. Этот пакет позволяет собирать ядро так же просто, как и любой другой пакет в debian. Прочтите инструкцию в каталоге /usr/doc/kernel-package/. Подсказка:

# make-kpkg clean
# make-kpkg -revision custom.1.0 kernel_image

а затем dpkg -i /usr/src/kernel-image-2.0.29_custom.1.0_i386.deb.

Если у вас другой дистрибутив Linux, следуйте требованиям стандартных инструкций по сборке ядра. Не забудьте сделать make modules и make modules_install. Взгляните в "HOWTO: Звук в Linux" (Linux Sound HOWTO) и, возможно, в "HOWTO: Ядро" ( Kernel HOWTO) за подробной информацией.

Перезагрузка

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

Если у вас PnP-карта, убедитесь в запуске isapnp в загрузочном скрипте (как было описано выше) или вручную:

# /sbin/isapnp /etc/isapnp.conf
Board 1 has Identity 74 00 00 e3 10 48 00 8c 0e:  CTL0048 Serial No 58128
[checksum 74]

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

# modprobe -a sound
AWE32 Sound Driver v0.3.3e (DRAM 2048k)

Если вам кажется, что объем памяти неверный (У меня были сообщения о том, что в одной карте AWE64 было 4096 Кб, а "определялось" 28672 Кб), попытайтесь либо обновить пакет awedrv или указать объем памяти в файле /usr/src/linux/drivers/sound/lowlevel/awe_config.h, например:

#define AWE_DEFAULT_MEM_SIZE  4096   /* kbytes */

Извините, но после этого вам придется пересобрать ядро (возможно пересборки модулей будет достаточно, но я в этом не уверен).

Если все заработало, вы наверно захотите загружать модуль звука автоматически. Можно использовать kerneld (это плохая идея - причины описаны в разделе 1.4) или добавить одну строчку, содержащую слово sound в ваш файл /etc/modules (в Debian) или добавить строку /sbin/modprobe -a sound в ваш загрузочный скрипт.