无法链接linux内核模块:警告:“snd_device_new”未定义

时间:2014-01-12 14:55:11

标签: c raspberry-pi kernel-module

我正在学习Linux内核驱动程序,试图为ADC实现SPI声音驱动程序。 代码可能不起作用,但它编译。 链接出现第一个问题,报告以下错误:

WARNING: "snd_pcm_lib_ioctl" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_device_new" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_pcm_lib_preallocate_pages_for_all" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_pcm_set_ops" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_pcm_new" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_card_register" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_card_create" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_pcm_hw_constraint_integer" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_pcm_lib_malloc_pages" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_pcm_lib_free_pages" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!
WARNING: "snd_card_free" [/home/pi/rpi/gpio/module/spi-mcp3002.ko] undefined!

源代码为https://github.com/mpromonet/rpi/blob/master/gpio/module/spi-mcp3002.c,makefile为https://github.com/mpromonet/rpi/blob/master/gpio/module/Makefile

我猜某些内核选项是/未设置,但是哪一个?

我尝试使用 zcat /proc/config.gz |来查看禁用的选项grep SND | grep“^#”

# CONFIG_SND_DYNAMIC_MINORS is not set
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
# CONFIG_SND_OPL3_LIB_SEQ is not set
# CONFIG_SND_OPL4_LIB_SEQ is not set
# CONFIG_SND_SBAWE_SEQ is not set
# CONFIG_SND_EMU10K1_SEQ is not set
# CONFIG_SND_AC97_POWER_SAVE is not set
# CONFIG_SND_ARMAACI is not set
# CONFIG_SND_ATMEL_SOC is not set
# CONFIG_SND_DESIGNWARE_I2S is not set
# CONFIG_SND_SOC_ALL_CODECS is not set
# CONFIG_SND_SIMPLE_CARD is not set

我将查看内核源代码是什么使这些符号被定义...但如果有人知道我可以保存一些内核版本:)

1 个答案:

答案 0 :(得分:1)

我可能在内核之前构建模块时出错了。不在Module.symvers

中的符号

重新执行模块安装和重启解决了问题:

make 
make module_install
reboot