Xilinx社区
首页 > 技术专栏 > 骁龙820A车载系统Wifi无线介绍
骁龙820A车载系统Wifi无线介绍
来源:专区技术支持专家 时间:2017-10-17

    骁龙820A不但提供可扩展的信息娱乐,图形和多媒体平台。而且通过Wifi等无线接入方式,使得车内具备独立的网络,手机、PAD等设备可以轻松接入到车载网络,实现灵活、保密的可靠连接。

  Wi-Fi状态机的连接状态和控制状态

  在应用层mWifiStateMachine 这个实例代表着一个Wifi状态机,它定义了wifi的很多状态,通过消息驱动状态的转变。而wifiThread 是一个HandlerThread 的实例,HandlerThread 是一个内部有Looper的线程,wifiThread会一直监听消息,消息到来以后,通过mClientHandler 的handleMessage来处理消息。WifiStateMachineHandler 主要作用是发送和处理wifi状态机相关的消息。

  mWifiController 是另一个状态机,是用户控制信息状态,比如wifi设备的开关状态,wifi热点的开关状态等。而mWifiStateMachine 表述wifi连接过程中的具体状态,比如supplicant启动/关闭状态,driver启动/关闭状态等。

  SystemServer中启动的Wifi相关的服务有四个,从上往下依次是P2P wifi服务,普通wifi,wifi扫描附近热点的服务以及以太网服务。

  Wifi主要过程介绍

  首先从setWifiEnabled开始,wifi是一个WifiServiceImpl的客户端,它会通过binder和WifiServiceImpl的实例交互,也就是在WifiService中通过addService方法向系统注册的mImpl对象。

  WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

  wifi.setWifiEnabled(true);

  这个方法首先要使用mSettingsStore.handleWifiToggled(enable)来判断wifi状态是否可以切换,不能切换就直接返回。如果wifi状态可以切换,那么接下来会使用mWifiController.sendMessage(CMD_WIFI_TOGGLED);来给mWifiController状态佳发送一条消息,mWifiController状态机控制wifi设备的开关灯状态。

  当需要扫描附近的热点AP时,如果wifi状态机正处于开启状态,那么上层的操作会导致wifi状态机接收到一个消息,开启的状态对它处理后,发现需要把wifi状态机切换到scan状态,于是开启状态的exit方法被调用,scan状态的enter方法被调用。切换不应该只是wifi状态机状态的切换,这个过程应该会调用底层的代码真正的把wifi的状态切换到对应的状态。切换过去以后wpa_supplicant会返回响应的事件,这又会导致响应的消息被wifi状态机接受,从而又促使wifi状态机状态的切换。

  WAPI-PSK协议连接过程分析

  下面我们通过具体的log来分析连接过程。

  08-23 02:03:54.711 3210 3268 D WifiAutoJoinController : updateConfigurationHistory add a choice "wapi-psk"WAPI_PSK over "TP-LINK_5G_943A17"NONE choice 60

  08-23 02:03:54.711 3210 3268 D WifiAutoJoinController : updateConfigurationHistory add a choice "wapi-psk"WAPI_PSK over "wapi-open"NONE choice 60

  08-23 02:03:54.711 3210 3268 D WifiAutoJoinController : updateConfigurationHistory add a choice "wapi-psk"WAPI_PSK over "wapi-psk"WPA_PSK choice 60

  08-23 02:03:54.711 3210 3268 E WifiConfigStore: rewrite network history for "wapi-psk"WAPI_PSK

  08-23 02:03:54.713 3287 3287 D wpa_supplicant: wlan0: Control interface command 'ENABLE_NETWORK 9'

  08-23 02:03:54.714 3287 3287 D wpa_supplicant: wlan0: Control interface command 'SET_NETWORK [REMOVED]'

  08-23 02:03:54.715 3210 3268 E WifiConfigStore: found sortedWifiConfigurations : "wapi_psk"WAPI_PSK

  08-23 02:03:54.716 3210 3268 E WifiConfigStore: found sortedWifiConfigurations : "wapi-psk"WAPI_PSK

  通过这段log信息从中可以看出在PONLIST中添加新的wapi_psk 无线网,此过程调用可以从frameworks/opt/net/wifi/service/java/com/android/server/wifi/wificonfigstore.java 中体现。

  boolean selectNetwork(WifiConfiguration config, boolean updatePriorities, int uid)→>private void buildPnoList()

  →>mCachedPnoList.add(network)。

  证明可以正常识别wapi_psk server

  08-23 02:03:54.716 3210 3268 E WifiConfigStore: found sortedWifiConfigurations : "wapi-psk"WAPI_PSK

  08-23 02:03:54.716 3287 3287 D wpa_supplicant: wlan0: Control interface command 'SET HS20 0'

  08-23 02:03:54.716 3287 3287 D wpa_supplicant: wlan0: Control interface command 'SAVE_CONFIG'

  08-23 02:03:54.726 3287 3287 D wpa_supplicant: wlan0: Control interface command 'SELECT_NETWORK 9'

  08-23 02:03:54.726 3287 3287 D wpa_supplicant: wlan0: State: DISCONNECTED -> DISCONNECTED

  wpa_supplicant 通过控制命令配置和保存wpa_psk相关信息,并通过SELECT_NETWORK 9,选择wpa_psk网络进行链接。

  Hardware/intel/wlan/hostap_wcs/rel/wpa_supplicant/ctrl.iface.c

  char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,char *buf, size_t *resp_len)

  wpa_psk MAC层的的鉴定(AUTHENTICATING)

  08-23 02:03:54.728 3287 3287 D wpa_supplicant: wlan0: State: DISCONNECTED -> AUTHENTICATING

  08-23 02:03:54.757 3287 3287 D wpa_supplicant: wlan0: Control interface command 'RECONNECT'

  08-23 02:03:54.759 3287 3287 D wpa_supplicant: wlan0: Control interface command 'SET pno 0'

  08-23 02:03:54.784 6582 6887 D ap : SECURITY_WAPI_PSK

  08-23 02:03:54.784 6582 6887 D ap : SECURITY_WAPI_PSK

  08-23 02:03:54.784 6582 6887 D ap : SECURITY_WAPI_PSK

  08-23 02:03:54.784 6582 6887 D ap : SECURITY_WAPI_PSK

  08-23 02:03:54.839 3287 3287 D wpa_supplicant: wlan0: State: AUTHENTICATING -> ASSOCIATING

  当Authentication认证成功后,进入ASSOCIATING状态,最终进入ASSOCIATED。此后就进入密钥交换过程,这个过程和WPA-PSK的四次握手交换密钥过程类似。过程如下

  08-23 02:03:54.885 3287 3287 I wpa_supplicant: WAPI: ASUE Rx - invalid src addr, dropping...

  08-23 02:03:54.890 3287 3287 D wpa_supplicant: wlan0: State: ASSOCIATING -> ASSOCIATED

  08-23 02:03:54.891 3287 3287 D wpa_supplicant: WAPI_ASUE: WAPI_ASUE entering state AUTHENTICATION

  08-23 02:03:54.891 3287 3287 D wpa_supplicant: WAPI_ASUE: WAPI_ASUE entering state INITPSK

  08-23 02:03:55.885 3287 3287 D wpa_supplicant: WAPI: ASUE Rx - WAI_STYPE_USK_NEGOTIATION_REQ packet

  08-23 02:03:55.891 3287 3287 D wpa_supplicant: WAPI_ASUE: WAPI_ASUE entering state USKNEGOTIATING

  08-23 02:03:55.919 3287 3287 D wpa_supplicant: WAPI: ASUE Rx - WAI_STYPE_USK_NEGOTIATION_CONF packet

  08-23 02:03:55.919 3287 3287 D wpa_supplicant: WAPI_ASUE: WAPI_ASUE entering state USKDONE

  08-23 02:03:55.975 3287 3287 D wpa_supplicant: WAPI_ASUE: WAPI_ASUE entering state IDLE

  08-23 02:03:55.975 3287 3287 D wpa_supplicant: WAPI: ASUE Rx - WAI_STYPE_MSK_ANNOUNCEMENT packet

  08-23 02:03:55.975 3287 3287 D wpa_supplicant: WAPI_ASUE: WAPI_ASUE entering state MSKDONE

  这个是后已经获得了USK单播密钥和MSK组播密钥。

  08-23 02:03:56.052 3287 3287 D wpa_supplicant: wlan0: State: ASSOCIATED -> COMPLETED

  密钥交互完成后则进入COMPLETED状态,MAC层可以正常连接。前面的所以过程与WPA、WAPI-OPEN对比 ,过程基本正常。

  DHCP过程

  1.发现阶段,即DHCP客户机寻找DHCP服务器的阶段(DhcpClient: Broadcasting DHCPDISCOVER)

  2、提供阶段,即DHCP服务器提供IP地址的阶段。(DhcpClient: Received packet: 00:c2:c6:d8:e3:75 OFFER, ip /192.168.0.109)

  3、选择阶段,即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。(DhcpClient: Broadcasting DHCPREQUEST ciaddr=0.0.0.0 request=192.168.0.109 serverid=192.168.0.1)

  4、 确认阶段,即DHCP服务器确认所提供的IP地址的阶段(DhcpClient: Received packet: 00:c2:c6:d8:e3:75 ACK: your new IP )

  WAPI连接常见问题分析

  1、获取的IP数据包被刷掉,导致DHCPclient无法获取有效数据包。

  2、从服务器获取不到IP包,如果在可以正常获取IP包,在wifinative.java中或过滤得到的IP数据包(正常情况下可以得到下面一段log)。

  08-20 21:12:42.279 3306 3306 D wpa_supplicant: wlan0: Control interface command 'DRIVER RXFILTER-STOP'

  08-20 21:12:42.280 3306 3306 D wpa_supplicant: wlan0: Control interface command 'DRIVER RXFILTER-REMOVE 2'

  08-20 21:12:42.281 3306 3306 D wpa_supplicant: wlan0: Control interface command 'DRIVER RXFILTER-START'

  总结

  骁龙820A的车载应用中Wi-Fi作用巨大,由此可以衍生更加多样和便捷的通信应用,甚至视频和多媒体在线应用也将成为主流。

  Qualcomm汽车技术讨论组 QQ群号:566131670

more汽车电子市场动态
more技术专栏
more专家答疑
问:配置高通pmd9607的mpp管脚, 设置为模拟输入一直量不到电压,请教。
答:需要注意,MPP管脚并不是所有MPP管脚都可以配置的,请参考spec说明,你需要配置的pin有没有限制。通常模拟输入的话,还要配置ANA_IN_CTL等寄存器,需要外接模拟量,然后读取该pin的值的寄存器中HKADC值。
问:专家请指导: sensor厂家给的sensor相关资料(chromatix + lib)是支持前置摄像头的,“支持”主要是我这边验证过前置已经点亮。 后置摄像也用同sensor, 但用这套相关资料就点不亮了。 kernel层确认已经PROBE, 同时在/dev下有media0 media1,请协助该如何完成后置的点亮. p.s: 1. 该板后置如果使用其他sensor,可以点亮前后置摄像头; 2. 将后置摄像头拆卸, 可点亮前置, 不拆卸后置,同样可以点亮前置; 3. 如果前置后置一样, 前后置都点不亮, 但kernel层确认都probe, dev下有camera0,camera1,camera2; 4. 拆卸前置,仅后置, 依然无法点亮, kernel已经probe,dev下有camera0,camera1 针对前后置同sensor, 在sensor_init.c增加2sensor, 分别命名为: sensor, sensor_rear,同时在sensor_Libs目录下增加sensor,sensor_rear目录,主要是针对lib部分, 同时对lib中camera_id和position做对应修改(前:CAMERA_1,1,后: CAMERA_0,0) 写的太多, 一句话说明下问题: 前后置同sensor如何同时点亮前后置sensor, 是否需要修改lib中的参数,如何修改?还是其他问题?
答:从现象描述看,可以从以下几点排查。 1,sensor的配置,通常后置sensor 4lanes,而前置sensor 2lanes。换不同型号的sensor可以点亮,说明这些配置可能没有修改 导致一些问题。 2,重点看下,“拆卸前置,仅后置, 依然无法点亮,dev下有camera0,camera1,”,对比下前后置不同型号 枚举dev也是这样,看看HAL层dumpimage检查图像是否正常。 3,camera id枚举冲突,无法区分两颗相同的sensor,tuning参数调用是否正确。
问:请教专家,UE 链路层怎么样才能主动和NODE B断开。 设备和基站没有OTA log,也不太清楚是什么原因导致的连接断开。
答:可以通过AT命令CREG可以离线和在线网络。不知道是否是您需要的情况。 http://blog.chinaunix.net/uid-149881-id-2780145.html
问:有没有懂高通平台root 和解网络锁的高手?
答:eng和userdebug版本上通过adb root。你是否需要如下的方法么, https://zhidao.baidu.com/question/557640730.html
Copyright ©2000-2015 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备12027778号-2 北京市公安局备案:1101082052