这适用于运行内核版本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
答案 0 :(得分:0)
首先检查,如果符号是内核符号列表的一部分,
代表:cat /proc/kallsyms | grep mii_link_ok
如果符号不存在,则需要使用 EXPORT_SYMBOL()或 EXPORT_SYMBOL_GPL()导出这些符号。
如果存在符号,请尝试下面之一,
例如: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
希望这会解决问题!。