收藏 分销(赏)

WiFi驱动移植到Linux.docx

上传人:pc****0 文档编号:7203646 上传时间:2024-12-27 格式:DOCX 页数:10 大小:21.06KB 下载积分:10 金币
下载 相关 举报
WiFi驱动移植到Linux.docx_第1页
第1页 / 共10页
WiFi驱动移植到Linux.docx_第2页
第2页 / 共10页


点击查看更多>>
资源描述
linux下移植之WIFI驱动 2010-05-14 22: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 口进行配置 ;        static mfp_cfg_t littleton_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 模块本身的初始化 ; #define MFP_WIFI_V18_ENABLE     (GPIO26_GPIO) #define MFP_WLAN_RESETN                  (GPIO99_GPIO) #define WIFI_WAKEUP_HOST          (GPIO104_GPIO) /*error must be changed*/ #define WLAN_ENABLE_PIN          26 #define WLAN_RESET_PIN            99 #define M200_B #ifdef M200_B #define BT_RESET_PIN                 EXT1_GPIO(1) #define BT_RESET_GPIO           (GPIO1_2_GPIO) #else #define BT_RESET_GPIO                  (GPIO6_2_GPIO) #define BT_RESET_PIN                 EXT1_GPIO(6) #endif static mfp_cfg_t lin2008_wifibt_pins[] = { MFP_WIFI_V18_ENABLE, MFP_WLAN_RESETN, WIFI_WAKEUP_HOST,/*wakeup host*/ }; static mfp_cfg_t lin2008_wifibt_pins2[] = { MFP_WIFI_V18_ENABLE, }; static int wifibt_power_status; int lin2008_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);        // bt need > 5 ms to reset                   mdelay(5);                   gpio_direction_output(BT_RESET_PIN, 1);                   gpio_direction_output(WLAN_RESET_PIN, 1);               wifibt_power_status++;               return 0;        }        wifibt_power_status++;        return 1; } int lin2008_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);               return 0;        }        return 1; } 3, 以太网接口的创建        这里在 android 平台上要做特殊的处理,也就是 firmware 的位置要放好,否则加载 firmware 始终不成功,那么以太网接口就不会被创建了;        需要把 helper_sd.bin 放在 /lib/firmware/mrvl 下面(若没有,则创建一个);        把 sd8686.bin 放在 /lib/firmware/mrvl 下面(同上); 4, 特殊的处理        对于 8686 模块需要做特殊的处理,在注册完以太网接口以后,需要添加下面这段话 :        {      #define BCA_CFG_NUM_OF_MODES          4      #define BCA_CFG_SINGLE_ANT_WITH_COEX      0      #define BCA_CFG_DUAL_ANT_WITH_COEX    1      #define BCA_CFG_SINGLE_ANT_FOR_BT_ONLY    2      #define BCA_CFG_MRVL_DEFAULT          3      #define BCA_CONFIG BCA_CFG_SINGLE_ANT_WITH_COEX      static u32 BCACfgTbl[BCA_CFG_NUM_OF_MODES][3] = {        //0xA5F0,     0xA58C, 0xA5A0        { 0xa027181c, 0x40214, 0xd24d}, //Mode 0: Single ANT with COEX enable        { 0xa027181c, 0x40211, 0xd24d}, //Mode 1: Dual ANT with COEX enable        { 0xa027181c, 0x40222, 0xd21c}, //Mode 2: single ANT for BT only        { 0xa027801d, 0x18000, 0xd21c}, //Mode 3: Marvell default      };           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 等。        测试步骤:                 ifconfig eth0 up               iwlist eth0 scanning               如果能扫描到 AP 那么证明基本已经 OK 了;                iwconfig eth0               iwlist eth0 freq                可以查看设备的相关信息,查看各项是否正常。               现在,就可以 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, 一切正常,但是调用 iwlist eth0 scanning 的时候,扫描不到任何结果,出现NO scan results?        这时候需要做特殊的处理,比如共存代码的设置,是否正常等,通常可以判断有没有中断上来,以此区分到底是模块和 cpu 的连接问题还是模块本身的设置问题; 4, 工作一段时间后不正常        这个有可能是蓝牙模块需要进行初始化,因为它们是共用天线,有时候不起蓝牙模块对应的 40M 时钟就不起来; 本人参照: 此博客而移植成功的。 在此感谢wylhistory! linux -- 嵌入式linux下wifi无线网卡驱动 插入模块驱动 [root@WEIYAN wifi]$ insmod zd1211rw.ko usb 1-1: reset full speed USB device using s3c2410-ohci and address 3 zd1211rw 1-1:1.0: phy2 usbcore: registered new interface driver zd1211rw 打开无线网卡 [root@WEIYAN wifi]$ ifconfig wlan0 up zd1211rw 1-1:1.0: firmware version 4725 zd1211rw 1-1:1.0: zd1211b chip 0ace:1215 v4810 full 00-1d-0f UW2453_RF pa0 -7--- 扫描频道 [root@WEIYAN wifi]$ ./wftools/iwlist wlan0 scanning wlan0     Scan completed :           Cell 01 - Address: 00:0E:4E:81:02:4D                     ESSID:"WEIYAN"                     Mode:Master                     Channel:6                     Frequency:2.437 GHz (Channel 6)                     Quality=11/100  Signal level=62/100                      Encryption key:off                     Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s                     Extra:tsf=00000000004c3c37 设置essid和无线网卡ip地址,并关闭原来的dm9000 [root@WEIYAN wifi]$ ./wftools/iwconfig wlan0 essid WEIYAN [root@WEIYAN wifi]$ ./wftools/iwconfig wlan0 192.168.1.100 [root@WEIYAN wifi]$ ifconfig eth0 down 测试与路由的连通性 [root@WEIYAN wifi]$ ping 192.168.1.254 PING 192.168.1.254 (192.168.1.254): 56 data bytes 64 bytes from 192.168.1.254: seq=0 ttl=255 time=10.997 ms 64 bytes from 192.168.1.254: seq=1 ttl=255 time=4.399 ms 64 bytes from 192.168.1.254: seq=2 ttl=255 time=3.915 ms 通过无线网卡的nfs挂载测试 [root@WEIYAN wifi]$ mount -t nfs -o nolock 192.168.1.108:/new_disk/tftp/ /mnt [root@WEIYAN wifi]$ 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@WEIYAN wifi]$ /opt/madplay /mnt/1.mp3 MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al. UDA1341:audio_set_dsp_speed:44100 prescaler:99           Title: 05.Forever Love                  192k          Artist: 王力宏       Orchestra:       CoUDA1341:audio_set_dsp_speed:22050 prescaler:231 nductor:        Lyricist:           Album: 心中的日月           Track: 05            Year: 2004       Publisher:           Genre: Pop         Station:         Comment: 清晰 1039 frames decoded (0:00:27.1), +0.8 dB peak amplitude, 40 clipped samples 通过无线网卡播放视频 [root@WEIYAN wifi]$ /opt/mplayer /mnt/2.mpg -ac mad MPlayer 1.0rc2-3.4.1 (C) 2000-2007 MPlayer Team CPU: ARM Playing /mnt/2.mpg. MPEG-PS file format detected. VIDEO:  MPEG1  384x288  (aspect 1)  29.970 fps  1638.4 kbps (204.8 kbyte/s) ========================================================================== Opening video decoder: [mpegpes] MPEG 1/2 Video passthrough A:  25.9 V:  26.1 A-V: -0.149 ct:  1.128 782/782 79% 47% 17.5% 428 0            Exiting... (End of file)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服