`
huangqinqin
  • 浏览: 365630 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

009-Android平台开发-WIFI function porting-WIFI功能移植

    博客分类:
  • WiFi
阅读更多

一、WIFI的基本架构
    1、wifi用户空间的程序和库:
         external/wpa_supplicant/
       生成库libwpaclient.so和守护进程wpa_supplicant。
    2、hardware/libhardware_legary/wifi/是wifi管理库。
    3、JNI部分:
         frameworks/base/core/jni/android_net_wifi_Wifi.cpp
    4、JAVA部分:
         frameworks/base/services/java/com/android/server/
         frameworks/base/wifi/java/android/net/wifi/
    5、WIFI Settings应用程序位于:
       packages/apps/Settings/src/com/android/settings/wifi/

二、WIFI在Android中如何工作

   Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,代码位于
   external/wpa_supplicant。wpa_supplicant是通过socket与
   hardware/libhardware_legacy/wifi/wifi.c通信。UI通过android.net.wifi package
   (frameworks/base/wifi/java/android/net/wifi/)发送命令给wifi.c。
   相应的JNI实现位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp。
   更高一级的网络管理位于frameworks/base/core/java/android/net。
 
三、配置Android支持WIFI

   在BoardConfig.mk中添加:
      BOARD_HAVE_WIFI := true
      BOARD_WPA_SUPPLICANT_DRIVER := WEXT
 
   这将在external/wpa_supplicant/Android.mk设置WPA_BUILD_SUPPLICANT为true,
   默认使用驱动driver_wext.c。
   如果使用定制的wpa_supplicant驱动(例如 madwifi),可以设置:
       BOARD_WPA_SUPPLICANT_DRIVER := MADWIFI
 
四、使能wpa_supplicant调试信息

   默认wpa_supplicant设置为MSG_INFO,为了输出更多信息,可修改:
   1、在common.c中设置wpa_debug_level = MSG_DEBUG;
   2、在common.c中把#define wpa_printf宏中的
      if ((level) >= MSG_INFO)
      改为
      if ((level) >= MSG_DEBUG)

五、配置wpa_supplicant.conf
 
   wpa_supplicant是通过wpa_supplicant.conf中的ctrl_interface=来指定控制socket的,应该在
   AndroidBoard.mk中配置好复制到$(TARGET_OUT_ETC)/wifi(也就是
   /system/etc/wifi/wpa_supplicant.conf)
   这个位置会在init.rc中再次检测的。
   一般的wpa_supplicant.conf配置为:
      ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi
      update_config=1
      fast_reauth=1 
   有时,驱动需要增加:
      ap_scan=1
   如果遇到AP连接问题,需要修改ap_scan=0来让驱动连接,代替wpa_supplicant。
 
   如果要连接到non-WPA or open wireless networks,要增加:
      network={
              key_mgmt=NONE
      }

六、配置路径和权限

   Google修改的wpa_supplicant要运行在wifi用户和组下的。代码可见wpa_supplicant/os_unix.c
   中的os_program_init()函数。
 
   如果配置不对,会出现下面错误:
      E/WifiHW  (  ): Unable to open connection to supplicant on
      "/data/system/wpa_supplicant/wlan0": No such file or directory will appear.

   确认init.rc中有如下配置:
       mkdir /system/etc/wifi 0770 wifi wifi
       chmod 0770 /system/etc/wifi
       chmod 0660 /system/etc/wifi/wpa_supplicant.conf
       chown wifi wifi /system/etc/wifi/wpa_supplicant.conf
       # wpa_supplicant socket
       mkdir /data/system/wpa_supplicant 0771 wifi wifi
       chmod 0771 /data/system/wpa_supplicant
       #wpa_supplicant control socket for android wifi.c
       mkdir /data/misc/wifi 0770 wifi wifi
       mkdir /data/misc/wifi/sockets 0770 wifi wifi
       chmod 0770 /data/misc/wifi
       chmod 0660 /data/misc/wifi/wpa_supplicant.conf

   如果系统的/system目录为只读,那应该使用路径/data/misc/wifi/wpa_supplicant.conf。
 
七、运行wpa_supplicant和dhcpcd
 
   在init.rc中确保有如下语句:
      service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant -dd
                   -Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf
         user root
         group wifi inet
      socket wpa_wlan0 dgram 660 wifi wifi
         oneshot
      service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d -B wlan0
         disabled
         oneshot

   根据所用的WIFI驱动名字,修改wlan0为自己驱动的名字。
  
七、编译WIFI驱动为module或kernel built in

   1、编译为module
      在BoardConfig.mk中添加:
         WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/ar6000.ko"
         WIFI_DRIVER_MODULE_ARG := ""  #for example nohwcrypt
         WIFI_DRIVER_MODULE_NAME := "ar6000"  #for example wlan0
         WIFI_FIRMWARE_LOADER := ""        
 
   2、编译为kernel built in 
     1)在hardware/libhardware_legacy/wifi/wifi.c要修改interface名字,
     2)在init.rc中添加:
        setprop wifi.interface "wlan0"
     3)在hardware/libhardware_legacy/wifi/wifi.c中当insmod/rmmod时,
        直接return 0。

八、WIFI需要的firmware

   Android不使用标准的hotplug binary,WIFI需要的firmware要复制到/etc/firmware。
 
   或者复制到WIFI驱动指定的位置,然后WIFI驱动会自动加载。

九、修改WIFI驱动适合Android

   Google修改的wpa_supplicant要求SIOCSIWPRIV ioctl发送命令到驱动,及接收信息,例如signal
   strength, mac address of the AP, link speed等。所以要正确实现WIFI驱动,需要从
   SIOCSIWPRIV ioctl返回RSSI (signal strength)和MACADDR信息。

   如果没实现这个ioctl,会出现如下错误:
     E/wpa_supplicant(  ): wpa_driver_priv_driver_cmd failed
                               wpa_driver_priv_driver_cmd RSSI len = 4096
     E/wpa_supplicant(  ): wpa_driver_priv_driver_cmd failed
     D/wpa_supplicant(  ): wpa_driver_priv_driver_cmd LINKSPEED len = 4096
     E/wpa_supplicant(  ): wpa_driver_priv_driver_cmd failed
     I/wpa_supplicant(  ): CTRL-EVENT-DRIVER-STATE HANGED
  
十、设置dhcpcd.conf
 
   一般/system/etc/dhcpcd/dhcpcd.conf的配置为:
      interface wlan0
      option subnet_mask, routers, domain_name_servers

转载至:http://blog.chinaunix.net/space.php?uid=24605155&do=blog&cuid=2339509
分享到:
评论
1 楼 ergodic09 2012-07-02  
請問樓主 我目前在porting AR6003
但是無法自己產生 bdata.SD31.bin 檔
有在網路上抓人家porting好的 但insmod後回傳 -110
可以請問需要setting哪些地方才能產生檔案
不好意思打擾了

相关推荐

    android13 wifi 移植文档

    在Android 13操作系统中移植Wi-Fi功能是一项复杂而关键的任务,涉及到多个组件和步骤。本文档将详细阐述如何进行这一过程,并提供有关NXP无线芯片组的特定信息。NXP是一家知名的半导体制造商,其产品广泛应用于Wi-Fi...

    Android--开发--_Porting台湾 移植与研究实行.rar

    在Android开发过程中,"移植"通常指的是将操作系统、应用程序或者特定功能从一个设备或环境迁移到另一个设备或环境。在本资源"Android--开发--_Porting台湾 移植与研究实行.rar"中,我们可以推测它包含的是关于如何...

    porting-android-x86.rar_android_android x86_android 移植

    综上所述,"porting-android-x86.rar"文件提供的"happy-porting-x86-application-to-android.ppt"很可能是一个关于如何将Android应用程序移植到x86平台的教程或演讲稿。这个过程涉及到多方面的技术知识和实践,包括...

    Android Wifi Driver Porting

    标题与描述概述的知识点主要涉及Android系统中Wi-Fi驱动的移植过程,这在移动设备开发领域是一项关键技能,尤其对于那些希望优化或自定义设备Wi-Fi功能的开发者来说至关重要。以下是对这一知识点的深入解析: ### ...

    android_wifi_porting_eng.doc

    本文档将引导您逐步了解如何在定制版Android系统中添加新的WiFi驱动并确保WiFi功能正常运行。此文档最初是为Android 2.1版本编写的,但其中的概念和技术同样适用于之前的Android版本,并且对于未来的版本也有一定的...

    Android-Porting移植与研究实行.zip

    Android_Porting移植与研究实行.zip Android_Porting移植与研究实行.zip Android_Porting移植与研究实行.zip Android_Porting移植与研究实行.zip Android_Porting移植与研究实行.zip Android_Porting移植与研究实行....

    Embedded Android - Porting, Extending and Customizing

    综上所述,《嵌入式Android - Porting, Extending and Customizing》这本书不仅深入浅出地讲解了如何将Android系统移植到各种嵌入式设备上,还提供了大量的实践案例和实用技巧,对于希望在这个领域有所作为的专业...

    iTOP4412-SDIO WiFi移植文档.pdf

    近期需要把 WiFi 无线网络功能移植到 iTOP-4412 开发平台,查阅了相关资料,经过 一段时间的研究、调试,终于成功的将 WiFi 功能移植到了开发板上面,这里笔者记录移植过 程及注意事项,方便以后工作需要。 iTOP-4412...

    Android_Porting台湾 移植与研究实行.zip

    1. **Android系统移植**:Android系统的移植是指将开源的Android代码修改和调整,使其能够运行在特定的硬件平台上,如台湾市场中的设备。这包括驱动程序的适配、硬件接口的对接以及性能调优等。 2. **硬件兼容性**...

    Android-Porting-on-Embedded-Platform.rar_android_android porting

    总的来说,"Android-Porting-on-Embedded-Platform"涵盖了Android在嵌入式平台移植的全貌,包括硬件驱动开发、内核移植、系统编译、UI适配以及测试调试等多个层面的知识。无论是对硬件工程师还是软件开发者,深入...

    Android平台的U-blox芯片GPS驱动3.40.zip

    总的来说,这个压缩包提供的内容对于在Android平台上开发使用U-blox MAX-8芯片的GPS应用的开发者来说是非常有价值的。通过更新驱动程序,可以提升定位性能,增强北斗等卫星系统的支持,并通过源代码实现更深度的定制...

    android-os-porting-r3

    ### Android OS Porting知识点概述 #### 一、移植策略与框架 - **移植三层面**:作者提到的移植主要包括三个层面:产品分支的创建与维护、架构层面的移植以及驱动程序的开发。 - **产品分支**:创建一个新的产品...

    Android-Porting台湾 移植与研究实行.zip

    Android系统是基于Linux内核的开放源代码平台,移植主要涉及硬件驱动、HAL(硬件抽象层)、系统服务和用户界面等部分。在台湾,开发者们需要针对本地的硬件特性,编写或修改驱动程序,确保Android系统能与设备硬件...

    moko365_android-framework-design-porting-2_2010-05-14

    总之,moko365_android-framework-design-porting-2_2010-05-14文档涉及到了Android框架设计的关键概念,包括但不限于APIs的使用、系统服务的调用、硬件抽象层的交互,以及跨平台移植的策略和技术。对于当时的...

    farsight 华清 wifi移植 Android

    farsight 华清 wifi移植 Android 华清远见Android毕业班 很详细的wifi 资料

    Embedded Android Porting, Extending, and Customizing 2013最新版

    - **驱动开发与调试**:针对Intel平台开发和调试驱动程序的具体方法。 - **性能优化策略**:针对Intel平台进行性能优化的最佳实践。 通过以上内容的学习,开发者不仅可以获得关于嵌入式Android系统移植、扩展和定制...

    moko365_android-framework-design-porting-2_2010-05-15

    标题和描述均提到了“moko365_android-framework-design-porting-2_2010-05-15”,这显然是一个关于Android框架设计移植的文档或项目,其日期为2010年5月15日,暗示了这份资料具有一定的历史背景,可能涉及的是早期...

Global site tag (gtag.js) - Google Analytics