WiFi驱动移植到Linux.docx

上传人:b****6 文档编号:5283470 上传时间:2022-12-14 格式:DOCX 页数:8 大小:18.54KB
下载 相关 举报
WiFi驱动移植到Linux.docx_第1页
第1页 / 共8页
WiFi驱动移植到Linux.docx_第2页
第2页 / 共8页
WiFi驱动移植到Linux.docx_第3页
第3页 / 共8页
WiFi驱动移植到Linux.docx_第4页
第4页 / 共8页
WiFi驱动移植到Linux.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

WiFi驱动移植到Linux.docx

《WiFi驱动移植到Linux.docx》由会员分享,可在线阅读,更多相关《WiFi驱动移植到Linux.docx(8页珍藏版)》请在冰豆网上搜索。

WiFi驱动移植到Linux.docx

WiFi驱动移植到Linux

linux下移植之WIFI驱动

2010-05-1422:

27

1.前言

   硬件平台:

imx27+sd8686

      软件平台:

linux

      内核:

2.6.27

2.移植思想

1,WIFI模块本身和cpu之间的接口;

      我们的模块和cpu之间的接口是sdio的,也就是说必须要先保证SDIO本身是工作的,与SD卡,MMC属于同类型。

主要用到这几个GPIO引脚SD0...SD3,SD2_CMD,SD2_CLK,以及复位引脚PB24.

2,WIFI模块本身的上电时序;

      模块都有它自己的规律,所以必须要根据spec了解它本身的上电过程,严格遵守;

3,以太网接口的创建;

      我们的WIFI模块本身是建立在SDIO口之上的,而对上都是提供以太网接口的,所以必须要保证这个接口以及创建;

4,特殊处理;

      不同的模块都有它特别的地方,比如我们用的是8686和compo也就是说它和蓝牙共用天线,所以需要在初始化的时候做特殊的处理,发送特殊的命令,才能工作;

3.移植过程

1,sdio本身是通过gpio口模拟的,所以需要对gpio口进行配置;

      staticmfp_cfg_tlittleton_mmc3_pins[]={

      GPIO7_2_MMC3_DAT0,

      GPIO8_2_MMC3_DAT1,

      GPIO9_2_MMC3_DAT2,

      GPIO10_2_MMC3_DAT3,

      GPIO103_MMC3_CLK,

      GPIO105_MMC3_CMD,

      };

  2,wifi模块本身的初始化;

#defineMFP_WIFI_V18_ENABLE    (GPIO26_GPIO)

#defineMFP_WLAN_RESETN                 (GPIO99_GPIO)

#defineWIFI_WAKEUP_HOST         (GPIO104_GPIO)/*errormustbechanged*/

#defineWLAN_ENABLE_PIN        26

#defineWLAN_RESET_PIN          99

#defineM200_B

#ifdefM200_B

#defineBT_RESET_PIN               EXT1_GPIO

(1)

#defineBT_RESET_GPIO          (GPIO1_2_GPIO)

#else

#defineBT_RESET_GPIO                 (GPIO6_2_GPIO)

#defineBT_RESET_PIN               EXT1_GPIO(6)

#endif

staticmfp_cfg_tlin2008_wifibt_pins[]={

MFP_WIFI_V18_ENABLE,

MFP_WLAN_RESETN,

WIFI_WAKEUP_HOST,/*wakeuphost*/

};

staticmfp_cfg_tlin2008_wifibt_pins2[]={

MFP_WIFI_V18_ENABLE,

};

staticintwifibt_power_status;

intlin2008_poweron_wifibt_board(void)

{

      if(!

wifibt_power_status){

             mxc_mfp_config(ARRAY_AND_SIZE(lin2008_wifibt_pins));

                             

             gpio_direction_output(WLAN_ENABLE_PIN,1);

             gpio_direction_output(WLAN_RESET_PIN,1);

               gpio_direction_output(BT_RESET_PIN,1);

             mdelay(10);

               gpio_direction_output(BT_RESET_PIN,0);

               gpio_direction_output(WLAN_RESET_PIN,0);

      //btneed>5mstoreset

               mdelay(5);

               gpio_direction_output(BT_RESET_PIN,1);

               gpio_direction_output(WLAN_RESET_PIN,1);

             wifibt_power_status++;

             return0;

      }

      wifibt_power_status++;

      return1;

}

intlin2008_poweroff_wifibt_board(void)

{

      wifibt_power_status--;

      if(!

wifibt_power_status){

             mxc_mfp_config(ARRAY_AND_SIZE(lin2008_wifibt_pins2));

             gpio_direction_output(WLAN_ENABLE_PIN,0);

             return0;

      }

      return1;

}

3,以太网接口的创建

      这里在android平台上要做特殊的处理,也就是firmware的位置要放好,否则加载firmware始终不成功,那么以太网接口就不会被创建了;

      需要把helper_sd.bin放在/lib/firmware/mrvl下面(若没有,则创建一个);

      把sd8686.bin放在/lib/firmware/mrvl下面(同上);

4,特殊的处理

      对于8686模块需要做特殊的处理,在注册完以太网接口以后,需要添加下面这段话:

      {

    #defineBCA_CFG_NUM_OF_MODES         4

    #defineBCA_CFG_SINGLE_ANT_WITH_COEX     0

    #defineBCA_CFG_DUAL_ANT_WITH_COEX   1

    #defineBCA_CFG_SINGLE_ANT_FOR_BT_ONLY   2

    #defineBCA_CFG_MRVL_DEFAULT         3

    #defineBCA_CONFIGBCA_CFG_SINGLE_ANT_WITH_COEX

    staticu32BCACfgTbl[BCA_CFG_NUM_OF_MODES][3]={

      //0xA5F0,    0xA58C,0xA5A0

      {0xa027181c,0x40214,0xd24d},//Mode0:

SingleANTwithCOEXenable

      {0xa027181c,0x40211,0xd24d},//Mode1:

DualANTwithCOEXenable

      {0xa027181c,0x40222,0xd21c},//Mode2:

singleANTforBTonly

      {0xa027801d,0x18000,0xd21c},//Mode3:

Marvelldefault

    };

    

    wlan_offset_value   RegBuffer;    

    

    RegBuffer.offset=(0xA5F0);

    RegBuffer.value=BCACfgTbl[BCA_CONFIG][0];

   wlan_prepare_cmd(priv,

                    HostCmd_CMD_MAC_REG_ACCESS,

                    HostCmd_ACT_GEN_SET,

                    HostCmd_OPTION_WAITFORRSP,

                    0,&RegBuffer);

    RegBuffer.offset=(0xA58C);

    RegBuffer.value=BCACfgTbl[BCA_CONFIG][1];

    wlan_prepare_cmd(priv,

                    HostCmd_CMD_MAC_REG_ACCESS,

                    HostCmd_ACT_GEN_SET,

                    HostCmd_OPTION_WAITFORRSP,

                    0,&RegBuffer);

    RegBuffer.offset=(0xA5A0);

    RegBuffer.value=BCACfgTbl[BCA_CONFIG][2];

    wlan_prepare_cmd(priv,

                    HostCmd_CMD_MAC_REG_ACCESS,

                    HostCmd_ACT_GEN_SET,

                    HostCmd_OPTION_WAITFORRSP,

                    0,&RegBuffer);

}

基本上这样就可以工作了;

4.             其它问题

            Sdio口默认是用的3.2V这里需要修改相关的地方强制设成是1.8V,否则SDIO接口将无法工作;

             Linux平台上需要移植一些上层软件才能验证,比如iwconfig,iwlist等。

      测试步骤:

               ifconfigeth0up

             iwlisteth0scanning

             如果能扫描到AP那么证明基本已经OK了;

              iwconfigeth0

             iwlisteth0freq

              可以查看设备的相关信息,查看各项是否正常。

             现在,就可以ping通IP地址了;

5.常见问题

1,WIFI驱动注册sdio驱动的时候出错,也就是probe函数未被调用?

      需要检查sdio设备本身是否被检测到,内核是通过发送特定的命令来检测是sdio是SD卡还是mmc的,

      在mmc_rescan函数里面可以看到sdio设备的加载过程,有可能就是你的电压设置不对;

2,以太网接口一直出不来或者说firmware加载失败?

      这里需要确保firmware是否正确被加载,很可能是它找不到对应的firmware,可以通过添加打印信息看看,它的路径到底是在什么地方,对于wifi来说helper_sd.bin需要放在/lib/firmware/下面,而sd8686.bin需要放在/lib/firmware/mrvl下面;

3,一切正常,但是调用iwlisteth0scanning的时候,扫描不到任何结果,出现NOscanresults?

      这时候需要做特殊的处理,比如共存代码的设置,是否正常等,通常可以判断有没有中断上来,以此区分到底是模块和cpu的连接问题还是模块本身的设置问题;

4,工作一段时间后不正常

      这个有可能是蓝牙模块需要进行初始化,因为它们是共用天线,有时候不起蓝牙模块对应的40M时钟就不起来;

本人参照:

此博客而移植成功的。

在此感谢wylhistory!

linux--嵌入式linux下wifi无线网卡驱动

插入模块驱动

[root@WEIYANwifi]$insmodzd1211rw.ko

usb1-1:

resetfullspeedUSBdeviceusings3c2410-ohciandaddress3

zd1211rw1-1:

1.0:

phy2

usbcore:

registerednewinterfacedriverzd1211rw

打开无线网卡

[root@WEIYANwifi]$ifconfigwlan0up

zd1211rw1-1:

1.0:

firmwareversion4725

zd1211rw1-1:

1.0:

zd1211bchip0ace:

1215v4810full00-1d-0fUW2453_RFpa0-7---

扫描频道

[root@WEIYANwifi]$./wftools/iwlistwlan0scanning

wlan0    Scancompleted:

         Cell01-Address:

00:

0E:

4E:

81:

02:

4D

                   ESSID:

"WEIYAN"

                   Mode:

Master

                   Channel:

6

                   Frequency:

2.437GHz(Channel6)

                   Quality=11/100 Signallevel=62/100 

                   Encryptionkey:

off

                   BitRates:

1Mb/s;2Mb/s;5.5Mb/s;11Mb/s

                   Extra:

tsf=00000000004c3c37

设置essid和无线网卡ip地址,并关闭原来的dm9000

[root@WEIYANwifi]$./wftools/iwconfigwlan0essidWEIYAN

[root@WEIYANwifi]$./wftools/iwconfigwlan0192.168.1.100

[root@WEIYANwifi]$ifconfigeth0down

测试与路由的连通性

[root@WEIYANwifi]$ping192.168.1.254

PING192.168.1.254(192.168.1.254):

56databytes

64bytesfrom192.168.1.254:

seq=0ttl=255time=10.997ms

64bytesfrom192.168.1.254:

seq=1ttl=255time=4.399ms

64bytesfrom192.168.1.254:

seq=2ttl=255time=3.915ms

通过无线网卡的nfs挂载测试

[root@WEIYANwifi]$mount-tnfs-onolock192.168.1.108:

/new_disk/tftp//mnt

[root@WEIYANwifi]$ls/mnt

1.mp3             g_file_storage.ko mplayer           tslib.tar.gz

2.mpg             gspca.ko          mplayer_no_v4l    u-boot.bin

3.wav             led_drv.ko        rootfs.jffs2      uImage

abxtest           madplay           rootfs.yaffs2

通过无线网卡播放mp3

[root@WEIYANwifi]$/opt/madplay/mnt/1.mp3

MPEGAudioDecoder0.15.2(beta)-Copyright(C)2000-2004RobertLeslieetal.

UDA1341:

audio_set_dsp_speed:

44100prescaler:

99

         Title:

05.ForeverLove

                192k

        Artist:

王力宏

     Orchestra:

     CoUDA1341:

audio_set_dsp_speed:

22050prescaler:

231

nductor:

      Lyricist:

         Album:

心中的日月

         Track:

05

          Year:

2004

     Publisher:

         Genre:

Pop

       Station:

       Comment:

清晰

1039framesdecoded(0:

00:

27.1),+0.8dBpeakamplitude,40clippedsamples

通过无线网卡播放视频

[root@WEIYANwifi]$/opt/mplayer/mnt/2.mpg-acmad

MPlayer1.0rc2-3.4.1(C)2000-2007MPlayerTeam

CPU:

ARM

Playing/mnt/2.mpg.

MPEG-PSfileformatdetected.

VIDEO:

 MPEG1 384x288 (aspect1) 29.970fps 1638.4kbps(204.8kbyte/s)

==========================================================================

Openingvideodecoder:

[mpegpes]MPEG1/2Videopassthrough

A:

 25.9V:

 26.1A-V:

-0.149ct:

 1.128782/78279%47%17.5%4280           

Exiting...(Endoffile)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1