Android 中SoftAP架构研究

本文深入探讨了Android中SoftAP的架构,包括NetworkManagementService、NetD、Wpa_supplicant、Dnsmasq和Hostapd等关键组件的作用。详细介绍了启动WIFI AP的流程,涉及代码包括NetworkManagementService、SoftapController和Dnsmasq的启动。此外,还提到了Lenovo K900启用Hostapd的方法和固件重载机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android中网络的整体架构如下:




NetworkmanagementService

此模块运行在SystemService中,负责Java层的实现机制,提供对上层的一些运行接口,当然,上层是通过一些抽象类实现进程间通讯进行访问的。


NetD

此模块是C++的Daemon,负责底层部分对于一些关键网络服务的管理。对上面Java服务提供接口,采用进程间通讯的方式。


Wpa_supplicant

此模块是提供WIFI支持的模块,不做详细描述了。在Android中是一个关键的底层服务。


Dnsmasq

此服务实现了DHCP Server,用于辅助Hostapd,实现IP的管理。


Hosted

此服务实现了WIFI AP的关键服务,直接控制底层设备,此服务正常运行后,其他终端可以搜索到AP,并连接。


以下是启动WIFI AP 的流程:



以下是代码说明:


NetworkManagementService

base/wifi/java/android/net/wifi/WifiStateMachine.java

private void startSoftApWithConfig(final WifiConfiguration config)


frameworks/base/services/java/com/android/server/NetworkManagementService.java // 网路管理服务

startAccessPoint {...}

wifiFirmwareReload(wlanIface, "AP");

mConnector.execute("softap", "set", wlanIface);

mConnector.execute("softap", "startap");


system/netd/CommandListener.cpp // 通讯用得CommandListener

CommandListener::SoftapCmd::runCommand



NetD 服务

system/netd/SoftapController.cpp 

SoftapController::startSoftap()

static const char HOSTAPD_CONF_FILE[]    = "/data/misc/wifi/hostapd.conf";

#define WIFI_ENTROPY_FILE "/data/misc/wifi/entropy.bin"
ensure_entropy_file_exists();  // 检查需要加密文件是否存在
        if (execl("/system/bin/hostapd", "/system/bin/hostapd",  //启动Hostapd
                  "-e", WIFI_ENTROPY_FILE,

                  HOSTAPD_CONF_FILE, (char *) NULL)) {
            ALOGE("execl failed (%s)", strerror(errno));

}

SoftapController::stopSoftap // 停止Hostapd

kill(mPid, SIGTERM);  // 结束Hostapd
waitpid(mPid, NULL, 0) // 等待结束返回

system/netd/TetherController.cpp  // DHCP daemon 管理

startTethering() {

...

"system/bin/dnsmasq"  // 启动Dnsmasq后台进程

...

}

启动Hostapd

SoftapController::startSoftap()

static const char HOSTAPD_CONF_FILE[]    = "/data/misc/wifi/hostapd.conf";

#define WIFI_ENTROPY_FILE "/data/misc/wifi/entropy.bin"
ensure_entropy_file_exists();  // 检查需要加密文件是否存在
        if (execl("/system/bin/hostapd", "/system/bin/hostapd",  //启动Hostapd
                  "-e", WIFI_ENTROPY_FILE,

                  HOSTAPD_CONF_FILE, (char *) NULL)) {
            ALOGE("execl failed (%s)", strerror(errno));

}

SoftapController::stopSoftap // 停止Hostapd

kill(mPid, SIGTERM);  // 结束Hostapd
waitpid(mPid, NULL, 0) // 等待结束返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值