新升级linux到3.2.2 发现编译bcm4312驱动出错 错误信息如下:
CC [M] /home/liu/document/hybrid-portsrc_x86_32-v5_100_82_112/src/wl/sys/wl_linux.o
/home/liu/document/hybrid-portsrc_x86_32-v5_100_82_112/src/wl/sys/wl_linux.c:388:2: 错误:初始值设定项里有未知的字段‘ndo_set_multicast_list’
/home/liu/document/hybrid-portsrc_x86_32-v5_100_82_112/src/wl/sys/wl_linux.c:388:2: 警告:从不兼容的指针类型初始化 [默认启用]
/home/liu/document/hybrid-portsrc_x86_32-v5_100_82_112/src/wl/sys/wl_linux.c:388:2: 警告:(在‘wl_netdev_ops.ndo_validate_addr’的初始化附近) [默认启用]
make[2]: *** [/home/liu/document/hybrid-portsrc_x86_32-v5_100_82_112/src/wl/sys/wl_linux.o] 错误 1
make[1]: *** [_module_/home/liu/document/hybrid-portsrc_x86_32-v5_100_82_112] 错误 2
make[1]: 离开目录“/usr/src/kernels/3.2.2-1.fc16.i686.PAE”
make: *** [all] 错误 2
对比之前3.1.9的内核文件 /lib/modules/3.1.9-1.fc16.i686.PAE/source/include/linux/netdevice.h 和3.2.2中的文件,
发现结构体net_device_ops中少了ndo_set-multicast_list成员。
把驱动中388行注解掉,重新编译,提示:
/home/liu/document/hybrid-portsrc_x86/src/wl/sys/wl_linux.c:1730:1: 警告:‘wl_set_multicast_list’定义后未使用 [-Wunused-function]
CC [M] /home/liu/document/hybrid-portsrc_x86/src/wl/sys/wl_iw.o
CC [M] /home/liu/document/hybrid-portsrc_x86/src/wl/sys/wl_cfg80211.o
LD [M] /home/liu/document/hybrid-portsrc_x86/wl.o
Building modules, stage 2.
Wireless Extension is the only possible API for this kernel version
Using Wireless Extension API
MODPOST 1 modules
WARNING: modpost: missing MODULE_LICENSE() in /home/liu/document/hybrid-portsrc_x86/wl.o
see include/linux/module.h for more information
CC /home/liu/document/hybrid-portsrc_x86/wl.mod.o
LD [M] /home/liu/document/hybrid-portsrc_x86/wl.ko
make[1]: 离开目录“/usr/src/kernels/3.2.2-1.fc16.i686.PAE”
挂载好驱动后,无线网工作正常。
再次google后发现 ndo_set_multicast_list 被ndo_set_rx_mode替换(在以下网站提到http://www.mindwerks.net/2011/11/wireless-bcm4312-3-2-kernel/,但是个人并没有找到更多关于替换的信息,在内核源码中也没有找到,找到的交流交流)
根据网站的信息,将ndo_set_multicast_list 替换成ndo_set_rx_mode 同样编译通过,并且没有警告信息。