您的位置:首页 > 其它

关于Realtek RTL8188EU wifi移植要知道的

2014-07-30 16:59 239 查看
    目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。

    wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。请浏览wpa_supplicant网站获得它所支持的驱动列表。

    另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络,它可以让您连接到那些使用WPA的AP。wireless-tools支持几乎所有的无线网卡和驱动,

    但它不能连接到那些只支持WPA的AP。

 1. wireless tools工具安装

    (1)tar zxvf wireless_tools.30.rtl.tar.gz 

    (2)cp wireless_tools.30.rtl <ANDROID_SDK>/external/ 

    (3)cd <ANDROID_SDK> 

    (4)make iwconfig iwlist iwpriv 将生成的iwconfig、iwlist、iwpriv push到开发板/system/bin中

 2. wpa_supplicant工具的交叉编译

    一般的Linux版本里面包含wpa_supplicant和wpa_cli.

    wpa_supplicant是一个开源项目,已经被移植到Linux,Windows以及很多嵌入式系统上。它是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。

    wpa_supplicant是一个独立运行的守护进程,其核心是一个消息循环,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。

    经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant 和 wpa_cli。

    wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用 wpa_cli来搜索、设置、和连接网络。

    Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,它是一个安全中间件,代码位于external/wpa_supplicant,

    为各种无线网卡提供统一的安全机制,wpa_supplicant是通过socket与hardware/libhardware_legacy/wifi/wifi.c通信 

    Wpa_supplicant作用:1、读取配置文件 2、初始化配置参数,驱动函数 3、让驱动scan当前所有的bssid 4、检查扫描的参数是否和用户设置的想否 5、如果相符,通知驱动进行权限 认证操作 6、连上AP

    在init.amber3.rc里执行:wpa_supplicant /system/bin/wpa_supplicant -Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf  -B    //后台运行

    其中/system/bin/wpa_supplicant :是 wpa_supplicant可执行程序的path;

 3.load wifi driver    

    首先需要讲解一下,在android4.0之后,wifi的工作方式基本都采用的是比较标准的nl80211方式,以前的wext方式现在使用的已经很少了。

    wext:supplicant通过wext直接给wifi driver下命令,即不通过kernel,所以一般以wext工作的driver是不需要load cfg80211.ko的,这个cfg80211.ko就是kernel里面的wireless部分,主要对接supplicant和driver的。

    nl80211:supplicant的命令以nl80211的方式下给kernel,经过kernel再发送给driver,这样子做的好处是supplicant和driver之间的通讯方式更加标准话,是以后的主流方式,我后面讲的driver都是以这种方式工作的。
    既然是nl80211,那么首先需要build kernel,得到cfg80211.ko,然后用build过的kernel来build driver,得到具体的driver ko,这里面为了区分具体型号的ko,我把名字假设为8188eu.ko。

    拿到两个ko之后load driver的准备工作就做完了,现在把两个ko copy到平台的/system/lib/modules/路径下,这个是android ko的存放路径。

4.本人在调试wifi中遇到的一些问题

     (1)  完全依据Realtek给出的用户手册中进行移植时,会出现错误,原因是没有加载cfg80211.ko,这是因为手册中用wifi_realtek.c文件但是这里面加载wifi只是加载了8818eu.ko,没有加载cfg80211.ko,其次用户手册中也未提及/rtl8188eu文件夹下要根据自己的系统更改Makefile的一些参数。

    (2) 后来没有使用wifi_realtek.c文件而是使用了wifi.c文件,按照官方文档中提供的方法配置相关参数即顺利调通。

    (3) 开始调试出现wifi打开两分钟后就自动关闭,wifi打开时,用lsmod可以看到8188eu.ko被加载,当WiFi断开后查看lsmod就自动卸载,于是怀疑可能是驱动加载的问题。又检查一遍参数设置,发现一些错误以后,重新烧写后发现wifi这次直接打不开,查看打印一直提示insmod 失败,后来直接让驱动内部的insmod直接返回0,进行手动加载,但是直接手动加载也是提示init_module失败,后来就试着先加载cfg80211.ko,接着再加载8188eu.ko,wifi就正常运行。于是直接在init.amber3.rc中加载两者即可,但是有时关闭wifi后打不开wifi,后来才研究了下wifi.c
发现wifi.c里面函数自动加载了这两项,才调试ok! 

    下面是部分命令调试wifi:

      # ifconfig wlan0 up

      # busybox ifconfig 

        iwconfig

        cat /proc/net/dev

     1. wpa_supplicant -Dnl80211 -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf -B

     2. wpa_cli -p /wlan0  scan

     3. wpa_cli -p /wlan0  remove_network 0

     4. wpa_cli -p  /wlan0 ap_scan 1

     

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: