wifi驱动移植

时间:2025-04-10 00:07:37

目标板:Hi3518

内核版本:linux3.0.8
1.修改makefile
#PLATFORM = PC     //注释掉
PLATFORM = HI3518     //支持平台

ifeq ($(PLATFORM),HI3518)
LINUX_SRC = /root/hi3518/linux-3.0.y     //内核路径
CROSS_COMPILE = /opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin/arm-hisiv100nptl-linux- //工具链路径
endif

2.进入RT3070/include/rtmp_def.h

    #define INF_MAIN_DEV_NAME     "wlan"
    #define INF_MBSSID_DEV_NAME "wlan"

3.修改os/linux/config.mk使其支持wpa_suplicant(将‘n'变成'y')

# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y
# Support Native WpaSupplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

4.在编译驱动前必须先编译image

问题一:

/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: error: unknown field 'private' specified in initializer
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: warning: initialization from incompatible pointer type
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: error: unknown field 'num_private' specified in initializer
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: warning: excess elements in struct initializer
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: warning: (near initialization for 'rt28xx_iw_handler_def')
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: error: unknown field 'private_args' specified in initializer
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: warning: excess elements in struct initializer
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: warning: (near initialization for 'rt28xx_iw_handler_def')
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: error: unknown field 'num_private_args' specified in initializer
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: warning: excess elements in struct initializer
/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.c:: warning: (near initialization for 'rt28xx_iw_handler_def')
]: *** [/root/hi3518/RT3070/os/linux/../../os/linux/sta_ioctl.o] 错误
]: *** [_module_/root/hi3518/RT3070/os/linux] 错误
]:正在离开目录 `/root/hi3518/linux-3.0.y'

问题原因:是因为在配置Makefile时,指定的内核在配置时不支持802.11的无线设备驱动。

解决办法:重新配置编译指定的Linux Kernel,将Device Drivers
   ==>Network deivce support
       ==>Wireless LAN
        ==><*> USB ZD1201 based Wireless device support,编译即可
问题二:
rt3070sta: module has no symbols (stripped?)
insmod: can't insert 'rt3070sta.ko': invalid module format

解决办法:不能对目标文件进行裁剪

rtusb init rt2870 --->
usbcore: registered new interface driver rt2870
如果出现以下报错,说明内核源码错了
rt5370sta: version magic '2.6.32.59 mod_unload ARMv4 ' should be '2.6.32.2-Frie'
insmod: cannot insert 'rt5370sta.ko': invalid module format

插入网卡,这个时候ifconfig是看不到网卡的,要启用网卡,用以下命令:

ifconfig ra0 up