硬件平台:s3c2440 arm开发板
操作系统:Linux2.6.32
WIFI: RT3070 USB WIFI模组
交叉编译环境:arm-linux-gcc-4.4.3
linux内核编译设置不做讲解
1.1:linux内核预配置
make menuconfig
将Ralink driver support设置为M,支持动态加载,把Ranlink相关的设置空,以免冲突// 防止和你自己编译的驱动冲突 在linux-2.6.32里面没有此驱动
将wireless extensions sysfs files选上
1.2 重新编译内核
make
生成 zImage
2.1:网上下载雷凌最新的USB驱动,
2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2
拷备到Linux目录并解压:
tar jxf 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2
由于上面名字很长,可以修改为简短的名字:
mv 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO Ralink_RT3070_LinuxSTA_V2.5.0.3
第三步:进入RT3070_Linux_STA目录,看到有一个README_STA_usb文件,里面介绍了如何加载该驱动:
vi Makefile
ifeq ($(CHIPSET),)
CHIPSET = 3070
endif
#PLATFORM: Target platform
PLATFORM = SMDK
ifeq ($(PLATFORM),SMDK)
LINUX_SRC =/home/guazai/linux-2.6.32.2
CROSS_COMPILE = /usr/local/arm/4.4.3/bin/arm-linux-
endif
芯片型号要选择对应的CHIPSET = 3070,
PLATFORM = SMDK选择什么不重要,关键是对应后面的ifeq ($(PLATFORM),SMDK) 里面的linux内核的路径和交叉编译环境要填正确
第四步:按照第三步README_STA_usb给出的提示,修改config.mk文件,这里也只给出修改部分:
# vi os/linux/config.mk
# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y
# Support Native WpaSupplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
2.2 编译源码
make通过,在2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux目录下生成了rt3070sta.ko,也就是RT3070的驱动了
若编译中出现
/home/arm443/code/linux-2.6.32.2/drivers/net/wireless/rt3070/os/linux/../../chips/rtmp_chip.c:470: error: implicit declaration of function 'RT33xx_Init'
make[2]: *** [/home/arm443/code/linux-2.6.32.2/drivers/net/wireless/rt3070/os/linux/../../chips/rtmp_chip.o] Error 1
make[1]: *** [_module_/home/arm443/code/linux-2.6.32.2/drivers/net/wireless/rt3070/os/linux] Error 2
make[1]: Leaving directory `/home/arm443/code/linux-2.6.32.2'
make: *** [LINUX] Error 2
错误,则把/chips/rtmp_chip.c中的470行代码给屏蔽掉,然后再编译。3.1 拷贝驱动到目标系统
把RT2870STA.dat拷贝到/etc/Wireless/RT2870STA目录下
把rt3070sta.ko拷贝到/xxx/ 目录下 xxx自定
注意,如果重新编译过linux内核,zImage文件也要更换,rt3070sta.ko与zImage版本要一致
4. 加载驱动模块
insmod /xxx/rt3070sta.ko
出现以下错误
rt3070sta: Unknown symbol usb_alloc_urb
rt3070sta: Unknown symbol usb_free_urb
rt3070sta: Unknown symbol usb_register
rt3070sta: Unknown symbol usb_put_dev
rt3070sta: Unknown symbol usb_get_dev
rt3070sta: Unknown symbol usb_submit_urb
rt3070sta: Unknown symbol usb_control_msg
rt3070sta: Unknown symbol usb_deregister
rt3070sta: Unknown symbol usb_kill_urb
rt3070sta: Unknown symbol usb_buffer_free
rt3070sta: Unknown symbol usb_buffer_alloc
insmod: cannot insert `rt3070sta.ko': Unknown symbol in module (-1): No such file or directory
原因未加载USB驱动
5.1 加载usbcore.ko
insmod /lib/modules/2.6.14-hi3511v100dmeb-release/kernel/drivers/usb/core/usbcore.ko
显示
usbcore: registered new driver usbfs
usbcore: registered new driver hub
加载成功
5.2.1 如果为USB1.1 加载hi3511_usb_1-1.ko
insmod /lib/modules/2.6.14-hi3511v100dmeb-release/misc/hi3511_usb_1-1.ko
显示
USB1_1-M0001C030002 @Hi3511v110_OSDrv_1_0_0_1 2008-11-03 18:35:15
Clock to USB host has been enabled
hisilicon-ohci hisilicon-ohci.0: hisilicon OHCI
hisilicon-ohci hisilicon-ohci.0: new USB bus registered, assigned bus number 1
hisilicon-ohci hisilicon-ohci.0: irq 20, io mem 0xa0000000
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
usb 1-1: new full speed USB device using hisilicon-ohci and address 2
加载成功
5.2.2 如果为USB2.0 加载hiusb.ko
insmod /lib/modules/2.6.14-hi3511v100dmeb-release/misc/hiusb.ko
显示
<6>hiusb-hcd hiusb-hcd.0: Hisilicon USB host controller
hiusb-hcd hiusb-hcd.0: new USB bus registered, assigned bus number 1
hiusb-hcd hiusb-hcd.0: irq 23, io base 0x80090000
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
加载成功
5.3 然后再加载rt3070sta.ko
insmod /xxx/rt3070sta.ko
显示
rtusb init rt2870 --->
=== pAd = d1af4000, size = 514424 ===
<-- RTMPAllocTxRxRingMemory, Status=0
<-- RTMPAllocAdapterBlock, Status=0
usbcore: registered new driver rt2870
加载成功
#ifconfig -a 可以查看到ra0设备的存在
若无密码或密码为WEP加密,则此时可以启动无线, 若密码为WPA加密,则需移植wpa_supplicant,往后再说移植