クアルコムは10無線LANアーキテクチャをアンドロイド

AndroidのO / P無線LANアーキテクチャ:

前記メイン論理制御フレームアンドロイドO及びPwifiフレームコードは、ほとんど変化します。アーキテクチャは、図層状構造のコードを提供し、全体のより低い無線LANを理解することができ

 

WiFiのSetings:

コードパス:パッケージ/アプリケーション/設定/ SRC / COM /アンドロイド/設定/無線LAN

ファイルの一部

このパスは、携帯電話の設定アプリのコードと操作に関連した無線LANの設定は、無線LANの操作は、ここでのコードから実行されています。

例えば:WIFIオープン:wifisettingsから - > WifiEnabler - >フレームワーク

 

APP ---フレームワーク通信---> AIDL

通信層AIDLにアプリケーションフレームワーク

例えば:WifiManager - > WifiService

 

                            

 IWifiManger.aidlによって生成されたIWifiManager、IWifiManager.Stub、IWifiManager.Stub.Proxy

WifiManager:アプリのためのインタフェースシステムを提供します。

Context.getSystemService(Context.WIFI_SERVICE)実際のオブジェクト・タイプはIWifiManager.Stub.Proxy返されます

IWifiManager.Stub.Proxyの例:アプリエンドプロキシ、パーセルWifiManager配列メソッドのパラメータ、system_serverバインダープロセスを

 

WiFiのフレームワーク

コードパス:

フレームワーク/ベース/無線LAN / javaの/アンドロイド/ネット/ wifiFrameworks /ベース/無線LAN / javaの/アンドロイド/ネット/無線LAN無線LAN相关的包

          WifiInfo.java

          WifiScanner.java

           IWifiManager.aidl--aidl文件会自动生成相关的java代码,用于binder通信

           WifiManager.java  

           ......

Frameworks/opt/net/wifi/service/java/com/android/server/wifi/   wifi相关的服务

           WifiService.java

           WifiController.java

            WifiServiceImpl.java

            WifiNative.java

            ClientModeImpl.java

             ......

   Wifi_Framework----wifistateMachine

      wifi状态机是framework控制wifi的核心,对wifi的状态的改动都要经过一个或者几个状态机,最后下发指令到HAL层。


HIDL and HAL

从frameworks层到HAl层,之间必须通过一种通信机制才可以让代码流程从java到C/C++

早起版本通过jni:

java声明native方法->javah -jni命令导出JNI的.h头文件->实现native方法->编译本地代码为*.so的库文件。(native依赖于so库)

adroid Q -> HIDL

HIDL:文件路径:hardware/interfaces/wifi/1.3/

wifi_chip

wifi_mode_controller

wifi_legacy_hal

HIDL的功能就是为了java可以直接调用到c/c++,wifi的framework层动用的Iwifi的类,Iwifi.hal文件定义了未实现的接口。

对应目录下的Android.bp :

filegroup-"[email protected]_hal":包含了该目录下所有的hal文件

genrule-"[email protected]_genc++":使用上面的filegroup作为src编译出对应的cpp文件

genrule-"[email protected]_genc++_headers":使用上面的filegroup作为src编译出对应的.h文件

HAL

hal层主要是运行在用户空间对supplicant等一些工具接口的统一封装,以便HIDL通信调用

文件路径:

frameworks/opt/net/wifi/libwifi_hal/

主要文件3个:

driver_tool .cpp 

hal_tool.cpp

 wifi_hal_commom.cpp

 

wpa_supplicant

路径:external/wpa_supplecant_8/

该项目内包含两个互相相关的开源项目wpa_supplicant和hostapd,它们将会生成两个可执行文件:wpa_supplicant和hostapd,分别为STA模式和AP模式时的守护进程。

除此之外,还会生成用于测试的wpa_cli,hostapd_cli,以及WIFI HAL依赖的wpa_client.so,具体可以到Android.mk中找到

wpa_supplicant通过NETLINK socket与内核通信。

wpa_supplicant项目支持多种驱动编程接口,在Android上使用的是nl80211;

nl80211是新的802.11netlink接口公共头,与cfg80211一同组成了Wireless-Extensions的替代方案。

cfg80211是Linux 802.11配置API, nl80211用于配置cfg80211设备,同时用于内核到用户空间的通信。

 

wireless module(in kernel)

代码位于:

kernel/net/wireless

nl80211.c 中的 nl80211_init 使用genl_register_family_with_ops 注册了响应应用程序的struct genl_ops nl80211_ops[], 该数组定义了响应NETLINK消息的函数。

nl80211_init 在 cfg80211_init 内被调用,cfg80211_init是被subsys_initcall注册的子系统初始化程序,被编译为cfg80211.ko。

 

wlan driver

代码位于:

vendor/qcom/opensource/wlan/prima

模块初始化(module_init),模块退出(module_exit):
CORE/HDD/src/wlan_hdd_main.c

 

发布了2 篇原创文章 · 获赞 0 · 访问量 6419

おすすめ

転載: blog.csdn.net/qq_39040377/article/details/104497354