- 博客(97)
- 资源 (3)
- 收藏
- 关注

原创 深入解读Docker底层技术cgroup系列(总览)
日期 内核版本 CPU架构 作者 2019.04.06 Linux-4.4 PowerPC LoneHugo 系列文章文章 概要 深入解读Docker底层技术cgroup系列(1)——cgroup介绍 介绍cgroup的基本概念以及cgroup与其他模块之间的关系 深入解读Docker底层技术cgroup系列(2)——cgroup...
2019-04-07 15:40:56
871

原创 深入解读Linux内存管理系列(总览)
日期 内核版本 CPU架构 作者 2019.04.06 Linux-4.4 PowerPC LoneHugo 系列文章文章 概要 深入解读Linux内存管理系列(1)——系统启动阶段的操作 系统启动阶段需要完成的工作以及内存状态 深入解读Linux内存管理系列(2)——内存节点的添加 识别并添加物理内存,初始...
2019-04-06 15:19:32
2800

原创 深入解读Linux进程调度系列(总览)
日期 内核版本 CPU架构 作者 2019.04.06 Linux-4.4 PowerPC LoneHugo 系列文章文章 概要 深入解读Linux进程调度系列(1)——调度的初始化 调度的初始化过程,包括调度与其他模块的关系解读 深入解读Linux进程调度系列(2)——调度类sched_class详解 调度...
2019-04-06 14:22:49
2663
原创 slab 地址空间
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码
2021-07-06 22:18:12
331
原创 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
1987
原创 Android WiFi 扫描并选择网络进行连接
在 WifiConfigManager 中通过createNewInternalWifiConfigurationFromExternal 创建新的 WifiConfiguration 配置项,并且创建合法的 networkId 信息,通过 mNextNetworkId 参数递增的方式对新创建的 Network 赋值 Id; 创建过程发生在addOrUpdateNetworkInternal 接口中,进行网络的添加,其中传入的 config 为空或者是新的 config 信息,networkId 为 ..
2021-04-25 12:10:56
2450
2
原创 NetworkManagementService 解读
在前面文章介绍了其自身定义的接口功能提供给客户端:https://blog.youkuaiyun.com/Vince_/article/details/115203280在与底层 netd 通信过程中实际上采用了NetdUnsolicitedEventListener 内部类定义的接口进行,它自身作为服务端,netd 作为客户端对该功能进行引用调用。NetdUnsolicitedEventListener 的 定义在 NetworkManagementService.java 中,不过其继承实现了接口类IN..
2021-03-27 10:49:47
1013
原创 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
3155
原创 Android 网络管理
一、相关服务的启动1. Netd 中创建 NETD_SERVICE 服务注册到 binder 中,在 framework 层直接获取对应的引用对象实例:在NetworkManagementService 中类初始化采用 create 接口,其中新建对象,调用了 connectNativeNetdService 初始化了INetd 对象 mNetdService ,其实调用了内部类SystemServices 的 getNetd 方法,进而调用了 NetdService 类的 get 方法,最...
2021-03-24 20:10:13
1440
原创 Linux 进程间通信-IPC 机制
Linux 平台上在 Kernel 协调下完成进程之间的相互通信,有多种进程间通信 —— Inter Process Communication(IPC)方式。1. IPC 分类按照功能用途来看有三种基本的进程间通信类型,分别用户信息交换(Communication),同步(Synchronization)和信号(Signal)。另外,在基本的 IPC 通信机制之上还存在更为复杂和广泛应用的进程间通信机制,通常提供了丰富和更高层次的封装以便于应用开发,比如 Android 平台采用的 Binder
2021-02-25 21:16:19
1658
原创 2021-02-24
Android Programming Cookbook,151,https://enos.itcollege.ee/~jpoial/allalaadimised/reading/Android-Programming-Cookbook.pdfAndroid Toturial, 51,https://www.tutorialspoint.com/android/android_tutorial.pdfLearning Android Studio(Build Android Apps Qui...
2021-02-24 12:01:24
203
原创 Android 网络代理的创建
ConnectivityService管理网络连接的服务层,其中维护了 NetworkAgent 对象列表,每种网络连接都会创建对应的 Agent 用于管理;NetworkAgent 其实是通过 AsyncChannel 与 ConnectivityService 之间通信的ConnectivityService:handleRegisterNetworkProvider 中参数为 NetworkProviderInfo,其中包含 Messenger 成员,通过其 AsyncChannel 的
2021-02-05 17:35:41
1079
原创 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
1158
1
原创 通过 ioctl 配置接口的 IP 地址
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <arpa/inet.h>#include <linux/if.h>#include <linux/if_ether.h>#include <linux/if_arp.h>#inc.
2021-02-04 18:27:45
783
原创 Android WiFi 获取 IP 过程
FdEventsReader 类在其 start 接口中调用了 createAndRegisterFd(),调用了 createFd 接口创建了 mFd 对象,并将对应的对象通过 MessageQueue() 的addOnFileDescriptorEventListener 方法加入到监听队列中;其中要求 Subclasses 必须实现createFd 接口并且重载 handlePacket 方法;PacketReader 类继承FdEventsReader 类它作为抽象类需要子类作...
2021-01-28 16:28:58
1437
1
原创 WifiConfiguration 的各字段的填充和修改
新建在 WifiConnectivityManager 处理消息进行 handleScanResults 操作的过程中,会通过 ScoredNetworkNominator 进行 nominateNetworks 操作,从中调用 ScanResultUtil::createNetworkFromScanResult 方法创建新的 WifiConfiguration 对象,并且对其进行必要的初始化ScanResultUtil::setAllowedKeyManagementFromScanResult
2021-01-26 23:02:34
1033
原创 WifiConfigManager NetworkSelector 和 WifiConnectivityManager
WifiConnectivityManager 管理连接在其收到底层传递的扫描结果消息时,在 handleScanResults 中处理,里面调用了如下主要步骤:用到了 NetworkSelector 类对象进行处理,getCandidatesFromScan,以 ScanDetail 对象列表为输入获取到 WifiCandidates.Candidate 对象列表; 用到了 NetworkSelector 类对象进行处理,SelectNetwork,以前面的 WifiCandidates.Can
2021-01-22 16:19:40
2135
原创 wpa_supplicant 中 ISupplicant 服务代理客户端对象获取
在setupInterfaceForClientInConnectivityMode 中执行 startSupplicant 启动 Supplicant 服务,获取到服务端的信息调用了startAndWaitForSupplicantConnection 接口,其中进而调用了 SupplicantStaIfaceHal::initialize 接口,这里面包含了两层初始化以及初始化状态判断的过程:IServiceManager 的初始化,用于管理整个 HIDL 层面的 Service 的服务端口..
2021-01-20 11:23:12
678
原创 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
1204
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
955
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
1127
原创 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
2828
转载 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
790
转载 Android 网络评分机制
在前两节简单介绍了连接管理的大致框架,数据链接的准备工作,包括APN的初始化与默认APN使能,DcTracker的构造,包括各种事件的注册等工作。但是数据链接的打开不止是只有用户主动去打开,Android可以提供数据业务的对象主要有,移动数据网络、WIFI、蓝牙、网线等,这些连接本身都可以独立使用,但是对于用户来说,每一时刻又最多只能使用一种方式接入网络,那么当这些功能同时打开时,比如即使用户打开了移动数据连接,但是又打开了wifi,那么只要wifi畅通,移动数据链接是不会用于上网的,那究竟如何选择最佳的接
2020-12-25 14:31:29
1582
原创 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
1941
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
1854
原创 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
2825
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
1676
原创 WiFi 配置设置
用户配置界面的消息机制1. 用户界面入口在 WifiSettings.java,为 WifiSettings 类,其内部的 onActivityCreated 方法中调用了 WifiTrackerFactory 类的 create 接口创建了 WifiTracker 对象赋值给 mWifiTracker 成员,其中传入的 WifiTracker.Listener 内部类对象为 WifiSettings 类对象自身: @Override public void onActivityCr
2020-12-10 18:06:39
1863
原创 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
1938
原创 WiFi 接口创建过程
接口创建wifi_chip.cpp 中handleChipConfiguration 接口调用了 legacy_hal 的 start 接口进行 legacy_hal 的启动操作被configureChipInternal 调用,回溯而被configureChip 调用,进而是被 Framework 层 HalDeviceManager.java 中的executeChipReconfiguration 调用进行每个 chip 的配置操作;同样回溯而被HalDeviceManager 的...
2020-12-02 18:10:35
931
原创 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
2061
原创 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
1653
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
1464
原创 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
2145
原创 Linux调度新特性EAS
Energy Aware Scheduling(EAS)EAS赋予调度器新的功能,使其能预测其调度决策(Task Placement)于CPU的能量消耗带来的影响,即Energy Aware。它依赖于CPU能量模型(Energy Model),以此来实现在确保性能影响最小的情况下为每个任务选择能量最优的CPU的调度决策。该特性主要由Linaro和ARM共同开发,在Linux Kernel 5.0版本正式发布。事实上EAS的开发过程经过了漫长的讨论和版本变迁,每个阶段的功能实现首先发生在Android
2020-07-26 16:42:26
2862
原创 Inter Process Communication(IPC) Message Router
http://rst.ninjs.org/?===============================================Inter Process Communication(IPC) Message Router===============================================Introduction============Inter...
2020-04-02 23:47:05
658
原创 ARM架构SMMU驱动详解
驱动定义:static struct platform_driver arm_smmu_driver = { .driver = { .name = "arm-smmu-v3", .of_match_table = arm_smmu_of_match, .suppress_bind_attrs = true, }, .probe = arm_smmu_device_p...
2020-03-21 18:16:39
3393
原创 ARM平台AMBA总线uart驱动和console初始化
1. 函数调用路径首先看到uart驱动probe的过程:[ 0.675729] Serial: AMBA PL011 UART driver[ 0.735090] 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 39, base_baud = 0) is a PL011 rev1[ 0.736770] [VUART_D...
2020-03-04 21:21:53
4314
5
mqtt-v3.1.1
2018-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人