【问题标题】:How to build ALSA with my own PCI sound driver如何使用我自己的 PCI 声音驱动程序构建 ALSA
【发布时间】:2012-10-26 04:58:04
【问题描述】:

我正在尝试为我的 PCI 声卡创建一个简单的驱动程序,我将在其中使用 ALSA api。为了运行我的驱动程序,我已将原始 snd_intel8x0 声卡驱动程序列入黑名单。此时我的探针函数被调用,我的 PCI IO 端口被分配并且 PCI 设备被启用。

不幸的是,当我尝试使用 ALSA api 时出现以下错误:

[...] alsa: 未知符号 snd_card_register (err 0)

[...] alsa: 未知符号 snd_card_create (err 0)

[...] alsa: 未知符号 snd_card_free (err 0)

[...] alsa: 未知符号 snd_device_new (err 0)

在文件 /proc/kallsyms 中也没有 snd* 符号(如果原始驱动程序 snd_intel8x0 正在运行所有上述 snd* 函数在 /proc/kallsyms 中可用)

当原始驱动程序被列入黑名单时,文件夹 /proc/asound 消失(如果 snd_intel8x0 正在运行,则存在一个sound文件夹)

我在互联网上的搜索以及此处和其他论坛中的问题表明,我必须以某种方式使用我的驱动程序构建 ALSA。 我该怎么做?非常感谢任何指南、教程链接。

提前非常感谢。我希望能得到一些有用的答案。我试图解决这个问题很长时间都没有成功。

你好,内德林。

【问题讨论】:

    标签: linux drivers alsa


    【解决方案1】:

    好吧,我会尽可能详细地解释我所做的事情。

    这是我使用的makefile

    obj-m := alsa.o

    KERNELDIR ?= /lib/modules/$(shell uname -r)/build

    密码 := $(shell pwd)

    全部:$(MAKE) -C $(KERNELDIR) M=$(PWD)

    clean: rm -rf *.o ~ core .depend ..cmd *.ko *.mod.c .tmp_versions

    我使用 sudo insmod .ko

    进行加载

    在这里我会说,最初我不想使用 ALSA。那时我创建了一个准系统 PCI 驱动程序,它只初始化 PCI 设备并在探测函数中注册 IO 端口和 IO 内存。我成功加载了这个模块(执行了探测并保留了 IO 区域)。为了构建这个 PCI 驱动程序,我使用了上面提到的 Makefile。 后来我决定我需要 ALSA,从那以后我得到了 [...] alsa: Unknown symbol snd_card_register (err 0) 错误

    我还尝试将我的驱动程序包含在 ALSA 树中,如您发送给我的链接中所述。以下是我在 /sound/pci 中更改 Makfile 和 Kconfig 文件的方法(我在 /sound/pci/Nedelin_ALSA_PCI.o 中创建了一个指向实际代码的链接。我提到这一点是为了避免在文件名):

    生成文件

    ...

    snd-nedelinxalsaxpci-objs := Nedelin_ALSA_PCI.o

    ...

    obj-$(CONFIG_SND_NEDELINXALSAXPCI) += snd-nedelinxalsaxpc

    Kconfig

    配置 SND_NEDELINXALSAXPCI

    三态“Intel/SiS/nVidia/SND_NEDELINXALSAXPCI 驱动程序”

    选择 SND_AC97_CODEC

    帮助 这是我的司机...

    这似乎很成功。我在 make menuconfig 中找到了我的驱动程序并将其作为模块加载。重新编译我的内核,也OK。我在 /lib/modules//kernel/sound/pci 中看到了我的驱动程序。如果我尝试使用 modprobe 加载它,它似乎已加载(执行了 module_init())但我的探测函数没有执行。

    我完全糊涂了。

    【讨论】:

      【解决方案2】:

      您在编译或加载模块时做错了,但由于您没有提及您是如何尝试这样做的,因此没有更具体的说明。

      有关如何编译和加载模块的说明,请参阅Linux Device Drivers 的第 2 章。
      对于 ALSA 驱动程序,请参阅Writing an ALSA Driver

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 2015-08-31
        相关资源
        最近更新 更多