嵌入式2.4内核上驱动USB无线网卡

/*
**  Title    : 嵌入式2.4内核上驱动USB无线网卡
**  Author: Don Ren   
**  Date   : 2009-07-02
**  EMAIL : jiangzhe78@gmail.com
**  转载请注明出处,谢谢合作!
*/



开发板:博创S3C2410 ,
USB无线网卡:TL-WN321G/WN321G+
软件环境:linux 2.4.18-rmk7
交叉编译器:2.95.3

使用的操作系统:Debian Lenny 5.0,  2.6.26内核
网卡驱动:RT73_Linux_STA_Drv1.0.4.0.tar.gz
 
一,内核配置
1,按顺序安装如下补丁(Wireless Extensions patches):

iw_handlers.w13-5.diff

iw_handlers.w14-5.diff

iw240_we15-6.diff

iw241_we16-6.diff

打补丁命令:

$ patch -Np1 -i xxxx.diff



2,重新配置内核

make clean清理内核原有编译内容(不能用make mrproper)
进入系统内核配置菜单
make menuconfig
选择 :
 Network device support  --->  
      Wireless LAN (non-hamradio)  --->
                 [*] Wireless LAN (non-hamradio)  //只需此项,其他的不选

然后保存退出
输入命令,编译内核:
make zImage

下载内核,可以tftp协议通过网络下载,也可以使用minicom或超级终端的xmodem或ymodem或zmodem协议通过串口烧写。tftp的速度很快,但并不是所有的bootloader都支持tftp,甚至有的bootloader连ymodem和zmodem协议都不支持,所以具体使用哪一种就要论实际情况而定了。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二,网卡驱动交叉编译


1,修改Makefile

a)使用2.4内核的Makefile文件:
$mv Makefile.4 Makefile

b)将原有的CC注释掉,修改编译器

CC :=arm-linux-gcc
LD :=arm-linux-ld

   

c)Makefile里面有下面一句:
include ./config.mk
文件config.mk的内容是内核的路径信息,只需要修改为自己使用的内核源代码路径即可,如:
LINUX_SRC=/work/kernel
TARGET_MODDIR=/work/kernel/net

 

d)将原来针对PC机系统的编译改为针对arm920t的

#CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe  -march=i686 -DMODULE -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h

 
CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -Os -mapcs -fno-strict-aliasing -fno-common -pipe -mapcs-32 -march=armv4 -mtune=arm9tdmi -mshort-load-bytes -msoft-float -DMODULE -DRTMP_EMBEDDED -I. -DMODVERSIONS -include $(LINUX_SRC)/include/linux/modversions.h

 

2,修改文件

a)文件格式可能是dos格式的,会引起编译器报错,可以在编译之前使用dos2unix转化一下:
$dos2unix *

b)修改rtmp.h文件的第739行左右其中有个__TX_BUFFER的定义是错的,需要注释掉union,如下:


// The TX_BUFFER structure forms the transmitted USB packet to the device

typedef struct __TX_BUFFER{
    TXD_STRUC       TxDesc;
//    union {
        UCHAR           WirelessPacket[2342];
        HEADER_802_11   NullFrame;
        PSPOLL_FRAME    PsPollPacket;
        RTS_FRAME       RTSFrame;
//    };
} TX_BUFFER, *PTX_BUFFER;

c)在rt_config.h中有两个define,如下:
#define PROFILE_PATH                "/etc/Wireless/RT73STA/rt73sta.dat"
#define RT2573_IMAGE_FILE_NAME      "/etc/Wireless/RT73STA/rt73.bin"

在激活网卡的时候驱动会读取/etc/Wireless/RT73STA/下面的rt73sta.dat和rt73.bin两个文件,其中 rt73sta.dat是驱动的配置文件,里面的信息包括AP(Access Point,接入点)的ESSID,Channnel,Bit Rate,WirelessMode,KEY,AuthMode,NetworkType等,详细解释请参考README,rt73.bin是网孔的 firmware,1.0.4.0版本的驱动可以没有此文件,因为已经这个版本的驱动已经把rt73.bin文件转换为C语言数组存放在 rtmp_init.c文件里,不需要使用hotplug事件去加载rt73.bin了。开发板的yaffs的文件系统的/etc文件夹一般是不可写的,所以我们需要把这里进行适当的修改,比如根据我的实际情况,我修改为了:
#define PROFILE_PATH                "/mnt/yaffs/wireless/rt73sta.dat"
#define RT2573_IMAGE_FILE_NAME      "/mnt/yaffs/wireless/rt73.bin"

然后make,如果没有错误就OK,有错误的话就根据提示进行修改。不要怕有错误,仔细分析,然后耐心解决就行了。


3,驱动测试
a)把编译好的驱动加载到板子上,并且把rt73sta.dat和rt73.bin两个文件copy到/mnt/yaffs/wireless/。

b)加载驱动:
[/mnt/yaffs/wireless]insmod rt73.o
Using rt73.o
rtusb init ====>
usb.c: registered new driver rt73
idVendor = 0x148f, idProduct = 0x2573

c)设置网卡并添加路由:
[/mnt/yaffs/wireless]ifconfig rausb0 192.168.1.111 netmask 255.255.255.0 up
[/mnt/yaffs/wireless]route add default gw 192.168.1.1 netmask 255.255.255.0

[/mnt/yaffs/wireless]ifconfig rausb0
rausb0    Link encap:Ethernet  HWaddr 00:23:CD:AC:FE:12
          inet addr:192.168.1.111  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:33838 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15688 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2888084 (2.7 MiB)  TX bytes:1031928 (1007.7 KiB)

d)查看无线信息:
[/mnt/yaffs/wireless]iwconfig rausb0
rausb0    RT73 WLAN  ESSID:"linux"
          Mode:Managed  Frequency=2.412 GHz  Access Point: 00:23:CD:82:38:E4
          Bit Rate=11 Mb/s
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=95/100  Signal level:-46 dBm  Noise level:-79 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

e)ping网关(无线路由):
[/mnt/yaffs/wireless]ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=6 ttl=128 time=8.4 ms
64 bytes from 192.168.1.1: icmp_seq=7 ttl=128 time=8.2 ms
64 bytes from 192.168.1.1: icmp_seq=8 ttl=128 time=5.4 ms

f)ping另外一台连接到无线网络的主机:
[/mnt/yaffs/wireless]ping 192.168.1.100
PING 192.168.1.100 (192.168.1.100): 56 data bytes
64 bytes from 192.168.1.100: icmp_seq=0 ttl=128 time=57.9 ms
64 bytes from 192.168.1.100: icmp_seq=1 ttl=128 time=29.2 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=128 time=34.0 ms


可以把上面的这些命令都写在脚本里,这样 下次使用起来会很方便,脚本内容:

#!/bin/sh
insmod rt73.o
ifconfig rausb0 192.168.1.111 netmask 255.255.255.0 up
route add default gw 192.168.1.1 netmask 255.255.255.0

如果路由配置有变动,请重新配置rt73sta.dat文件,具体的各个选项的含义参见README,修改后重启网卡即可生效。

 

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

一些无线网络的知识:


Ad-Hoc(点对点)模式:ad-hoc模式就和以前的直连双绞线概念一样,是P2P的连接,所以也就无法与其它网络沟通了。一般无线终端设备像PMP、PSP、DMA等用的就是ad-hoc模式。

infrastructure 模式:所谓 infrastructure 是在一种整合有线与无线局域网架构的应用模式,与ad- hoc不同的是配备无线网卡的电脑必须通过ap来进行无线通讯,设置后,无线网络设备就必须有AP(Access Pointer)来沟通。

Infrastructure是一种整合有线与无线局域网络架构的应用模式,透过此种架构模式,即可达成网络资源的共享,此应用需透过Access Point。

而Ad-hoc是一种特殊的无线网络应用模式,一群计算机接上无线网络卡,即可相互连接,资源共享,无需透过Access Point。

 

         
SSID
Short for Service Set Identifier, a 32-character unique identifier attached to the header of packets sent over a WLAN that acts as a password when a mobile device tries to connect to the BSS. The SSID differentiates one WLAN from another, so all access points and all devices attempting to connect to a specific WLAN must use the same SSID. A device will not be permitted to join the BSS unless it can provide the unique SSID. Because an SSID can be sniffed in plain text from a packet it does not supply any security to the network.

ESSID
The Extended Service Set ID (ESSID) is the name of the network you want to access. It is used to identify different wireless networks.

BSSID
The BSSID is a 48bit identity used to identify a particular BSS (Basic Service Set) within an area. In Infrastructure BSS networks, the BSSID is the MAC (Medium Access Control) address of the AP (Access Point) and in Independent BSS or ad hoc networks, the BSSID is generated randomly.

ESSID is just an extended SSID allowing for more features.

 

什么是SSID/ESSID/BSSID?

SSID(Service Set Identifier)AP唯一的ID码,用来区分不同的网络,最多可以有32个字符,无线终端和AP的SSID必须相同方可通信。无线网卡设置了不同的SSID就可以进入不同网络,SSID通常由AP广播出来,通过XP自带的扫描功能可以相看当前区域内的SSID。出于安全考虑可以不广播SSID,此时用户就要手工设置SSID才能进入相应的网络。简单说,SSID就是一个局域网的名称,只有设置为名称相同SSID的值的电脑才能互相通信。

ESSID是infrastructure的应用,一个扩展的服务装置ESS (Extended service set)由二个或多个BSS组成,形成单一的子网。使用者可于ESS上roaming及存取BSSs中的任何资料,其中Access Points必须设定相同的ESSID及channel才能允许roaming。

BSS是一种特殊的Ad-hoc LAN的应用,一个无线网络至少由一个连接到有线网络的AP和若干无线工作站组成,这种配置称为一个基本服务装置BSS (Basic Service Set)。一群计算机设定相同的BSS名称,即可自成一个group,而此BSS名称,即所谓BSSID。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值