自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(126)
  • 收藏
  • 关注

原创 Android network - NUD检测机制(Android 14)

在Android系统中,NUD(Neighbor Unreachable Detection)指的是网络中的邻居不可达检测机制,它用于检测设备是否能够到达特定的IP地址。当Android设备尝试与另一个设备通信时,如果发现对方不可达,它会触发NUD过程。NUD 的底层实现还是依赖kernel,Android层有服务建立通信,当kernel检测到当前网络与周边的neighbor不可达时,就会发送消息通知上层,上层处理msg。

2024-07-05 16:07:30 1050

原创 Android network — 进程指定网络发包

在android 中,一个app使用网络,需要在manifest 申请一下这种方式将使用default网络,比如WIFI 和 数据网络,android 同一个时间点,只能有一个default网络,default网络由Android 网络评分机制选择。那有没有一种方式可以不使用默认网络呢,比如某一个App只想使用WiFi或者别的某一个网络,而不受默认网络变化的影响,答案是有的。

2024-05-22 19:11:33 1366 6

原创 Android system — 链接器命名空间共享库配置方法(Android 11后)

native进程的so库是直接通过dlopen打开的,而其对应的命名空间也是直接通过linker进行判断的,并没有调用到libnativeloader.so,因此native进程的配置方式也与应用进程不同。中,我们提到了“目录-区段”映射属性dir.name,指向 [name] 区段所应用到的目录的路径,其实就是baseconfig.cc中定义的dirToSection。通过上面的代码跟踪我们会发现,其实在Android 11后,应用进程共享库的配置位置都在。中我们可以看到调用了。

2024-04-29 16:35:03 1587 3

原创 Android system — 链接器命名空间(linker namespace)源码分析

应用程序对应的可执行文件app_process会创建一个类加载器classloader并调用System.loadLibrary加载so库,最终会调用至android_dlopen_ext;而native的二进制bin文件是通过dlopen获取so库的handle,但是无论是dlopen还是android_dlopen_ext最后都是调用do_dlopen函数,所以从do_dlopen开始分析。android_namespace_link_t::is_accessible()进行权限判断。

2024-04-28 17:37:50 1240

原创 Android system — Android链接器命名空间(Android 11后)

android 7.0加入了对私有系统so库API调用的限制(因为私有系统库会在任意时刻更新,使用这些系统库的应用有可能会在更新后崩溃),android 8.0引入了project Treble实现框架与供应商解耦合(解决系统碎片化,升级慢),这都需要依赖链接器命名空间机制。这里主要关注的重点是链接器命名空间在android 7.0引入后对System.loadLibrary,dlopen和dlsym函数的限制。Android 11 又对配置方式进行了修改,不再使用静态文件进行配置。

2024-04-28 14:44:01 1039 2

原创 Android 编译错误:module xxx1 missing dependencies:xxx

比如上面编译错误,查看后发现 只有out/xxx/vendor/lib/android.hidl.base@1.0.so 而lib64下没有。根据第一步中添加依赖库查找out目录下 out/xxx/lib 已经out/xx/lib64 是否存在响应的so库。

2024-04-23 11:20:20 639

原创 Linux network — 网络层收发包流程及 Netfilter 框架浅析

本文主要对 Linux 系统内核协议栈中网络层接收,发送以及转发数据包的流程进行简要介绍,同时对 Netfilter 数据包过滤框架的基本原理以及使用方式进行简单阐述。Linux 网络协议栈是 Linux 内核中非常重要的子系统之一,虽然上层应用的开发维护工作极少涉及修改内核网络部分的工作,但了解其设计思想,基本工作原理,也可以为我们日常工作带来比较不少的帮助,特别是涉及到前后台网络交互,服务器网络性能相关的工作时。

2024-01-02 18:55:14 2401

原创 Android wifi — WiFi空口包交互过程

本文通过抓取的WiFi空口包,简要分析下WiFi的连接过程。连接三步骤探测(Probe Request、Probe Response)认证(Authentication)关联(Association Request、Association Response)如下图可见,WiFi连接过程可大致分为 探测/扫描(Probe)-> 认证(Authentication) -> 关联(Association) -> EAPOL 四个阶段。

2023-12-25 14:35:46 1120 1

原创 Android wifi — connect流程

最近发现一些settings调用wifimanager连接wifi后,没有调用到wpa_supplicant的问题,借此梳理下Android wifi连接流程。注:代码基于Android R(11) qualcomm平台。

2023-12-18 17:40:02 983

原创 Android network — iptables四表五链

我们先来看一下netfilter官网iptablesiptablesTheiptablesip6tablesip6tables也就是说iptables实际上只是位于用户空间的一个面向系统管理员的Linux防火墙的管理工具而已,而真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内核模块,iptables对应在内核中的模块应该是ip_tables,我们查看系统内核中ip_tables的信息的时候可以看到这个模块是在netfilter这个目录下的。实际上除了iptables。

2023-08-05 16:13:08 1435

原创 Linux内核基础 — initcall机制

init 或者 .initcalls 段的特点就是,当内核启动完毕后,这个段中的内存会被释放掉。对上层而言,linux内核提供xxx_init(init_func)宏定义接口,驱动开发者只需要将驱动程序的init_func使用来修饰,这个函数就被自动添加到了上述的段中,开发者完全不需要关心实现细节。不难想到另一种方式,就是集中提供一个地方,如果你要添加你的驱动初始化程序,你就将你的初始化函数在这个地方进行添加,在内核启动的时候统一扫描这个地方,再执行这一部分的所有被添加的驱动程序。

2023-07-24 17:27:56 942

原创 ubuntu20.04上linux内核开发环境搭建(qemu+gdb+vscode)

hdb:创建一个hard disk。注意,字符串hdb不是/dev/hdb(这个个IDE disk),这里的hdb启动后,是/dev/sdb(scsi disk)。1)修改buildroot-2020.02.8/package目录下的package,重新编译前,需要删除output/build/目录中对应的package,否则编译出来的rootfs.f2fs不会包含改动。First sector (32-2097151, default 32): ------------回车,默认即可。

2023-07-13 10:50:42 2275

原创 Android Input — 长按分发repeat时间间隔

Android系统中长按键部分:Linux驱动只是在起初按下时上报个down事件,在抬起后再报个up事件;其中,不会在有按键上报。对长按键的处理是在Android上层的InputDispatcher中,具体实现还未研究;如下是repeat的时间间隔设定地方。有空在对具体机制做分析。

2023-05-05 10:15:12 966 1

原创 Android network — ipv6邻居发现协议

邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。

2023-03-22 15:51:49 1055

原创 Android system实战 — Android R(11) 第三方apk权限

最近在调试时遇到了第三方apk申请运行时权限,以及signature级别 install 权限不允许赋予给第三方apk,虽然这是Android系统安全性的一种体现,但在某些情况下,确实是有需求去放开权限,使app能使用更方便,毕竟让用户允许权限在一定程度上来说并不是一件容易的事情。

2023-03-02 17:05:21 2174

原创 Android system实战 — Android R(11) 进程保活白名单

  最近在Android R上实现一些需求,进行记录一下,关于进程保活的基础知识可以参考Android system — 进程生命周期与ADJ,实际上本质上,就是在提高进程的adj等级,从而达到保活的效果,当然如果你不care原理,也可以直接看下面具体实现。  主要涉及源码路径:1.1 准备工作在源码实现之前,我们需要先准备进程白名单,并将其编译至白名单格式如下:该功能设置后,查看是否生效,可以通过查看进程的adj值来确认:例如:

2023-02-22 11:15:32 1003

原创 Android system — 进程生命周期与ADJ

必要时,系统会首先消除重要性最低的进程,然后是清除重要性稍低一级的进程,依此类推,以回收系统资源。在Android的lowmemroykiller机制中,会对于所有进程进行分类,对于每一类别的进程会有其oom_adj值的取值范围,oom_adj值越高则代表进程越不重要,在系统执行低杀操作时,会从oom_adj值越高的开始杀。本文主要介绍Android的lowmemorykiller的oom_adj的相关概念,进程的oom_adj,决定了当内存不够的时候,lmk会根据oom_adj的级别依次释放内存。

2023-02-19 15:00:08 952

原创 Android system — settings数据库

Android系统设置数据库用于保存系统的一些默认设置值,另外在开发的时候,有时候我们一些设置属性要保存到本地,防止软件卸载后配置属性消失,也可以将这些值保存到系统数据库中。

2023-02-18 21:38:34 3048 2

原创 IOzone I/O测试工具使用说明

IOzone是一个开源文件系统基准工具,用来测试文件系统的读写性能,也可以进行测试磁盘读写性能。Iozone能够运行于许多平台。这份文档涵盖Iozone所执行的许多不同类型的操作和它的所有命令行参数。

2023-01-11 17:04:38 10168 9

原创 android9.0 系统默认时间跳变

最近修改客户问题的时候发现系统默认时间和ntp网络时间之间出现了一次时间的跳变,虽然不是什么大问题,但是可以跟进了解一下。

2022-09-22 17:10:15 1309

原创 Android logd日志原理

无论是Android系统开发,还是应用开发,都离不开log,Androd上层采用logcat输出log。因此我们这次基于Android源码9.0,解读logd的日志记录过程。logcat命令说明logcat -b events // 输出指定buffer的loglogcat -s "ActivityManager" logcat -L //上次重启时的loglogcat -f [ filename ] //将log保存到指定文件logcat -g //缓冲区大小。...

2022-08-29 14:24:42 1127

原创 分析解决logcat报read: Unexpected EOF

在做android开发调试过程中,我们经常会用到logcat,通过logcat可以更直接的看出程序执行的顺序以及开发产生的日志信息,但是,今天客户遇到一个问题,logcat提示read: Unexpected EOF!异常,然后日志就不在打印了。今天我们就分析一下为什么logcat会出现read: Unexpected EOF异常,以及出现read: Unexpected EOF异常后日志无法正常输出的原因。

2022-08-23 14:00:57 1694

原创 Android init.rc启动shell脚本

最近在解决客户的一个问题的时候,帮忙调试了一个开机脚本,其中涉及了部分SELinux的权限的配置,因此记录一下,该案例基于amlogicS905L3A芯片开发,在AndroidP上进行的测试,在其他设备上大同小异,请自行查找或替换为对应的路径。注AndroidP上为了区分系统和厂商定制化内容,脚本应编译至vendor/bin下,而不是system/bin下。...

2022-07-20 19:59:51 2275

原创 PowerManagerService(一)— 初始化

  PowerManagerServcie是android系统电源管理的核心服务,它在Framework层建立起一个策略控制方案,向下决策HAL层以及kernel层来控制设备待机状态,主要功能是控制系统待机状态,屏幕显示,亮度调节,光线/距离传感器的控制等。  除了与应用程序交互之外,还要与系统中其它模块配合,在提供良好的能源管理同时提供友好的用户体验。比如听音乐时持续保持系统唤醒,应用通知来临唤醒手机屏幕等场景  分析一个服务,首先要从它对应用层提供的api 入手,观察提供了哪些接口调用;主要分为四个层次

2022-06-30 15:39:42 594 1

原创 linux内核中修改TCP MSS值

  最近在解决一些网络相关的问题的时候,我发现许多客户的需求可以不用费劲周折在代码中找到修改的位置,可以直接修改内核中一些网络相关的参数,在大部分情况下即可满足需求,减少时间和精力的消耗(俗称偷懒)。  MTU: Maxitum Transmission Unit 最大传输单元  MSS: Maxitum Segment Size 最大分段大小  MSS最大传输大小的缩写,是TCP协议里面的一个概念。  MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通

2022-06-22 16:07:20 2427 5

原创 Android network基础知识 — IPv4和IPv6的区别

  Internet协议(IP)是为连接到Internet网络的每个设备分配的数字地址。它类似于电话号码,是一种独特的数字组合,允许用户与他人通信。IP地址主要有两个主要功能。首先,有了IP,用户能够在Internet上被识别。第二,IP地址允许计算机通过Internet发送和接收数据,也就是我们经常说的通信。在本文中,我们将深入研究两种类型的IP地址:IPv4与IPv6。我们将从以下几个方面来给大家介绍这两种类型的IP地址,让大家了解到两类IP的必备知识:  IPv4和IPv6是不同类型的IP地址。它们的

2022-06-09 14:37:06 2148 3

原创 Wireshark抓取rtp负载ts流介绍(UDP组播)

  在上海疫情封了三个月,属实是发现了自己在家有多懒惰(手动狗头保命),文章也没有怎么写,解bug效率也低,给自己一巴掌警醒一下,我错了,下次还敢,哈哈哈哈,话不多说,今天介绍下居家期间学会的使用wireshark工具在网络包中提取ts流,其中主要介绍RTP的UDP流。......

2022-06-07 17:33:44 4360 2

原创 Android network — DHCP协议详解

DHCP协议详解0. 前言1. DHCP协议1.1 DHCP报文种类1.2 DHCP报文格式2. DHCP工作流程2.1 IP地址分配方式2.2 租约表2.3 工作流程2.4 服务器处理流程0. 前言  前言主要给大家介绍下什么是DHCP?以及为什么使用DHCP?  DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,统一使用两个IANA分配的端口:67(服务器端),68(客户端)。DH

2022-04-30 21:30:32 2835 1

原创 Android network — StateMachine机制

StateMachine与State模式1. State模式1.1 意图1.2 适用性1.3 结构1.4 Context与State交互1.5 理解2. Android中StateMachine机制2.1 StateMachine类作用3. Android 中StateMachine模块分析3.1 State Machine各个模块作用3.2 建立树形层次结构存储State5.3 状态机的StateStack建立和状态切换3.4 消息处理与派发4. Android中StateMachine实例应用5. 后记

2022-04-29 19:32:13 441

原创 Android Bluetooth(一) — 蓝牙模块代码整体架构

Android Bluetooth(一) — 蓝牙模块代码整体架构0. 前言1. 代码分布2. 整体结构3. 常用类和名词解释4. 以蓝牙 打开 enable 为例简单说明下蓝牙工作的整个过程:5. 后续分析0. 前言  我之前提过,我目前接触的最多的Android 版本是 Android kk(4.4)与Android P(9.0),因为最近在Android kk上做了一个wifi模组的移植适配工作,因此对WiFi&BT模块有了些了解,本系列主要基于Android kk进行了解分析,也许其他版

2022-04-27 22:48:30 2931 1

原创 Android WiFi —softAP流程分析

Android WiFi — Ap功能实现与源码分析0. 前言1. wifiAp的ip2. WifiAp的config分析2.1 默认的config2.2 修改wifiAp的config配置流程3. 开启/关闭WifiAp热点状态流程4. 已连接设备列表4.1 读取wifiAp的已连接设备列表4.2 设备列表实时更新4.3 设备连接限制5. 源码分析5.1 WifiAp始于UI5.2 WifiConfiguration配置5.2.1 获取wifiConfig5.2.2 设置wifiConfig5.3 wif

2022-04-26 23:38:04 4219

原创 SurfaceFlinger的dump信息详解

SurfaceFlinger的dump信息详解1. 特殊宏的打开2. Sync机制3. DispSync参数4. layer的dump4.1 区域信息4.2 基本信息4.3 buffer信息4.3.1 数据格式4.3.2 activeBuffer4.3.3 queued-frames 新的帧的数量4.3.4 mRefreshPending刷新卡住了吗?4.4 SurfaceFlingerConsumer的dump4.4.1 材质名称4.4.2 mCurrentCrop裁剪区域4.4.3 mCurrentTr

2022-03-21 10:56:00 6949

原创 surfaceflinger分析

Surfaceflinger分析1. Surfaceflinger介绍2. bufferqueue 原理3. surfaceflinger 关系图4. layer显示内存分配5. surfaceflinger Layer1. Surfaceflinger介绍  surfaceflinger作用是接受多个来源的图形显示数据,将他们合成,然后发送到显示设备。比如打开应用,常见的有三层显示,顶部的statusbar底部或者侧面的导航栏以及应用的界面,每个层是单独更新和渲染,这些界面都是有surfaceflin

2022-03-09 20:40:12 1792

原创 Android系统分析—OTA升级

Android系统分析—OTA升级1. recovery1.1 升级流程2. 辅助功能2.1 ui.cpp2.2 screen_ui.cpp2.3 default_device.cpp2.4 roots.cpp2.5 bootloader.cpp2.6 verifier.cpp2.7 install.cpp2.8 adb_install.cpp3. updater进程4. applypatch5. 其他辅助库6. RecoverySystem1. recovery  recovery的源代码在boota

2022-03-08 15:00:17 3806

原创 Android NativeDaemonConnector源码解析

NativeDaemonConnector源码解析1. NativeDaemonConnector2. 初始化3. 向netd发送指令4. 响应码5. netd 主动上报的消息处理6. 原理总结7. 打开有线网1. NativeDaemonConnector  NetworkManagerService 和 netd 之间的桥梁public class NetworkManagementService extends INetworkManagementService.Stub imp

2022-03-04 18:45:55 2556 4

原创 error: ‘for‘ loop initial declarations are only allowed in C99 mode

linux系统下的c编程与windows有所不同,如果你在用gcc编译代码的时候提示‘for’ loop initial declarations are only allowed in C99 mode,可能就是因为你在loop循环比如for中使用未预先定义的变量,比如:error: 'for' loop initial declarations are only allowed in C99 modenote: use option -std=c99 or -std=gnu99 to compile

2022-03-01 20:04:14 5763

原创 Android wifi信号强度显示流程

Android wifi信号强度显示流程1. RSSI2. 从wpa_supplicant获取RSSI3. framework层对wifi信号强度的处理4. StatusBar 更新wifi信号强度5. Settings中的wifi列表更新wifi信号强度1. RSSI  wifi的信号强度使用RSSI表示, 在Android的Framework中会中会转换为对应的格数在状态栏来显示  RSSI(Received Signal Strength Indication) 代表接收的信号强度指示, 它与模

2022-03-01 16:56:45 8223

原创 Android KK(4.4) 以太网和DHCP启动过程介绍

Android KK(4.4) 以太网和DHCP启动过程介绍1. ethernet启动流程2. DHCP启动过程2.1 JNI层接口2.2 DHCP客户端(libnetutils)  常做Android的大佬们可能知道,Android 5.0是一个历史分水岭一样的版本,其前后改动应该是所有版本中最大的了,而目前我的工作主要就围绕着Android P(9.0)和Android KK(4.4)两个版本进行支持,再了解熟悉了9.0的网络流程后,乘胜追击熟悉下Android 4.4 的网络模块,在源码基础上对以太

2022-02-25 17:25:14 992

原创 EthernetMornitor 与 EthernetStateTracker

EthernetMornitor 与 EthernetStateTracker1. EthernetMonitor1.1 startMonitoring()1.2 handleEvent(String ifname,int event)1.3 EthernetStateTraker.notifyStateChange()1.4 EthernetStateTraker.notifyPhyConnected()2. 发送消息之后,EthernetStateTraker 会handleMessage()3. se

2022-02-16 19:27:25 334

原创 亿点点概述Android基础必会的四五六【四大组件 五大存储 六大布局】

Android 四大组件 五大存储 六大布局1. Android四大组件1.1 Activity1.1.1 概念1.1.2 生命周期1.1.3 四种启动模式1.1.4 三种跳转方式1.2 Service1.2.1 概念1.2.2 两种启动方式  最近girl friend需要搞Android基础汇报,在不情不愿却又你情我愿的的情况下,一起搞定了她的汇报文档,搞都搞了就想着自己也巩固下基础,做一份总结,希望可以让对Android感兴趣的朋友对Android的基础知识有些了解1. Android四大组件 

2022-02-11 15:48:21 1530

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除