自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Overlay文件系统限制堆叠层数流程

Overlay文件系统是覆盖在基础文件系统上的一种堆栈式文件系统,所以也是一种wrapfs,Documentation有下面的介绍。An overlay-filesystem tries to present afilesystem which is the result over overlaying one filesystem on topof the other.堆栈式文件系统由于内存问题不能一直堆叠,本篇主要来介绍下Overlay的mount流程,旨在梳理如何限制堆栈式文件系统堆叠层数。

2021-09-12 15:03:10 928

原创 TombStone文件如何生成

开发者在分析系统稳定性的时候通常需要知道进程发生异常时候的调用栈来分析发生异常时进程到底正在做什么。这样才能根据进程所处场景或者调用栈、寄存器信息分析异常发生的原因。而在Android中,当Native进程发生崩溃时,会在/data/tombstones/目录下生成tombstones_xxx的文件,里面记录了某一个进程在发生崩溃时候的所有信息,包括调用栈、寄存器信息等等。这极大的有助于开发者来定位问题,本篇文章来分析下TombStone文件到底是如何生成的,里面都记录了哪些信息。首先我们要知道,Nati

2021-04-11 14:55:23 2045

原创 ARM64架构下memcpy实现原理

memcpy函数大家再熟悉不过了,是用来拷贝内存中的内容到目标地址所处的内存中。kernel中的函数实现是用汇编来写的,而其他的拷贝函数也有引用到此实现方式。本篇主要解读kernel中是如何实现的,代码是kernel 5.4版本源码。/* * Copy a buffer from src to dest (alignment handled by the hardware) * * Parameters: * x0 - dest * x1 - src * x2 - n * Returns:

2021-03-27 16:06:21 2397 2

原创 Fuse性能优化介绍(解读)

Fuse即file system in user, 此文件系统是为了方便开发者修改文件系统时不需要再修改kernel,仅在用户空间修改就可以达到目的,因为将控制逻辑放到了用户空间,但是因为存在用户态和内核态的切换,所以Fuse的整体性能远不如其他基础文件系统,因为优化Fuse文件系统的性能成为一个关注点,尤其是在读写大量小文件或者发生随机访问的时候,更是体现了Fuse性能差的毛病。本文旨在解读已有的优化措施。优化措施引自于该网站:https://patchwork.kernel.org/project/

2021-01-31 14:35:53 3149

原创 高通RAM dump解析简介

ramdump是指某个时刻系统或者子系统发生crash等异常,系统将内存中的数据通过一定的方式保存下来,相当于一个系统内存快照,用以开发者离线分析系统异常问题。解析ramdump肯定需要先获取对应的ramdump信息,即上面提到的系统内存快照,各厂商有自己获取的方式,这里不再详细赘述。拿到ramdump信息后还需要对应kernel版本的vmlinux,类似于addr2line,需要对应的符号文件才能将对应的信息获取出来。此时拿到的信息是一些bin文件,无法直接查看,所以需要通过https://sourc

2021-01-16 17:07:40 12101

原创 Android Vold简介(三)

之前两篇主要介绍了Vold的架构以及运行机制,本篇主要来介绍下Vold是内置存储和外置存储的mount流程。前面已经介绍过,无论什么存储,最终都会调用doMount()这个虚函数,对于不同类型的则会有不同的mount流程(即挂在到不同的文件系统下);对于内置存储,使用EmulatedVolume类来进行出来,而外接sd卡或者OTG设备则基本上都使用PublicVolume类来处理,因此uevent传递上来的消息会通知到vold到底这个存储介质属于什么类型。首先来看下EmulatedVolume处理流程,首

2020-11-29 16:51:55 1967

原创 RescueParty 简述

本篇来简单介绍下Android的RecuseParty机制,该功能从O版本继承进来,用于

2020-08-16 09:39:06 1659

原创 Android Toybox简述

toybox加粗样式

2020-08-08 20:39:12 6502

原创 PropertyService(二)

承接上篇文章继续分析Java层SetProperty的过程,以及native层的处理。 这边用到的文件有:frameworks/base/core/java/android/os/SystemProperties.javaframeworks/base/core/jni/android_os_SystemProperties.cppsystem/core/base/properties.cppbionic/libc/bionic/system_property_set.cppJav

2020-06-21 15:52:32 794

原创 PropertyService(一)

setProperty在Android开发中太常用了,很多地方都会用它来记录一下value,以此作为判断条件或者通信的数据。当然ctl.start也可以启动系统服务,前提是要在ServiceManager中有过注册。偶然一次遇到了ctl.start启动服务失败的问题,本片就来探究下setProperty到底是如何执行和发挥作用的。还是先列一下会用到的文件init.cppproperty_service.cpputil.cppproperty是在Android系统开机后由init进程收集起来的,i

2020-06-21 15:52:16 1426

原创 i++和++i运行方式

我们都知道++在C语言中是自增的意思,会对原值增加1。但是偶然一次看到一个题目是这样的:m=0;m=m++;m结果是多少?上面的结果不是1,而是0, 这确实有点出乎意料。于是写了下面的程序来确认下;#include <stdio.h>int main(int argc, char **argv){ int m = 0; m++; printf("m is %d\n", m); ++m; printf("m is %d\n", m);

2020-06-14 16:51:41 401

原创 Android Vold简介(二)

上一篇讲完了Vold的启动,本篇主要来介绍一下SM(StorageManager)和Vold、Kerel和Vold之间如何建立联系,以及信息是如何接收处理的。上一篇提到了,NM(NetlinkManager)启动的时候会执行startListener开始监听Kernel的uevent事件,这里详细来看下是如何接收和处理消息事件的。int SocketListener::startListen...

2020-05-04 21:06:22 1773

原创 Android Vold简介(一)

Vold(volume Daemon),即Volume守护进程,用来管理Android中存储类的热拔插事件,处于Kernel和Framework之间,是两个层级连接的桥梁。先来看一下Vold在Android系统的整体架构。该图主要包含了Framework和Vold进程的,Kernel和App层涉及的内容这里不再设计,简单介绍一下。Vold主要是接收Kernel的uevent消息,然后通过NM(...

2020-05-04 21:05:59 7901 1

原创 Android系统sdcard目录

随着Android大版本的不断迭代,原本的内存卡现在基本上都没有了,取而代之的是内置sdcard,即系统根目录下的sdcard/目录。那该目录在系统启动过程中什么时间、被谁创建、如何创建呢?本片文章将来介绍下sdcard目录的创建历程。 首先来看下用到的文件目录:system/core/rootdir/init.rcsystem/core/init/frameworks/bas...

2020-05-04 21:05:41 5074 3

原创 C指针小试

经常会看到有这样的笔试题目——再函数中动态申请内存,通过传参指针返回后使用。比如下面的片段,最终输出了hello world! void getMemery(char** p, int size) { *p=(char *) malloc(size);}void testFunction() { char* str = NULL; getMeme...

2020-04-12 21:17:10 81

原创 Looper、MessageQueue、Handler和Thread之间的关系

在Android中,handler消息随处可见,但是只会用却不知道是如何实现的,Looper和Handler之间又有什么联系呢?Android中的消息机制涉及到Looper、MessageQueue、Thread以及Handler,本篇将从源码来分析它们之间是如何建立的联系以及内部的工作机制是怎样的?...

2020-03-22 20:41:01 352

原创 简述Android应用安装的拷贝过程

Android安装过程会区分为预置应用和三方应用,预置应用在首次开机过程中便会扫描安装,而三方应用则由用户使用过程中来完成安装。安装的方式主要分为以下几种:安装预置应用,这部分在首次开机完成;使用ADB命令或者Shell命令来完成,其过程相同,ADB会增加一层ADB调用;通过应用商店或者在其他应用内下载安装;在文件管理中或者浏览器中点击APK文件通过PackageInstaller包进...

2020-02-18 21:57:26 1756

原创 APEX包管理器简述(一)

简述APEX(Android Pony EXpress ) 是Google在Android 10中引进的一种用于管理较低级别系统模块的安装包管理器,用于更新一些不适用APK安装流程的系统组件,比如Bionic 库以及一些运行时类库。APEX文件格式APEX文件是一个zip压缩包,类似于一个APK安装包文件,其内部包含四个文件:1. apex_manifest.json2. Android...

2020-02-13 20:31:23 6333

原创 APEX包管理器简述(二)

本篇主要讲一下Apex包如何完成

2020-02-13 20:31:06 1881

原创 处理Shell脚本中带有空格的变量

处理Shell脚本中带有空格的变量你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写...

2020-02-03 17:24:22 2456

空空如也

空空如也

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

TA关注的人

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