Глава 15. Как поместить драйвер в дерево ALSA

Предыдущая  Содержание  Следующая V*D*V

Общие сведения

До сих пор вы учились писать код драйверов. И вы, возможно, теперь имеете вопрос: как поместить свой драйвер в дерево драйверов ALSA? Здесь (в конце концов :) вкратце описана стандартная процедура.

 

Предположим, что вы создаёте новый драйвер для PCI карты "xyz". Названием модуля карты было бы snd-xyz. Новый драйвер обычно помещается в дерево драйверов ALSA, в случае карт PCI это каталог alsa-driver/pci. Затем драйвер оценивается, проверяется и испытывается разработчиками и пользователями. Через некоторое время драйвер перейдёт в дерево ядра ALSA (в соответствующий каталог, например, alsa-kernel/pci) и в конечном итоге будет интегрирован в дерево Linux 2.6 (каталогом был бы linux/sound/pci).

 

В следующих разделах предполагается, что код драйвера должен быть помещён в дерево драйверов ALSA. Рассматриваются два случая: драйвер, состоящий из одного исходного файла, и драйвер, состоящий из нескольких исходных файлов.

Драйверы с исходниками в одном файле

1.Изменяем alsa-driver/pci/Makefile
 
Предположим, что у вас есть файл xyz.c. Добавляем следующие две строки
 
snd-xyz-objs := xyz.o
obj-$(CONFIG_SND_XYZ) += snd-xyz.o
 

2.Создаём запись в Kconfig
 
Добавляем новую запись Kconfig для драйвера xyz.
 
config SND_XYZ
       tristate "Foobar XYZ"
       depends on SND
       select SND_PCM
       help
         Say Y here to include support for Foobar XYZ soundcard.
 
         To compile this driver as a module, choose M here: the module
         will be called snd-xyz.
 
строка select SND_PCM указывает, что драйвер xyz поддерживает PCM. В дополнение к SND_PCM для команды select поддерживаются следующие компоненты: SND_RAWMIDI, SND_TIMER, SND_HWDEP, SND_MPU401_UART, SND_OPL3_LIB, SND_OPL4_LIB, SND_VX_LIB, SND_AC97_CODEC. Добавьте команду select для каждого поддерживаемого компонента.
 
Заметим, что некоторые варианты выбора подразумевают низкоуровневые выборы вариантов. Например, PCM включает TIMER, MPU401_UART включает RAWMIDI, AC97_CODEC включает PCM, а OPL3_LIB включает HWDEP. Однако, вам не требуется указывать выбор низкоуровневых вариантов.
 
Для получения подробной информации о скриптах Kconfig, обратитесь к документации по kbuild.
 

3.Запускаем скрипт cvscompile для повторной генерации скрипта конфигурации и собираем всё необходимое ещё раз.

Драйверы с исходниками в нескольких файлах

Предположим, что драйвер snd-xyz имеет несколько исходных файлов. Они расположены в новом каталоге, pci/xyz.

 

1.Добавляем новый каталог (xyz) в alsa-driver/pci/Makefile, как показано ниже
 
obj-$(CONFIG_SND) += xyz/

 

2.В каталоге xyz создаём Makefile
 
Пример 15.1. Пример Makefile для драйвера xyz
 
ifndef SND_TOPDIR
SND_TOPDIR=../..
endif
 
include $(SND_TOPDIR)/toplevel.config
include $(SND_TOPDIR)/Makefile.conf
 
snd-xyz-objs := xyz.o abc.o def.o
 
obj-$(CONFIG_SND_XYZ) += snd-xyz.o
 
include $(SND_TOPDIR)/Rules.make
 

3.Создаём запись KConfig
 
Эта процедура такая же, как и в предыдущем разделе.

 

4.Запускаем скрипт cvscompile для повторной генерации скрипта конфигурации и собираем всё необходимое ещё раз.

 

Предыдущая  Содержание  Следующая