linux-2.6.26下开发marvell 88w8686 wifi驱动

最近在做基于2440+linux下,开发marvell 88w8686驱动 ,因为三月、硬件设计是spi接口,所以我从marvell 官方网站下载SPI 接口的驱动程序src_gspi8686.tar.bz2, 此驱动程序是基于PXA270的,所以需要自己移植到2440平台上,主要有如下工作要做:
1.将src_gspi8686 下的 io 文件夹下的gspi.c和gspi.h 这两个文件修改,针对各个具体函数,按照2440 SPI 的时序来编写SPI 驱动
2.修改Makefile编译修改过的代码,编译生成gspi.ko 和gspi8xxx.ko
3.加载SPI 驱动 insmod gspi.ko
4.加载wifi驱动 insmod gspi8686.ko  helper_name=./helper_gspi.bin 
   fw_name=./gspi8686.bin mfdmode=1
5.得到wifi芯片的ID 为 0xb
6.加载firmware 成功
7.设置wifi  MAC地址,ip地址 ifconfig eth1 192.168.1.138 netmask 255.255.255.0等信息
8.扫描网络iwlist eth0 scanning,设置连接点和密码等信息。
9.ping 服务器 ping 192.168.1.130 成功,到此wifi驱动porting 成功.
 
移植过程中出现的问题:
1、硬件问题:我们下载固件是通过主机接口,不是外接eeprom。调试花了不少的时间。
2、接收数据的链表头没有初始化,应该是在使用后再初始化,这是一个bug。
3、网络配置问题。
iwconfig工具使用
  下载iwconfig工具相关的源代码,并成功交叉编译通过,用于实际项目中。
可依据实际需要修改Makefile中的"CC=gcc","AR=ar"以及安装路径, 我是CC=$(TOOLCHAIN)/bin/arm-linux-gcc,和AR=$(TOOLCHAIN)/bin/arm-linux-ar;
其余makefile不需要修改;用 make clean;make;make install即可编译安装。
生成的libiw.so.29与其他工具一起。
把生成的文件拷到目标板的/bin文件夹下,libiw.so.29拷到/lib下即可以使用相关命令。
下面来自网络:
iwconfig是Linux Wireless
Extensions(LWE)的用户层配置工具之一。LWE是Linux下对无线网络配置的工具,包括内核的支持、用户层配置工具和驱动接口的支持三部
分。现在很多无线网卡都支持LWE,而且主流的Linux发布版本,比如Redhat Linux、Ubuntu Linux都已带了这个配置工具。
1、iwconfig
用法: iwconfig interface [essid {NN|on|off}]
                          [nwid {NN|on|off}]
                          [mode {managed|ad-hoc|...}
                          [freq N.NNNN[k|M|G]]
                          [channel N]
                          [ap {N|off|auto}]
                          [sens N]
                          [nick N]
                          [rate {N|auto|fixed}]
                          [rts {N|auto|fixed|off}]
                          [frag {N|auto|fixed|off}]
                          [enc {NNNN-NNNN|off}]
                          [power {period N|timeout N}]
                          [retry {limit N|lifetime N}]
                          [txpower N {mW|dBm}]
                          [commit]
说明:iwconfig是LWE最主要的工具,能够对无线网卡的大部分参数进行配置。
参数:
essid:配置无线网卡的ESSID(Extension Service Set ID)。通过ESSID来区分不同的无线网络,正常情况下只有相同ESSID的无线站点
         才能够互相通讯,除非想监听无线网络。其后的参数为双引号括起的ESSID字符串,或是any/on/off,假如ESSID字符串中包含
         any/no/off,则需要在前面加"--"。
         示例:
             #iwconfig eth0 essid any                   允许任何ESSID,也就是混杂模式
             #iwconfig eth0 essid "My Network"          配置ESSID为"My Network"
             #iwconfig eth0 essid -- "ANY"              配置ESSID为"ANY"
             
  nwid: Network ID,只用于pre-802.11的无线网卡,802.11网卡利用ESSID和AP的MAC地址来替换nwid,现在基本上不用配置。
         示例:
             #iwconfig eth0 nwid AB34
             #iwconfig eth0 nwid off
             
  nick: Nickname,一些网卡需要配置该参数,但是802.11协议栈、MAC都没有用到该参数,一般也不用配置。
         示例:
            #iwconfig eth0 nickname "My Linux Node"
            
  mode:配置无线网卡的工作模式,能够是
        Ad-hoc:不带AP的点对点无线网络
        Managed:通过多个AP组成的网络,无线设备能够在这个网络中漫游
        Master:配置该无线网卡为一个AP
        Repeater:配置为无线网络中继设备,能够转发网络包
        Secondary:配置为备份的AP/Repeater
        Monitor:监听模式
        Auto:由无线网卡自动选择工作模式
        
          示例:
            #iwconfig eth0 mode Managed
            #iwconfig eth0 mode Ad-Hoc
            
  freq/channel:配置无线网卡的工作频率或频道,小于1000的参数被认为是频道,大于10000的参数被认为是频率。频率单位为Hz,
                能够在数字后面附带k, M, G来改变数量级,比如2.4G。频道从1开始。使用lwlist工具能够查看无线网卡支持的频率
                和频道。参数off/auto指示无线网络自动挑选频率。
         注意:假如是Managed模式,AP会指示无线网卡的工作频率,因此该配置的参数会被忽略。Ad-hoc模式下只使用该设定的频率
            初始无线网络,假如加入已存在的Ad-hoc网络则会忽略该配置的频率参数。
         示例:
          #iwconfig eth0 freq 2422000000
          #iwconfig eth0 freq 2.422G
          #iwconfig eth0 channel 3
          #iwconfig eth0 channel auto
  ap:连接到指定的AP或无线网络,后面的参数能够是AP的MAC地址,也能够是iwlist scan出来的标识符。假如是Ad-hoc,则连接到
      一个已存在的Ad-hoc网络。使用off参数让无线网卡不改变当前已连接的AP下进入自动模式。any/auto参数,无线网卡自动选择
      最好的AP。
        注意:假如无线信号低到一定程度,无线网络会进入自动选择AP模式。
        示例:
          #iwconfig eth0 ap 00:60:1D:01:23:45
          #iwconfig eth0 ap any
          #iwconfig eth0 ap off
  rate/bit:假如无线网卡支持多速率,则能够通过该命令配置工作的速率。小于1000的参数由具体的无线网卡驱动定义,一般是传输速
            率的索引值,大于1000的为速率,单位bps,能够在数字后面附带k, M, G来指定数量级。auto参数让无线网卡自动选择速率
            fixed参数让无线网卡不使用自动速率模式。
            
        示例:
         #iwconfig eth0 rate 11M
         #iwconfig eth0 rate auto
         #iwconfig eth0 rate 5.5M auto    //自动选择5.5M以下的速率
         
  txpower:假如无线网卡支持多发射功率设定,则使用该参数设定发射,单位为dBm,假如指定为W(毫瓦),只转换公式为:
           dBm=30+log(W)。参数on/off能够打开和关闭发射单元,auto和fixed指定无线是否自动选择发射功率。
        示例:
         #iwconfig eth0 txpower 15
         #iwconfig eth0 txpower 30mW
         #iwconfig eth0 txpower auto
         #iwconfig eth0 txpower off   
       
  sens:配置接收灵敏度的下限,在该下限之下,无线网卡认为该无线网络信号太差,不同的网卡会采取不同的措施,一些现代的无线网卡
        会自动选择新的AP。正的参数为raw data,直接传给无线网卡驱动处理,一般认为是百分比。负值表示dBm值。
        
        示例:
          #iwconfig eth0 sens -80
          #iwconfig eth0 sens 2
          
  retry:配置无线网卡的重传机制。limit ‘value’ 指定最大重传次数;lifetime ‘value’指定最长重试时间,单位为秒,能够附带m和u来
         指定单位为毫秒和微秒。假如无线网卡支持自动模式,则在limit和lifetime之前还能够附加min和max来指定上下限值。
         
       示例:
         #iwconfig eth0 retry 16
         #iwconfig eth0 retry lifetime 300m
         #iwconfig eth0 retry min limit 8
         
  rts:指定RTS/CTS握手方式,使用RTS/CTS握手会增加额外开销,但假如无线网络中有隐藏无线节点或有很多无线节点时能够提高性能。
       后面的参数指定一个使用该机制的最小包的大小,假如该值等于最大包大小,则相当于禁止使用该机制。能够使用auto/off/fixed
       参数。
       
       示例:
         #iwconfig eth0 rts 250
         #iwconfig eth0 rts off
         
  frag:配置发送数据包的分片大小。配置分片会增加额外开销,但在噪声环境下能够提高数据包的到达率。一般情况下该参数小于最大包
       大小,有些支持Burst模式的无线网卡能够配置大于最大包大小的值来允许Burst模式。还能够使用auto/fixed/off参数。
       
       示例:
         #iwconfig eth0 frag 512
         #iwconfig eth0 frag off      
         
  key/enc[ryption]:配置无线网卡使用的加密密钥,此处为配置WEP模式的加密key,假如要使用WPA,需要wpa_supplicant工具包。
        密钥参数能够是 XXXX-XXXX-XXXX-XXXX 或 XXXXXXXX 格式的十六进制数值,也能够是s:xxxxxx的ASCII字符。假如在密钥参数之前
        加了[index],则只是配置该索引值对应的密钥,并不改变当前的密钥。直接指定[index]值能够配置当前使用哪一个密钥。指定on/
        off能够控制是否使用加密模式。open/restricted指定加密模式,取决于不同的无线网卡,大多数无线网卡的open模式不使用加密且
        允许接收没有加密的数据包,restricted模式使用加密。能够使用多个key参数,但只有最后一个生效。
            WEP密钥能够是40bit,用10个十六进制数字或5个ASCII字符表示,也能够是128bit,用26个十六进制数字或13个ASCII字符表
        示。
        示例:
          #iwconfig eth0 key 0123-4567-89
          #iwconfig eth0 key [3] 0123-4567-89
          #iwconfig eth0 key s:password [2]
          #iwconfig eth0 key [2]
          #iwconfig eth0 key open
          #iwconfig eth0 key off
          #iwconfig eth0 key restricted [3] 0123456789
          #iwconfig eth0 key 01-23 key 45-67 [4] key [4]
          
  power:配置无线网卡的电源管理模式。period ‘value’ 指定唤醒的周期,timeout ‘value’指定进入休眠的等待时间,这两个参数之前能够
         加min和max修饰,这些值的单位为秒,能够附加m和u来指定毫秒和微秒。off/on参数指定是否允许电源管理,all/unicast/multicast
         指定允许唤醒的数据包类型。
         
         示例:
         #iwconfig eth0 power period 2
         #iwconfig eth0 power 500m unicast
         #iwconfig eth0 power timeout 300u all
         #iwconfig eth0 power off
         #iwconfig eth0 power min period 2 power max period 4
         
  commit:提交任何的参数修改给无线网卡驱动。有些无线网卡驱动会先缓存无线网卡参数修,使用这个命令来让无线网卡的参数修改生效。但是一
          般无需使用该命令,因为无线网卡驱动最终都会是参数的修改生效,一般在debug时会用到。
为了方便配置,能够把配置写到 /etc/network/interfaces中,这样以后就不用反复配置了。
  • auto loiface lo inet loopback

  • auto eth1
  • iface eth1 inet staticaddress 192.168.1.3
  • netmask 255.255.255.0gateway 192.168.1.1
  • echo nameserver 192.168.1.1>/etc/resolv.confpre-up /sbin/iwconfig eth1 essid "LW HOME LINK"
  • pre-up /sbin/iwconfig eth1 key s:liwei
  • auto usb0iface usb0 inet static
  • address 192.168.0.200netmask 255.255.255.0
  • auto dsl-provideriface dsl-provider inet ppp
  • pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconfprovider dsl-provider

  • auto eth0
  • iface eth0 inet manual
  • (come from http://blog.csdn.net/control_tech)

  • 你可能感兴趣的:(linux-2.6.26下开发marvell 88w8686 wifi驱动)