"Unknown symbol" 来自内核模块(dm9601 驱动程序),这是否需要重建内核?

"Unknown symbol" from kernel module (dm9601 driver), does this require a rebuild of the kernel?

这是路由器 运行 内核版本 2.6.21.5。

我正在使用官方 (netgear) 源代码树和工具链。

我已经使用工具链编译了 dm9601.c 驱动程序(来自源代码树),但是在插入模块 dmesg 后打印:

dm9601: Unknown symbol mii_link_ok
dm9601: Unknown symbol bitrev32
dm9601: Unknown symbol mii_check_media
dm9601: Unknown symbol usbnet_get_settings
dm9601: Unknown symbol crc32_le
dm9601: Unknown symbol mii_nway_restart
dm9601: Unknown symbol usbnet_nway_reset
dm9601: Unknown symbol generic_mii_ioctl
dm9601: Unknown symbol usbnet_set_settings
dm9601: Unknown symbol mii_ethtool_gset

引用(好像)

./lib/crc32.c
./lib/bitrev.c
./drivers/net/mii.c
./drivers/usb/net/usbnet.c

有什么方法可以判断这些缺失的依赖项是否需要重建内核。或者我可以用驱动程序加载它们吗?

生成文件:

obj-m += dm9601.o

all:
        make -C /home/chris/DGND3300_V1.1.00.41_NA_src M=$(PWD) modules

clean:
        make -C /home/chris/DGND3300_V1.1.00.41_NA_src M=$(PWD) clean

制作命令:

make ARCH=mips CROSS_COMPILE="/home/chris/EVG2000_v2.2.0.12_with_toolchain_src/uclibc-crosstools-gcc-4.2.3-3/usr/bin/mips-linux-uclibc-"

更新的 Makefile 缺少模块:

obj-m += crc32.o
obj-m += bitrev.o
obj-m += mii.o
obj-m += usbnet.o
obj-m += dm9601.o

all:
        make -C /home/chris/messabout3/DGND3300_V1.1.00.41_NA_src/kernel/linux M=$(PWD) modules

clean:
        make -C /home/chris/messabout3/DGND3300_V1.1.00.41_NA_src/kernel/linux M=$(PWD) clean

首先检查,如果符号是内核符号列表的一部分,

例如:cat /proc/kallsyms | grep mii_link_ok

如果符号不存在,则需要使用 EXPORT_SYMBOL() 或 EXPORT_SYMBOL_GPL() 导出这些符号.

如果存在符号,请尝试以下操作之一,

  1. 在将使用导出函数或变量的内核模块的 Makefile 中包含 **KBUILD_EXTRA_SYMBOLS=<"absolute path to the Module.symvers of the kernel module which is exporting function or variable">,在您的情况下为 dm9601 Makefile。

例如:KBUILD_EXTRA_SYMBOLS := absolute_path_to_Module.symvers_of_mii

EXPORT_SYMBOL in kernel module | undefined symbol during insmod

  1. 列表项

Unknown symbol in while loading a kernel module

希望这能解决问题![​​=14=]