Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3002080
  • 博文数量: 241
  • 博客积分: 15936
  • 博客等级: 上将
  • 技术积分: 25164
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 11:22
个人简介

Fedora-ARM

文章分类
文章存档

2016年(3)

2014年(1)

2013年(3)

2012年(50)

2011年(61)

2010年(26)

2009年(27)

2008年(21)

2007年(49)

分类: LINUX

2009-04-21 11:51:54

    在我大四做毕业设计的时候,我接触了ARM-Linux,就是这个毕业设计让我走上了Linux的道路,也定下了我的奋斗目标:成为Linux的内核程序员。当时的题目是:基于ARM9的无线视频监控系统。而无线这块,我选用了WLAN。那么当时的难点就是解决WLAN网卡的Linux驱动问题。幸好当时有位网友卖给了我一个XI-735的无线网卡,并提供了2.4内核的驱动,解决了这个问题。现内核已经到了2.6.28.5,那个网卡的总不能一直废着吧。所以昨天我从网上下载了驱动,并进行了移植,通过wlanctl工具实现了WEP加密下的infrastructure模式(带AP的模式)和independent模式(Ad-Hoc模式)。以下将这次移植的成果介绍如下:

(1)WLAN网卡驱动
 对于我手上的这块XI-735,据说是ZDC-南京智达康无线通信科技有限公司的产品.

当时我到他们网站上看了,确有此网卡,但是现在没有了。可能是以前的产品了,毕竟这是一个11M的WLAN网卡。但是据网上说NETGEAR的MA111也是同样的接口芯片Prism2,所以可以用同一个驱动linux-wlan-ng。最新的版本0.2.9是针对Linux2.6.24内核的所以修改的目的是解决新内核的网络驱动编程接口与旧内核不同的问题。通过编译和挂载时出现的错误,在网上google出相应的解决办法,我制作了以下补丁,具体的修改请看补丁吧:
文件:linux-wlan-ng-0.2.9_tekkaman.patch.tar.bz2
大小:2KB
下载:下载
 

在将下载来的linux-wlan-ng-0.2.9解压后,进入文件夹进行配置,过程如下:
tekkaman@MAGI:~/working/linux-wlan-ng-0.2.9$ CROSS_COMPILE=arm-9tdmi-linux-gnu- ./Configure

-------------- Linux WLAN Configuration Script -------------

The default responses are correct for most users.

Build Prism2.x PCMCIA Card Services (_cs) driver? (y/n) [y]: n
Build Prism2 PLX9052 based PCI (_plx) adapter driver? (y/n) [y]: n
Build Prism2.5 native PCI (_pci) driver? (y/n) [y]: n
Build Prism2.5 USB (_usb) driver? (y/n) [y]: (不用配置,模认是y,这就是我们需要的Prism2.5 USB

Linux source directory [/lib/modules/2.6.27-14-generic/build]: /home/tekkaman/working/linux-2.6.28.5_tekkaman(你的Linux内核位置)

The kernel source tree is version 2.6.28.5.
******* WARNING WARNING WARNING *******
Kernels newer than 2.6.24.x are not supported.
(此警告不于理会,我们已经打过补丁了)
******* WARNING WARNING WARNING *******
WARNING: the current running kernel is actually version 2.6.27-14-generic.
The current kernel build date is Wed Apr 15 18:59:16 2009.

Alternate target install root directory on host []: /home/tekkaman/working/rootfs_test(你的target rootfs 位置)
  Module install directory [/lib/modules/2.6.28.5]: (不用配置,这是一个相对上面root directory的位置)

It looks like you have a System V init file setup.


Prefix for build host compiler? (rarely needed) []:

Build for debugging (see doc/config.debug) (y/n) [n]:


Configuration successful.  Now type 'make' and pray.



 配置成功后就是,是make和make install了。

安装后,会在你的rootfs中添加以下文件:
.
|-- etc
|   |-- init.d
|   |   `-- wlan
|   `-- wlan
|       |-- prism2_af.hex
|       |-- prism2_ak.hex
|       |-- prism2_pm.hex
|       |-- prism2_r1.hex
|       |-- prism2_rf.hex
|       |-- prism2_ru.hex
|       |-- prism2_ssf.pda
|       |-- shared
|       |-- shared.prism2
|       |-- wlan-udev.sh
|       |-- wlan.conf
|       `-- wlancfg-DEFAULT
|-- lib
|   `-- modules
|       `-- 2.6.28.5
|           `-- linux-wlan-ng
|               |-- p80211.ko
|               `-- prism2_usb.ko
|-- sbin
|   |-- nwepgen
|   |-- prism2dl
|   |-- wlancfg
|   `-- wlanctl-ng
`-- usr
    `-- local
        `-- man
            `-- man1
                |-- nwepgen.1
                |-- prism2dl.1
                |-- wlancfg.1
                |-- wlanctl-ng.1
                `-- wland.1

一般我们只用到两个驱动模块p80211.ko和prism2_usb.ko,以及一个wlan的管理工具wlanctl-ng,要是想节省空间,你只有将make生成的
linux-wlan-ng-0.2.9/src/p80211/p80211.ko
linux-wlan-ng-0.2.9/src/prism2/driver/prism2_usb.ko
linux-wlan-ng-0.2.9/src/wlanctl/wlanctl
拷贝到你的根文件系统即可,不用make install了。


我下面的脚本就是针对自己复制这三个文件的情况,我的文件位置是:
p80211.ko和prism2_usb.ko----->/lib/modules
wlanctl --------------------->/bin    
    
(2)WLAN网卡的使用

驱动好了,下面就是怎么用了。我写了两个很简单的脚本来实现infrastructure模式(带AP的模式)和independent模式(Ad-Hoc模式):
     (1)nfrastructure模式(带AP的模式)

#!/bin/sh
    echo "-----------------------insmod the driver"
    insmod /lib/modules/p80211.ko
    insmod /lib/modules/prism2_usb.ko
 
    echo "-----------------------enable the wlan0"
    wlanctl wlan0 lnxreq_ifstate ifstate=enable

    echo "-----------------------set WEP key and enable WEP"
    wlanctl wlan0 dot11req_mibset mibattribute=dot11WEPDefaultKey0=11:22:33:44:55:66:77:88:99:00:12:31:23
    wlanctl wlan0 lnxreq_hostwep decrypt=true encrypt=true
    wlanctl wlan0 dot11req_mibset mibattribute=dot11PrivacyInvoked=true

    echo "-----------------------config IP"
    ifconfig wlan0 192.168.1.10
    ifconfig wlan0

    echo "-----------------------join the AP network"
    wlanctl wlan0 lnxreq_autojoin ssid="Tekkaman Network" authtype=opensystem

    echo "-----------------------set the gateway"
    route add default gw 192.168.1.1

上面的"set WEP key and enable WEP"部分是实现WEP的,可以不用。一些参数要根据你的AP来改,比如:"join the AP network"的ssid就是你的AP的SSID和"set WEP key and enable WEP"中的密码。

    (2)nfrastructure模式independent模式(Ad-Hoc模式)
#!/bin/sh
    echo "-----------------------insmod the driver"
    insmod /lib/modules/p80211.ko
    insmod /lib/modules/prism2_usb.ko
 
    echo "-----------------------enable the wlan0"
    wlanctl wlan0 lnxreq_ifstate ifstate=disable
    wlanctl wlan0 lnxreq_ifstate ifstate=enable

    echo "-----------------------set WEP key and enable WEP"
    wlanctl wlan0 dot11req_mibset mibattribute=dot11WEPDefaultKey0=11:22:33:44:55:66:77:88:99:00:12:31:23
    wlanctl wlan0 lnxreq_hostwep decrypt=true encrypt=true
    wlanctl wlan0 dot11req_mibset mibattribute=dot11PrivacyInvoked=true

    echo "-----------------------config IP"
    ifconfig wlan0 192.168.2.2
    ifconfig wlan0

    echo "-----------------------set the gateway"
    route add default gw 192.168.2.1 netmask 255.255.255.0

    echo "-----------------------join the Ad-Hoc network"
    wlanctl wlan0 dot11req_start ssid=tn bsstype=independent \
    beaconperiod=100 dtimperiod=3 cfpollable=false cfpollreq=false cfpperiod=3 cfpmaxduration=100 probedelay=100 \
    dschannel=12 basicrate1=2 basicrate2=4 operationalrate1=2 operationalrate2=4 operationalrate3=11 operationalrate4=22

大家可以看到只不过是最后有点不同而已。我就不多说了,看了就知道!

以上的两个脚本我都测过没问题了!

要是你想通过AP ping通外网,如ping www.163.com,就请看:
初级根文件系统的制作  中的

问题1:平台搭建好之后,可以ping通内网ip和外网ip,但是ping不通域名。

一定要注意:route add default gw 192.168.1.1 命令一定要执行哦!!!

以下是ping www.163.com时的情况:
 
阅读(4788) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册