基于arm/Linux平台USB无线网卡的wifi驱动移植
来源:互联网 发布:网络搜索找人 编辑:程序博客网 时间:2024/05/16 12:05
基于arm/Linux平台USB无线网卡的wifi驱动移植
这是同学在用的板子,arm平台是三星2440,Linux内核是2.6.24,威盛VNT6656的USB无线网卡;开发平台是Fedora10,内核是2.6.27。遭遇的问题主要有如下几个:
一、驱动程序的版本不对
开始在网上找了个VNT6656的Linux驱动程序,直接先在本地机器上编译。结果错误太多太多,改了一批还有一大批,主要问题是很多的“结构体”不对,而且开始还得把CFLAGS全部换成EXTRA_CFLAGS。最终才反应过来,可能下的驱动程序版本有问题。到www.viaarena.com下载最新的驱动:http://www.viaarena.com/Driver/VT6656_Linux_src_v1.19_12_x86.zip 。之前的驱动是1.13版本的。根本的问题在于,没有认真读驱动说明文档,开始的版本根本不支持fedora10。
那么,到底两个驱动有什么不同呢?原因在于,在Linux2.6.24以后的内核中,网络部分有了改动,而且是网络部分很重要的结构体被改动了,第一个驱动肯定是基于2.6.24之前的内核。比如,struct sk_buff,在这里可以看到具体的不同点,文中提到的《Professional Linux Kernel Architecture》可以网上下一下,确实不错,内容包含2.6.24以后比较新的内容。
二、编译驱动模块
驱动程序是是要编译成模块的,直接make就是编译本地机器上的驱动,很顺利,生成的vntwusb.ko可以在本地机器上加载成功,使用正常,窃喜。接 下来把Makefie里面的CC、LD等交叉编译工具变量设为arm-linux-gcc、arm-linux-ld。继续make,又出错了,具体错误 忘了。正确的方法是,make -C $(KERNEL_DIR) M=$(MODULE_DIR) ,-C指名内核所在文件夹,不写就按照默认的。默认的是本地机器上的内核,本人所在机器默认内核是/usr/src/kernels /2.6.27.5-117.fc10.i686,这样肯定不行。M指名要编译模块所在的路径。实际命令是
make -C /media/Study/temp/utu-Linux2.6.24_for_utu2440_2009-03-15 M=/media/Study/temp/VT6656_Linux_src_v1.19_12_x86/driver。
继续编译,依然有错,因为Makefile还没改好。把Makefile里的KSRC变量直接赋值KSRC=/media/Study/temp /utu-Linux2.6.24_for_utu2440_2009-03-15,Makefile里面还有KSP等捣乱的变量,直接都删掉即可。 make 时候还要新增加一个选项,
KSRC=/media/Study/temp/utu-Linux2.6.24_for_utu2440_2009-03-15
,不加好像不行,郁闷。。。继续编译,会在ioctl.c line:298 出现段错误segmentation fault,把这一行注释掉
// pList->sBSSIDList[ii].wBeaconInterval = pBSS->wBeaconInterval;
这样就可以得到我们需要的vntwusb.ko。不解的是,在按照本地机器的内核编译就没有任何问题。
三、还要编译内核
有了驱动模块,在板子上加载时出现“Unknown symbol in module”的错误。原来板子预装的内核是不带wifi也即802.11模块的。回想下,在编译结束时也打印了一个警告信息,说是wireless send event 没注册之类的。。重新编译内核时可以直接找到板子默认配置文件,把里面wireless部分改一下,并改文件名为.config作为默认配置.make menuconfig当然也可以。改动如下:
#
# Wireless
#
CONFIG_CFG80211=y
CONFIG_NL80211=y
CONFIG_WIRELESS_EXT=y
CONFIG_IEEE80211=y
# CONFIG_IEEE80211_DEBUG is not set
CONFIG_IEEE80211_CRYPT_WEP=y
# CONFIG_IEEE80211_CRYPT_CCMP is not set
# CONFIG_IEEE80211_CRYPT_TKIP is not set
# CONFIG_RFKILL is not set
内核编译好了,下载到板子里去就好了。。
四、如何在板子上使用无线网卡呢?
前提,USB Host驱动需要已经安装好了。加载vntw6656.ko模块成功之后,要使用无线网卡还需把驱动程序包里的wetctl工具编译一下,修改 Makefile直接make就行,编译好了考到板子的/sbin/里。另外程序包里还有个脚本文件,使用时可以根据需要改动。 DESIRED_SSID=“TestAP”是新建的无线连接名字,BSSTYPE=adhoc,建立点对点的adhoc网络,可以让其他网络寻找到。加入附件的网络,把
/sbin/wetctl $DEVICE join /
infra/ #BSSTYPE类型
“ChianNet” / #想要连接的无线网络名称
11 / #channel
$PSMODE /
$AUTHTYPE
几个选项改掉就行。也可以直接用wetctl几个命令
wetctl eth1 [scan、link 、list、 join等]
ifconfig 两个个命令
ifconfig eth1 192.168.1.110
ifconfig eth1 up
总结:Linux 移植真累。。。。
移植wifi无线网卡到mini2440上全过程【转】
http://www.arm9home.com/bbs/read.php?tid-1305-fpage-2.html
正在实验,先转载,以避免丢失
前段时间移植了U-boot和linux2.6.27.9到mini2440上,最近有点空,手头有一个usb接口的zd1211b芯片的wifi无线网卡(PSP和NDSL玩家都知道的神卡),于是决定在内核中加入此无线网卡的驱动。我是在我移植的linux2.6.27.9内核上移植的。关于内核移植,请看我的这篇文章。http://blog.chinaunix.net/u2/75270/showart.php?id=1796658
新版的linux2.6.27.9已自带zd1211b的驱动。此驱动在rat-linux-2.6.27.9/drivers/net/wireless/zd1211rw/中。
要让此驱动生效,得修改内核配置。
选中
networking support-->wireless-->Generic IEEE 802.11 Networking Stack (mac80211)
选中
device drivers-->netword device support-->wirelss lan-->ZyDAS ZD1211/ZD1211B USB-wireless support
重新编译内核。下载到板子中,重启。加入无线网卡。出现
usb 1-1: USB disconnect, address 2
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: configuration #1 chosen from 1 choice
usb 1-1: reset full speed USB device using s3c2410-ohci and address 3
zd1211rw 1-1:1.0: phy1
表示无线网卡已被识别。使用cat /proc/net/wireless 命令,可以查看到系统中多了个wlan0网卡。此时,网卡还没工作。使用命
令ifconfig wlan0 up则出现firmware:requesting zd1211,然后没反应了,这是因为没有firmware的原因,从这里
http://downloads.sourceforge.net/zd1211/zd1211-firmware-1.4.tar.bz2?modtime=1191498990&big_mirror=0
下载到zd1211 firmware 1.4后,根据firmware的说明,将其中的zd1211_*文件拷贝到根文件系统/lib/firmware/zd1211目录中。这
里再执行ifconfig wlan0 up命令,则出现
firmware: requesting zd1211/zd1211b_ub
firmware: requesting zd1211/zd1211b_uphr
zd1211rw 1-1:1.0: firmware version 4725
zd1211rw 1-1:1.0: zd1211b chip 0ace:1215 v4810 full 00-02-72 AL2230_RF pa0 g--N
网卡硬件开始正常工作了。其中,0ace:1215是网卡的ID,可以用主机linux系统命令lsusb查看到。
但此时,网卡还没被正确配置,还不能正常使用。
要正常使用无线网卡,还要正确配置。linux下的配置工具是wireless-tools,可以在这里下载到它的最新版。
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html
下载后,将源代码解压。再修改其中的makefile文件,将其中的
CC = gcc
AR = ar
RANLIB = ranlib
改为
CC = arm-linux-gcc
AR = arm-linux-ar
RANLIB = arm-linux-ranlib
再执行make,编译完成后,将生成的iwconfig,iwlist文件拷贝到rat-linux for mini2440的根文件系统中的/bin目录下,将
libiw.so.29拷贝到/lib目录下。
启动mini2440开发板,进入linux命令行后,执行ifconfig wlan0 up,启动无线网卡。再执行iwlist scanning,此命令可以搜索到
可用的无线网络接入点。我的无线接入点是一台无线路由器,ESSID是"rat-linux",执行此命令后就会下列输出
wlan0 Scan completed :
Cell 01 - Address: 00:19:C6:53:B9:CE
ESSID:"rat-linux"
Mode:Master
Channel:2
Frequency:2.417 GHz (Channel 2)
Quality=11/100 Signal level:66/100
Encryption key:on
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
48 Mb/s; 54 Mb/s
Extra:tsf=000000056306469f
Extra: Last beacon: 1065ms ago
其中可以看到我的无线接入点是需要密码的。假设密码是123456。使用如下的命令设置密码。
iwconfig wlan0 key 123456
为了能接无线网,还要使用下面的命令设置ESSID
iwconfig wlan0 essid "rat-linux"
其它的参数可以都采用默认的,不用再设了。可以使用下面的命令加入无线网了。
iwconfig wlan0 ap auto
再执行iwconfig wlan0,就可以看到下面的信息。
wlan0 IEEE 802.11bg ESSID:"rat-linux"
Mode:Managed Frequency:2.417 GHz Access Point: 00:19:C6:53:B9:CE
Bit Rate=1 Mb/s Tx-Power=27 dBm
Retry min limit:7 RTS thr:off Fragment thr=2352 B
Encryption key:1234-56 Security mode:open
Power Management:off
Link Quality=100/100 Signal level:66/100
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
这就表示已接入无线网。
最后,为无线网卡指定IP地址。命令如下
ifconfig wlan0 192.168.1.30 netmask 255.255.255.0
我的开发主机和无线网卡处于同一网段,因此是可以相互PING通的。因此可以用从开发主机上PING无线网卡的IP地址的方法来确网
卡是否工作正常。从主机上执行ping 192.168.1.30,正常PING通。
至此,无线网卡安装全部完成。
最后,为了方便配置,可以将上述的配置命令写入linux脚本文件,以后,只要执行此脚本,即可完成上述步骤的配置。脚本文件内
容如下。
#! /bin/sh
ifconfig wlan0 up
iwconfig wlan0 key 123456
iwconfig wlan0 essid "rat-linux"
iwconfig wlan0 ap auto
ifconfig wlan0 192.168.1.30 netmask 255.255.255.0
原文地址 http://www.arm9home.com/bbs/read.php?tid-1305-fpage-2.html
转贴:无线网卡驱动RT73的移植
2009-06-15 22:52
1.下载最新版的RT73无线网卡驱动:
# wget http://rt2x00.serialmonkey.com/rt73-cvs-daily.tar.gz
解压:# tar zxvf rt73-cvs-daily.tar.gz
2.在内核中创建新文件夹drivers/usb/net/rt73,
# mkdir drivers/usb/net/rt73
将解压出来的文件夹Module下的文件拷贝到刚才新建的rt73文件夹中:
# cp rt73-(time)/Module/* /home/oem/trunk/cirrus-1-0-0-4/linux-2.6.8.1/drivers/usb/net/rt73
3.修改Qwerk板内核源代码,加入RT73驱动的配置信息,以使在make menuconfig 中能添加RT73驱动的选项。
?修改drivers/usb/net/Kconfig文件,加入RT73的驱动模块的配置项:
# gedit drivers/usb/net/Kconfig &
加入以下内容:
config RT73
tristate “support for rt73 wireless usb device”
depends on USB && NET && USB_USBNET
?修改drivers/usb/net/Makefile, 加入rt73的编译项:
# gedit drivers/usb/net/Makefile &
添加一下内容:
obj-$(CONFIG_RT73)+= rt73/
4.修改RT73的Makefile,设置内核位置和编译选项:
?删除以前的modules选项,并将arm编译项改成modules,这样编译的时候才是for ARM版本的驱动模块;
?修改KERNDIR为Qwerk内核位置:
KERNDIR=/home/oem/trunk/cirrus-1-0-0-4/linux-2.6.8.1
5.配置内核:
?将Qwerk默认配置拷贝到内核根目录下:
# cp ../edb9302/linux.config .config
?用make menuconfig界面配置编译选项,选上RT73无线网卡编译选项:
在USB devices à network à support for rt73 wireless usb device,按空格键选为M,将其编译成模块。
6.编译内核模块:
# make modules
成功编译后,会在drivers/usb/net/rt73目录下生成rt73.ko驱动文件,将其拷贝到FTP目录下,以便于下载到Qwerk板上:
# cp drivers/usb/net/rt73/rt73.ko /home/ftp/
7.下载rt73驱动到Qwerk上,并修改一些脚本文件使其开机加载驱动并启用网卡:
假设Qwerk板已经可以启动起来(烧写系统可以参考QwerkDevelopmentGuide),启动Qwerk板,从minicom命令行操作:
# cd /opt/driver/
# wget ftp://192.168.1.201/rt73.ko
编写开机加载rt73.ko驱动、启用网卡脚本,将其放入/opt/scripts/目录下:
# cd ../scripts/
# vi wifi-up
加入如下内容:
(去公司后Copy到这儿)
修改/opt/scripts/robot.init脚本文件,在最后添加wifi-up脚本:
# vi robot.init
加入:
/opt/scripts/wifi-up
保存推出。
8.至此为止,无线网卡驱动移植和配置工作已经完成,重启Qwerk,无线网卡就能工作了。
说明:
1.如果按照modules编译的rt73.ko不能工作的话,可以选用armdebug编译。
附一个老外的指导:
put the contents of the Module directory into my arm 2.6.15 kernel tree under drivers/usb/net/rt73, then did the following to make it part of the kernel build:
- I added to the /drivers/usb/net/Kconfig to add an option to enable the rt73 module,
- Then edited the Makefile in /drivers/usb/net to have it build the subdir rt73 when the option above is active.
Then I ran the kernel menuconfig to actually enable that option.
Finally I edited the Makefile for the rt73 driver itself:
- put the right paths in KERNEL_SOURCE and MODULE_ROOT
- removed the calls to /sbin/depmod since we're not on the target system
- deleted the module and debug rules
- renamed arm rule to module and armdebug rule to debug
At this point doing make modules && make modules_install from the kernel root did the trick.
I'm not sure if this will be enough on your system. It worked for me.
USB无线网卡驱动RT73的移植
来源: ChinaUnix博客 日期: 2009.03.26 14:52 (共有0条评论) 我要评论
1.RT73无线网卡驱动:
http://www.ralinktech.com.tw/data/drivers/2009_0206_RT73_Linux_STA_Drv1.1.0.2.tar.bz2
2.解压
# tar -xvzf 2009_0206_RT73_Linux_STA_Drv1.1.0.2.tar.bz2
# cd 2009_2006_RT73_Linux_STA_Drv_1.1.0.2/Module
# cp Makefile.6 ./Makefile
3.编辑Makefile
######################################################################
# Module Name: Makefile
# Abstract: Makefile for rt73 linux driver on kernel series 2.6
######################################################################
CC :=arn-linux-gcc
LD :=arm-linux-ld
#PLATFORM=PC
PLATFORM=CMPC
#Enable for wpa_supplicant's spcific driver "driver_ralink.c", default enabled.
HAS_RALINK_WPA_SUPPLICANT_SUPPORT=y
#Enable for wpa_supplicant's generic driver "driver_wext.c", used for NetworkManager
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n
#Support Block Net-If during TxSw queue full.
HAS_BLOCK_NET_IF=y
WFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs
ifeq ($(HAS_RALINK_WPA_SUPPLICANT_SUPPORT),y)
WFLAGS += -DRALINK_WPA_SUPPLICANT_SUPPORT
endif
ifeq ($(HAS_NATIVE_WPA_SUPPLICANT_SUPPORT),y)
WFLAGS += -DNATIVE_WPA_SUPPLICANT_SUPPORT
endif
ifeq ($(HAS_BLOCK_NET_IF),y)
WFLAGS += -DBLOCK_NET_IF
endif
## Comment/uncomment the following line to enable/disable debugging
#EXTRA_CFLAGS += -DDBG
EXTRA_CFLAGS += $(WFLAGS)
ifeq ($(PLATFORM),PC)
LINUX_SRC =/lib/modules/$(shell uname -r)/build
endif
ifeq ($(PLATFORM),CMPC)
#LINUX_SRC = /home/fonchi/vendor/kernel-default-2.6.21/linux-2.6.21
LINUX_SRC = /usr/work/linux-2.6.24
endif
EXTRA_CFLAGS += -I$(LINUX_SRC)/include
obj-m := rt73.o
rt73-objs := /
rtmp_main.o /
mlme.o /
connect.o /
rtusb_bulk.o /
rtusb_io.o /
sync.o /
assoc.o /
auth.o /
auth_rsp.o /
rtusb_data.o /
rtmp_init.o /
sanity.o /
rtmp_wep.o /
rtmp_info.o /
rtmp_tkip.o /
wpa.o md5.o
ifeq ($(HAS_NATIVE_WPA_SUPPLICANT_SUPPORT),y)
rt73-objs += rtmp_wext.o
endif
ifeq ($(HAS_BLOCK_NET_IF),y)
rt73-objs += netif_block.o
endif
## Configuration files on SuSE
#NDDIR=/etc/sysconfig/network
#MOD_CONF=/etc/modprobe.d/module-renames
## NDDIR/ifcfg-rausb0
ND_CONF=/etc/sysconfig/network-scripts/ifcfg-rausb0
ifdef NDDIR
NDDIR := $(NDDIR)
else
NDDIR := /etc/sysconfig/network-scripts
endif
ifdef MOD_CONF
MOD_CONF := $(MOD_CONF)
else
MOD_CONF := /etc/modprobe.conf
endif
all:
make -C $(LINUX_SRC) SUBDIRS=$(shell pwd) modules
clean:
rm -rf *.o *~ .*.cmd *.ko *.mod.c .tmp_versions built-in.o
install:
make -C /lib/modules/$(shell uname -r)/build /
INSTALL_MOD_DIR=extra SUBDIRS=$(shell pwd) /
modules_install
@echo "Network device directory $(NDDIR)";
@echo "Module configuration file $(MOD_CONF)";
@if [ -d "$(NDDIR)" ] ; then /
if [ ! -f "$(ND_CONF)" ]; then /
echo "Create 'ifcfg-rausb0' in $(NDDIR)/"; /
cp ifcfg-rausb0 $(NDDIR)/ ; /
fi; /
fi
@if ! grep -q 'rausb0' $(MOD_CONF) ; then /
echo "append 'alias rausb0 rt73' to $(MOD_CONF)"; /
echo "alias rausb0 rt73" >> $(MOD_CONF) ; /
fi
/sbin/depmod -a
# auto copy *.bin to /etc/Wireless/RT73STA
# mkdir /etc/Wireless ;
# mkdir /etc/Wireless/RT73STA ;
# cp $(shell pwd)/*.bin /etc/Wireless/RT73STA ;
# cp $(shell pwd)/*.dat /etc/Wireless/RT73STA ;
# Copy file on Mandriva 2007.1
# cp $(shell pwd)/*.bin /lib/firmware/ ;
config:
@touch config.mk
@./Configure
4.交叉编译
# make all
生成rt73.ko
5.在嵌入式linux下
# mkdir /etc/Wireless
# mkdir /etc/Wireless/RT73STA
# cp rt73.bin /etc/Wireless/RT73STA/rt73.bin
# dos2unix rt73sta.dat
# cp rt73sta.dat /etc/Wireless/RT73STA/rt73sta.dat
# /sbin/insmod rt73.ko
#/sbin/ifconfig rausb0 inet 192.168.2.9 up
#route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1 dev rausb0
ping 192.168.2.1 -t
# ifconfig rausb0 up
# iwconfig
# iwlist rausb0 scanning
# iwconfig rausb0 essid "your wireless net"
# iwconfig rausb0 key "your key"
设置一下IP地址和DNS,就可以上网了!
可使用udhcpc自动获取ip地址
# udhcpc -i rausb0
ping一下网关及外网地址
- 基于arm/Linux平台USB无线网卡的wifi驱动移植
- 基于arm/Linux平台USB无线网卡的wifi驱动移植
- USB无线网卡的Linux驱动移植
- USB无线网卡的嵌入式Linux驱动移植 - 手记
- arm-linux 移植无线网卡RT3070驱动
- USB无线网卡驱动RT73的移植
- 基于linux-2.6.38.8内核的SDIO/wifi驱动分析&&android 平台USB wifi驱动移植及使用 SDIOwifi
- 移植usb无线网卡驱动
- 移植wifi无线网卡到arm linux上全过程
- DM8168-ARM平台移植USB WIFI RTL8192CU驱动
- TL-WN321G (rt73)USB无线网卡驱动在armlinux平台上的移植
- ARM-Linux无线网卡驱动移植及配置
- Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析
- Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析
- Linux USB 驱动开发实例 (三)—— 基于USB总线的无线网卡浅析
- 嵌入式Linux USB WIFI驱动的移植
- 嵌入式Linux USB WIFI驱动的移植
- 嵌入式Linux USB WIFI驱动的移植
- php关于Iterator (迭代)
- RTC驱动移植
- radiobuttonList的做法
- cFactory.CombineFeatures(features);
- oracle 日期函数学习一
- 基于arm/Linux平台USB无线网卡的wifi驱动移植
- strcpy和strcat的函数原型
- 如何用Net::SMTP发送邮件
- Linux下使用Intel_WiFi_Link_5100AGN 破解无线加密
- SAP Pricing doesn't Update
- H263,H264简介
- SQL SERVER时间格式
- word 文档的生成,嵌入式图片的定位,简单表格的生成
- java中的全局变量