![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 78
LoneHugo
寻寻觅觅,暮然回首~
展开
-
Android WiFi Dhcp 获取到 IP 和配置的过程
在 ConnectivityService 中负责配置,由updateLinkProperties 来完成: private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties newLp, LinkProperties oldLp) { int netId = networkAgent.network.netId; // The Network.原创 2021-04-28 16:01:32 · 1670 阅读 · 0 评论 -
Android WiFi 扫描并选择网络进行连接
在 WifiConfigManager 中通过createNewInternalWifiConfigurationFromExternal 创建新的 WifiConfiguration 配置项,并且创建合法的 networkId 信息,通过 mNextNetworkId 参数递增的方式对新创建的 Network 赋值 Id; 创建过程发生在addOrUpdateNetworkInternal 接口中,进行网络的添加,其中传入的 config 为空或者是新的 config 信息,networkId 为 ..原创 2021-04-25 12:10:56 · 2290 阅读 · 2 评论 -
NetworkManagementService 解读
在前面文章介绍了其自身定义的接口功能提供给客户端:https://blog.csdn.net/Vince_/article/details/115203280在与底层 netd 通信过程中实际上采用了NetdUnsolicitedEventListener 内部类定义的接口进行,它自身作为服务端,netd 作为客户端对该功能进行引用调用。NetdUnsolicitedEventListener 的 定义在 NetworkManagementService.java 中,不过其继承实现了接口类IN..原创 2021-03-27 10:49:47 · 890 阅读 · 0 评论 -
Android 网络服务类提供的服务接口
1.NetworkManagementService继承了INetworkManagementService.Stub,因此提供对应的 AIDL 定义的服务:在 frameworks/base/core/java/android/os/INetworkManagementService.aidl 中定义interface INetworkManagementService{ /* Register and unregister an observer to receive ev...原创 2021-03-25 14:28:09 · 3015 阅读 · 0 评论 -
Android 网络管理
一、相关服务的启动1. Netd 中创建 NETD_SERVICE 服务注册到 binder 中,在 framework 层直接获取对应的引用对象实例:在NetworkManagementService 中类初始化采用 create 接口,其中新建对象,调用了 connectNativeNetdService 初始化了INetd 对象 mNetdService ,其实调用了内部类SystemServices 的 getNetd 方法,进而调用了 NetdService 类的 get 方法,最...原创 2021-03-24 20:10:13 · 1296 阅读 · 0 评论 -
Linux 进程间通信-IPC 机制
Linux 平台上在 Kernel 协调下完成进程之间的相互通信,有多种进程间通信 —— Inter Process Communication(IPC)方式。1. IPC 分类按照功能用途来看有三种基本的进程间通信类型,分别用户信息交换(Communication),同步(Synchronization)和信号(Signal)。另外,在基本的 IPC 通信机制之上还存在更为复杂和广泛应用的进程间通信机制,通常提供了丰富和更高层次的封装以便于应用开发,比如 Android 平台采用的 Binder原创 2021-02-25 21:16:19 · 1403 阅读 · 0 评论 -
Android 网络代理的创建
ConnectivityService管理网络连接的服务层,其中维护了 NetworkAgent 对象列表,每种网络连接都会创建对应的 Agent 用于管理;NetworkAgent 其实是通过 AsyncChannel 与 ConnectivityService 之间通信的ConnectivityService:handleRegisterNetworkProvider 中参数为 NetworkProviderInfo,其中包含 Messenger 成员,通过其 AsyncChannel 的原创 2021-02-05 17:35:41 · 978 阅读 · 0 评论 -
netd 中 Route 配置过程
0xc0a82b1f 192.168.43.31RouteController.cppmodifyIpRoute// Adds or deletes an IPv4 or IPv6 route.// Returns 0 on success or negative errno on failure.int modifyIpRoute(uint16_t action, uint16_t flags, uint32_t table, const char* interface, ...原创 2021-02-05 11:09:50 · 1045 阅读 · 1 评论 -
Android WiFi 获取 IP 过程
FdEventsReader 类在其 start 接口中调用了 createAndRegisterFd(),调用了 createFd 接口创建了 mFd 对象,并将对应的对象通过 MessageQueue() 的addOnFileDescriptorEventListener 方法加入到监听队列中;其中要求 Subclasses 必须实现createFd 接口并且重载 handlePacket 方法;PacketReader 类继承FdEventsReader 类它作为抽象类需要子类作...原创 2021-01-28 16:28:58 · 1191 阅读 · 0 评论 -
WifiConfiguration 的各字段的填充和修改
新建在 WifiConnectivityManager 处理消息进行 handleScanResults 操作的过程中,会通过 ScoredNetworkNominator 进行 nominateNetworks 操作,从中调用 ScanResultUtil::createNetworkFromScanResult 方法创建新的 WifiConfiguration 对象,并且对其进行必要的初始化ScanResultUtil::setAllowedKeyManagementFromScanResult原创 2021-01-26 23:02:34 · 890 阅读 · 0 评论 -
wpa_supplicant 中 ISupplicant 服务代理客户端对象获取
在setupInterfaceForClientInConnectivityMode 中执行 startSupplicant 启动 Supplicant 服务,获取到服务端的信息调用了startAndWaitForSupplicantConnection 接口,其中进而调用了 SupplicantStaIfaceHal::initialize 接口,这里面包含了两层初始化以及初始化状态判断的过程:IServiceManager 的初始化,用于管理整个 HIDL 层面的 Service 的服务端口..原创 2021-01-20 11:23:12 · 586 阅读 · 0 评论 -
FwmarkServer 实现以及功能分析
创建还是在 main 函数中:int main() { ... FwmarkServer fwmarkServer(&gCtls->netCtrl, &gCtls->eventReporter, &gCtls->trafficCtrl); if (fwmarkServer.startListener()) { ALOGE("Unable to start FwmarkServer (%s)", strerror(e原创 2021-01-07 14:36:15 · 1057 阅读 · 1 评论 -
Netd 中 NetworkManager 分析
NetlinkManager 管理 netd 中 NetlinkHandler 的初始化并启动监听和处理;NetlinkHandler 处理和转发 Kernel 的相应事件;SocketListener 监听 socket,启动监听并接收 socket 事件;SocketClient 实际的消息处理者,他将 event 通过 socket 发送给 java 层进行处理;NativeDaemonConnector java 层的 socket 通讯端,用于接收和下发事件;NetworkMa原创 2021-01-06 21:05:00 · 838 阅读 · 2 评论 -
Netd 服务的 netd 套接字创建
在上一篇分析android_get_control_socket 获取 UNIX 域套接字 FD中留下一个问题:netd UNIX 域套接字何时创建的呢?现在来分析这个问题。前面分析了在 netd 中是通过 android_get_control_socket 接口查询到对应的 UNIX 域套接字的 fd,而实际上netd 后台服务进程的同名套接字 “netd” 的创建是在 Framework 层的 NetworkManagementService 部分,以后简称 NMS,关于 NMS 的详细内容后..原创 2020-12-29 12:17:09 · 1022 阅读 · 0 评论 -
android_get_control_socket 获取 UNIX 域套接字 FD
Androidgetcontrolsocket/hardware/ril/libril/ril.cpp下有如下代码:s_fdListen = android_get_control_socket(SOCKET_NAME_RIL);if (s_fdListen < 0) { LOGE("Failed to get socket '" SOCKET_NAME_RIL "'"); exit(-1);}if (listen(s_fdListen, 4)) { e...原创 2020-12-25 18:30:33 · 2571 阅读 · 0 评论 -
Android.mk 语法详解
Android.mk文件语法详解Android.mk简介Android.mk文件用来告知NDK Build系统关于Source的信息。Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程中定义。Android.mk文件语法允许我们将Source打包成一个"modules",modules可以是:静态库 动态库只有动态库可以被install/copy到应用转载 2020-12-25 14:39:33 · 723 阅读 · 0 评论 -
Android 网络评分机制
在前两节简单介绍了连接管理的大致框架,数据链接的准备工作,包括APN的初始化与默认APN使能,DcTracker的构造,包括各种事件的注册等工作。但是数据链接的打开不止是只有用户主动去打开,Android可以提供数据业务的对象主要有,移动数据网络、WIFI、蓝牙、网线等,这些连接本身都可以独立使用,但是对于用户来说,每一时刻又最多只能使用一种方式接入网络,那么当这些功能同时打开时,比如即使用户打开了移动数据连接,但是又打开了wifi,那么只要wifi畅通,移动数据链接是不会用于上网的,那究竟如何选择最佳的接转载 2020-12-25 14:31:29 · 1305 阅读 · 0 评论 -
WiFi 连接到网络的过程
在WifiConnectivityManager 中收到扫描结果进行处理,选择相应的网络进行连接,发生在 connectToNetwork 接口中: /** * Attempt to connect to a network candidate. * * Based on the currently connected network, this menthod determines whether we should * connect or roam.原创 2020-12-24 20:10:03 · 1757 阅读 · 1 评论 -
WifiConnectivityManager 管理扫描
通过 WifiScanner.java 中 WifiScanner 类的 registerScanListener 方法注册 Scan 结果的回调监听句柄,实际上内部通过 AsyncChannel 向 WifiScanningService 层发送了CMD_REGISTER_SCAN_LISTENER 消息: /** * Register a listener that will receive results from all single scans. * Either.原创 2020-12-24 15:43:51 · 1355 阅读 · 0 评论 -
Android 高通 Wi-Fi 驱动
nl80211_copy.h 来自wpa_supplicant-2.6/src/drivers/nl80211_copy.h,在高通无线驱动中hardware/qcom/qcwcn/wifi_hal 里面被引用,高通无线驱动位于安卓根目录下的hardware/qcom/wlan/qcwcn 路径下,而 wpa_supplicant 位于 external/wpa_supplicant_8 中android/hardware/qcom/wlan 目录树结构:├── cld80211-lib└──...原创 2020-12-23 21:05:52 · 2470 阅读 · 1 评论 -
WiFi 连接过程
1. 在 WifiNative 类中 connectNetwork 被调用用于连接,其主要工作为停止当前扫描过程,删除 wpa_supplicant 中的网络配置信息,并将新的配置传送给 wpa_supplicant 保存,这会触发对已有配置网络的 disconnect 操作,最后触发 reconnect 操作到 wpa_supplicant: /** * Add the provided network configuration to wpa_supplicant and init原创 2020-12-11 17:53:59 · 1535 阅读 · 0 评论 -
WiFi 配置设置
用户配置界面的消息机制1. 用户界面入口在 WifiSettings.java,为 WifiSettings 类,其内部的 onActivityCreated 方法中调用了 WifiTrackerFactory 类的 create 接口创建了 WifiTracker 对象赋值给 mWifiTracker 成员,其中传入的 WifiTracker.Listener 内部类对象为 WifiSettings 类对象自身: @Override public void onActivityCr原创 2020-12-10 18:06:39 · 1618 阅读 · 0 评论 -
WiFi 扫描结果的通知过程
套接字初始化和报文收取1. netlink_manager.cpp 中 NetlinkManager 类的 start 函数中通过 WatchSocket 将 async_netlink_fd_ 绑定到 netlink 套接字打开,并通过 SubscribeToEvents 订阅对应的广播事件(NL80211_MULTICAST_GROUP_REG 和 NL80211_MULTICAST_GROUP_SCAN),从而该套接字可以收到 SCAN 的广播报文;2. 套接字的处理函数ReceivePac.原创 2020-12-08 14:48:49 · 1741 阅读 · 0 评论 -
WiFi 接口创建过程
接口创建wifi_chip.cpp 中handleChipConfiguration 接口调用了 legacy_hal 的 start 接口进行 legacy_hal 的启动操作被configureChipInternal 调用,回溯而被configureChip 调用,进而是被 Framework 层 HalDeviceManager.java 中的executeChipReconfiguration 调用进行每个 chip 的配置操作;同样回溯而被HalDeviceManager 的...原创 2020-12-02 18:10:35 · 787 阅读 · 0 评论 -
WiFi 扫描处理过程
从 WifiServiceImpl.java 中进行上层的服务请求,进行扫描: /** * See {@link android.net.wifi.WifiManager#startScan} * * @param packageName Package name of the app that requests wifi scan. * @param featureId The feature in the package */ @Ov原创 2020-11-20 17:52:44 · 1865 阅读 · 0 评论 -
WiFi Interface 的 name 如何获取到
直接计算在 wifi_chip.cpp 中std::string getWlanIfaceName(unsigned idx) { if (idx >= kMaxWlanIfaces) { CHECK(false) << "Requested interface beyond wlan" << kMaxWlanIfaces; return {}; } std::array<char, PROPERTY_VAL原创 2020-11-19 13:00:44 · 1479 阅读 · 1 评论 -
WiFi HAL 启动
驱动的 HAL 层 HIDL 服务注册在hardware/interfaces/wifi/1.4/default/service.cpp 的 main 函数中,其对应的IWifi 方法定义在下面文件:hardware/interfaces/wifi/1.2/IWifi.halhardware/interfaces/wifi/1.3/IWifi.halhardware/interfaces/wifi/1.4/IWifi.halhardware/interfaces/wifi/1.0/IWifi.h.原创 2020-11-12 22:12:14 · 1156 阅读 · 0 评论 -
Wifi Enable 启动过程
Wi-Fi Service 启动过程实现系统启动过程:【知乎】[Boot]Android系统启动-SystemServer下篇Wi-Fi Enable 设置过程从WifiSettings类开始,声明如下:public class WifiSettings extends RestrictedSettingsFragment implements Indexable, WifiTracker.WifiListener, AccessPointListener, WifiDialog..原创 2020-10-24 18:01:17 · 2003 阅读 · 0 评论