这适用于运行内核版本 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() 导出这些符号。
如果存在符号,请尝试以下操作之一,
- 在将使用导出函数或变量的内核模块的 Makefile 中包含 **KBUILD_EXTRA_SYMBOLS=<"导出函数或变量的内核模块的 Module.symvers 的绝对路径">,在您的情况下为 dm9601 Makefile。
例如:KBUILD_EXTRA_SYMBOLS := absolute_path_to_Module.symvers_of_mii
EXPORT_SYMBOL in kernel module | undefined symbol during insmod
- 列表项
Unknown symbol in while loading a kernel module
希望这能解决问题!
关于linux - 来自内核模块(dm9601 驱动程序)的 "Unknown symbol",这是否需要重建内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36873230/