java wifi模块源码_Wifi模块

本文详细分析了在Android系统中,从应用层到Java框架层,如何启动WiFi模块。重点探讨了`WifiNative.java`类中的`setupInterfaceForClientMode()`方法,涉及启动Hal、Supplicant,以及HIDL相关的调用流程。通过HIDL进入硬件抽象层HAL,接着介绍WPA适配层和wpa_supplicant在WiFi驱动加载中的作用,最后提到了Linux内核中的WiFi驱动程序。
摘要由CSDN通过智能技术生成

一 前言

在上一篇分析了wifi启动的流程,从Android应用层一直分析到了Java框架层,这次我们接着往下走流程。如果没有看上一篇的建议先回头看看   Wifi模块—源码分析Wifi启动1(Android P)这样能更好地认知和把握wifi的启动过程。

二 图示调用流程

这个调用流程图也是基于上一篇的流程图进一步完善的得到的。

200827749_1_20200831043908349

三 代码具体流程

1 应用层

2 java 框架层

前面部分直接看 Wifi模块—源码分析Wifi启动1(Android P),这一层也不标注明确的节点数值,因为这一层的前面调用流程部分并未全部加到这里。所以直接去看前面一篇会更清晰。

我们直接从WifiNative.java这个类开始看。

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNative.java

/**

* Setup an interface for Client mode operations.

*

* * This method configures an interface in STA mode in all the native daemons

* (wificond, wpa_supplicant & vendor HAL).

*

* @param lowPrioritySta The requested STA has a low request priority (lower probability of

* getting created, higher probability of getting destroyed).

* @param interfaceCallback Associated callback for notifying status changes for the iface.

* @return Returns the name of the allocated interface, will be null on failure.

*/

public String setupInterfaceForClientMode(boolean lowPrioritySta,

@NonNull InterfaceCallback interfaceCallback) {

synchronized (mLock) {

if (!startHal()) {

Log.e(TAG, "Failed to start Hal");

mWifiMetrics.incrementNumSetupClientInterfaceFailureDueToHal();

return null;

}

if (!startSupplicant()) {

Log.e(TAG, "Failed to start supplicant");

mWifiMetrics.incrementNumSetupClientInterfaceFailureDueToSupplicant();

return null;

}

Iface iface = mIfaceMgr.allocateIface(Iface.IFACE_TYPE_STA);

if (iface == null) {

Log.e(TAG, "Failed to allocate new STA iface");

return null;

}

iface.externalListener = interfaceCallback;

iface.name = createStaIface(iface, lowPrioritySta);

if (TextUtils.isEmpty(iface.name)) {

Log.e(TAG, "Failed to create STA iface in vendor HAL");

mIfaceMgr.removeIface(iface.id);

mWifiMetrics.incrementNumSetupClientInterfaceFailureDueToHal();

return null;

}

if (mWificondControl.setupInterfaceForClientMode(iface.name) == null) {

Log.e(TAG, "Failed to setup iface in wificond on " + iface);

teardownInterface(iface.name);

mWifiMetrics.incrementNumSetupClientInterfaceFailureDueToWificond();

return null;

}

if (!mSupplicantStaIfaceHal.setupIface(iface.name)) {

Log.e(TAG, "Failed to setup iface in supplicant on " + iface);

teardownInterface(iface.name);

mWifiMetrics.incrementNumSetupClientInterfaceFailureDueToSupplicant();

return null;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值