关于Realtek RTL8188EU wifi移植要知道的

来源:互联网 发布:java调用数组方法 编辑:程序博客网 时间:2024/06/06 06:44

    目前可以使用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
     
     
0 0
原创粉丝点击