自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android系统工程师--小馬佩德罗

分享专业的Android系统技术知识

  • 博客(184)
  • 资源 (9)
  • 收藏
  • 关注

原创 欢迎Fork我们的开源云手机项目--OPENVMI(Virtual Mobile Infrastructure)(VMI)

基于ARM+Linux体系构建的VMI(Virtual Mobile Infrastructure)云平台

2020-09-20 17:04:26 16172 59

原创 如何为Linux/Android Kernel 5.4和5.15添加 fuse passthrough透传功能 ?

参考:Google文档参考此文档,目前kernel.org提供的fuse passthrough补丁在6.9版本之后,但想要在5.4和5.15版本内核做移植应该如何简单点呢?文档中提到 Android的内核为5.4 和 5.15版本内核做了fuse passthrough功能,可以参考Android提供的内核版本来修改对应kernel.org发布的版本。(本文提供一个思路)

2025-04-03 10:27:37 462

原创 Android系统的安全问题 - 移动平台安全机制

系统中对权限的定义在文件中:frameworks/base/core/res/AndroidManifest.xml注意此时并没加入任何allow的policy。

2025-03-31 09:10:29 555

原创 Android系统的安全问题 - 操作系统安全机制

可执行文件:不活动就是废物进程:可执行文件的活动表现,一次生命的历练线程:CPU(核)的调度单位,并发的执行序列,进程的多管齐下资源和调度。

2025-03-31 08:49:44 623

原创 Android的安全问题 - 在 Android 源码的 system/sepolicy 目录中,区分 public、private 和 vendor的目的

这种划分是 Android 保护核心系统安全、维护兼容性,同时允许厂商灵活定制的重要设计。如果需要扩展策略,优先使用public接口。避免直接依赖private内容。厂商自定义策略应放在vendor目录或设备特定的sepolicy路径。

2025-03-28 16:30:49 387

原创 Android系统的安全问题 - 有关强制执行 SELinux策略的直观操作指南(Your visual how-to guide for SELinux policy enforcement)

SELinux最初是在Fedora Core 3中引入的,后来在Red Hat Enterprise Linux 4中引入。对于那些从未使用过SELinux的人,或者想要一个解释…SElinux是一个标签系统。操作系统中每个进程都有一个标签,每个文件/目录对象都有一个标签。甚至网络端口、设备和潜在的主机名都有标签分配给它们。我们编写规则来控制进程标签对对象标签(如文件)的访问。我们称之为策略。内核执行这些规则。有时这种强制称为强制访问控制(MAC)。对象的所有者对对象的安全属性没有自由裁量权。

2025-03-28 09:05:34 589

原创 Android系统的安全问题 - Linux的能力模型(Capability)和 SELinux 的区别

是权限细分机制,解决 “root 权力过大” 的问题。SELinux是强制访问控制机制,解决 “进程能访问哪些资源” 的问题。两者互补,共同提升 Linux 安全性。

2025-03-26 17:13:22 465

原创 Android系统的安全问题 - Android的加密

Android 提供了多层次的加密方案来保护用户数据安全,从全盘加密到文件级加密,从硬件支持到软件实现。

2025-03-26 16:57:29 614

原创 Android系统的安全问题 - Android的启动时验证

是一项关键安全机制,用于确保设备启动过程中加载的所有系统镜像(如 Bootloader、内核、系统分区)未被篡改,防止恶意软件植入或 Root 攻击。Verified Boot 是 Android 设备安全的基石,与 TEE(如 Trusty)、加密(如 FBE)共同构建了从启动到运行的完整防护体系。,从硬件信任根开始,直到 Android 系统完全启动。Android 的启动验证是一个。

2025-03-26 16:46:01 439

原创 Android系统的安全问题 - Android的Trusty TEE

Trusty TEE 是 Android 安全架构的基石,通过硬件隔离保护最敏感的操作(如密钥、生物识别)。随着硬件升级(如专用安全芯片),Trusty 的能力将进一步扩展。(TEE)操作系统,用于在隔离的安全环境中运行敏感操作(如密钥管理、生物识别认证等)。它独立于 Android 主系统(Rich OS),确保即使 Android 被攻击,关键安全功能仍受保护。Trusty TEE(Trusted Execution Environment)是 Google 为 Android 设计的。

2025-03-26 16:29:18 1054

原创 Android系统的安全问题 - Android的keymaster和gatekeeper

Keymaster 和 Gatekeeper 是 Android 安全链条的核心环节,前者保障密钥安全,后者保障身份认证安全,二者结合为设备提供了从硬件到应用的完整保护。现代 Android 设备(如 Pixel、三星)均依赖它们实现高等级安全功能(如 Titan M 芯片)。是两大关键安全组件,分别负责硬件级别的密钥管理和设备解锁认证。Keymaster 提供基于硬件的加密密钥管理服务,用于保护敏感操作(如设备加密、支付认证、应用数据加密等)。(如可信执行环境 TEE 或专用安全芯片)的设备上。

2025-03-26 16:20:19 100

原创 系统架构设计师考试-专业英语

词汇含义access存取active-matrix主动矩阵adapter适配器,转换器adapter cards适配卡agents代理analog signals模拟信号animations动画applets程序arithmetic operations算术运算array数组,阵列assembly汇编,安装,装配asynchronous异步的,非同步的asynchronous communic

2024-03-20 09:20:32 574

原创 设计模式的另一种有趣理解

当系统的状态变化时,系统便改变所选的子类。跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说“有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。

2024-02-20 16:05:51 1323

原创 Linux系统中 ssh 连接其他服务器一段时间后卡死问题

在Ubuntu下经常需要通过SSH进行远程连接,使用过程中往往会遇到一个问题,就是命令行窗口在经过一段时间后就会卡死,无法输入命令。

2023-07-18 11:08:33 3148 3

原创 Android系统的问题分析笔记(10)- Android 系统安装Google三套件

Google三套件:下载地址:https://www.apkmirror.com/apk/google-inc/google-services-framework/下载地址:https://www.apkmirror.com/apk/google-inc/google-play-services/下载地址:https://www.apkmirror.com/apk/google-inc/google-play-store/

2023-07-09 18:16:22 1169 1

原创 在windows系统中映射网络驱动器时,如何通过非455端口远程访问Linux服务器的Samba服务

右键 电脑–管理–服务和应用程序–服务,找到名为Server的服务,双击打开属性,启动类型改为禁用。在映射网络驱动器时,填入127.0.0.1即可映射至Linux服务器的Samba服务。是 pid 为 4 的进程进行监听。

2023-06-27 16:44:46 2863 17

原创 Android系统的问题分析笔记(9) - Android 中的 Uri 如何使用呢 ?

通用资源标志符 URI (Universal Resource Identifier),URI 在 java.net.URI 中定义,显然是 Java 提供的一个类。而 Uri 位置在 android.net.Uri 中定义(Android 源码内位置:frameworks/base/core/java/android/net/Uri.java),是特有针对 Android 系统定义的类。Uri 代表要操作的数据,Android 上可用的每种资源(图像、视频片段、网页等)都可以用 Uri 来表示。

2023-06-15 09:21:07 4562 19

原创 Android系统视角下对APK的分析(2)- APK安装过程的定性分析

声明以Android手机用户角度来看,安装各式各样的APP,基本就是从应用市场上 “搜索->下载->安装” 三连。而对Android系统来说,这就是个大工程了,因为对Android系统来说APK是“外来户”,如何安装它、有限制地支持它的运行、如何防着它干坏事等问题就来了。写此专栏的起因是为了给客户在定制的Android系统中实现 大型APK快速安装的功能。本专栏就来从Android系统的角度来分析下APK的整个生命周期(安装-运行-卸载),包含对APK的静态分析、PackageManag

2023-06-12 21:30:00 1837 7

原创 Android系统视角下对APK的分析(1)- 静态分析APK文件

因此你的证书不需要必须由 CA 颁发,实际上所有 Android 里使用的代码签名,均是自签名的。APK 文件格式是 JavaJAR 的一种扩展格式,当然也是广为流行的 ZIP 文件格式的扩展格式,可以使用 ZIP 格式的压缩工具对其进行解压。采用 Html5 语言写的 App,不需要下载安装,类似于现在所说的轻应用,是生存在浏览器中的应用,可以理解为触屏版的网页应用。Native App 指的是原生程序,一般依托于操作系统,有很强的交互,是一个完整的App,可拓展性强,需要用户下载安装使用。

2023-06-11 19:12:18 2828 2

原创 Android系统原理性问题分析 - epoll 的事件模型

在Android系统原理性问题分析 - 多路并发情况下的C/S模型中分析了 I/O 多路复用的 epoll 机制,此篇分析下 epoll 的事件模型。Edge Triggered (ET) 边缘触发只有数据到来才触发,不管缓存区中是否还有数据。Level Triggered (LT) 水平触发只要有数据都会触发。假定已经把一个用来从管道中读取数据的文件描述符(RFD)添加到 epoll 描述符。管道的另一端写入了 2KB 的数据。

2023-06-10 23:10:03 978

原创 Android系统原理性问题分析 - Linux 线程池(Thread Pool)的实现原理

【代码】Android系统原理性问题分析 - Linux 线程池(Thread Pool)的实现原理。

2023-06-10 17:00:54 154

原创 Android系统原理性问题分析 - 系统 Root 的实现原理

su 会利用这个 LocalSocket 连接将调用 su 命令的 Android 应用的信息传递给 Superuser.apk,这些信息就是在Root 授权窗口上看到的 APP 的名称的图标。系统原生的 su 对于所有的应用程序是平等的,所以原生的su 是无法保证 su 的安全的,SuperUser 必须安装自定义的 su,以及能够保证自身 su 不被替换的 deamon 进程。以上代码对用户来说是无感知的,所以如果一个 Android 应用利用 su 执行 Linux 命令,用户是不知道的。

2023-06-10 11:00:00 1120

原创 Android系统的问题分析笔记(8) - Android 系统的调试方法有哪些 ?

问题Android 系统的调试方法有哪些?(此篇分析基础为Android 7.1.1系统源码)概述  偌大的Android系统中,出bug是难免的,对于开发者而言出bug不可怕,关键是要知道如何debug。此篇总结下Android系统常用的调试方法。1 Native部分调试1.1 标准Linux调试方法  由于Android 系统基于 Linux 实现,在系统中可以使用 Linux 中标准的方法进行调试。在Android系统中有一个类似于 Linux 中 busybox 一样的工具集 toybo

2023-06-09 00:11:32 1500

原创 Android系统的Ashmem匿名共享内存子系统分析(2)- 运行时库cutils的Ashmem访问接口

如果是,那么第15行就将它的 PROT_EXEC 位也设置为1,因为当一个进程的 personality 属性的 READ_IMPLIES_EXEC 位被设置为1时,就表示当它有权限读一块内存时,也隐含着它对该内存有执行权限。此后,应用程序只能删除它的访问保护位,而不能增加它的访问保护位。调用函数 open 打开设备文件 /dev/ashmem 时,Ashmem 驱动程序的函数 ashmem_open 就会被调用主要是为应用程序创建一个 ashmem_area 结构体,用来描述一块匿名共享内存。

2023-06-07 09:09:53 665

原创 Android系统的Ashmem匿名共享内存子系统分析(4)- Ashmem子系统的 Java访问接口

Binder 进程间通信机制使用一个类型为 BINDER_TYPE_FD 的 Binder 对象来描述一个文件描述符,当 Binder 驱动程序发现进程间通信数据中包含有这种 Binder 对象时,就会将对应的文件描述符复制到目标进程中,从而实现在两个进程中共享同一个文件。成员函数 readBytes 用于读取某一块匿名共享内存的内容,成员函数 writeBytes 用于写入某一块匿名共享内存的内容,成员函数 isDeactivated 用于保证匿名共享内存已经被映射到进程的地址空间中。

2023-06-06 23:15:00 467

原创 Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口

通过引用信息中的 Server 端的 MemoryHeapBase 对象的引用 heap,可以在 Client 端进程中创建一个 BpMemoryHeap 远程接口,最后将这个 BpMemoryHeap 远程接口保存在成员变量 mHeap 中,同时从 Server 端获得的信息还包括这块匿名共享内存在整个匿名共享内存中的偏移位置以及大小。类 IMemory 的具体实现在源码 frameworks/native/libs/binder/IMemory.cpp 中定义。

2023-06-06 22:45:00 959

原创 Android系统的Ashmem匿名共享内存子系统分析(5)- 实现共享的原理

Client 组件从 Binder 驱动程序中获得了 flat_binder_object 结构体之后,首先将它封装成一个 ParcelFileDescriptor 对象,然后再将它转换成一个 FileDescriptor 对象,最后就可以使用这个 FileDescriptor 对象来创建一个 MemoryFile 对象,即将 MemoryService 服务内部的匿名共享内存映射到 Client 组件所在的进程的地址空间,从而达到了在不同的进程中共享同一块匿名共享内存的目的。在Linux内核中,

2023-06-06 19:50:46 785

原创 Android系统的Ashmem匿名共享内存子系统分析(1)- Ashmem驱动

Android系统中提供了独特的匿名共享内存子系统Ashmem (Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。能够辅助内存管理系统来有效地管理不再使用的内存块。通过 Binder进程间通信机制来实现进程间的内存共享。对于 Android 系统的匿名共享内存子系统来说,其主体是以驱动程序的形式实现在内核空间的,同时,在系统 Native 层提供了 C/C++ 调用接口和 Framework 层提供了 Java 调用接口。

2023-06-05 22:54:10 655

原创 Android系统中的Binder通信机制分析(7)- Java 层的 Binder 机制

声明其实对于Android系统Binder通信的机制早就有分析的想法,记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾…文中参考了很多书籍及博客内容,可能涉及的比较多先不具体列出来了;本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客:cm-14.1 Android系统启动过程分析(1)-如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编译、刷机

2023-05-31 23:06:09 1182

原创 Android系统中的Binder通信机制分析(6)- Binder通信机制详解

Binder 实体对象binder_node的定义在内核代码 binder.c 中。//调试id struct binder_work work;//描述一个待处理的工作项 union {//挂载到宿主进程binder_proc的成员变量nodes红黑树的节点 struct hlist_node dead_node;//当宿主进程死亡,该Binder实体对象将挂载到全局binder_dead_nodes 链表中 };

2023-05-30 22:45:00 1758

原创 Android系统中的Binder通信机制分析(5)- 进程间数据传递载体 Parcel

可以想象下,同一进程间的对象传递都是通过引用来做的,因而本质上就是传递了一个内存地址。这种方式在跨进程的情况下就无能为力了。由于采用了虚拟内存机制,两个进程都有自己独立的内存地址空间,所以跨进程传递的地址值是无效的。进程间的数据传递是 Binder 机制中的重要一环,Android系统中担负这一重任的就是 Parcel。Parcel 是一种数据的载体,用于承载希望通过 IBinder 发送的相关信息(包括数据和对象引用)。

2023-05-29 22:45:00 1063

原创 Android 系统内的守护进程 - core类中的服务 (6) : servicemanager

只要是操作系统,不用说的就是其中肯定会运行着一些很多守护进程(daemon)来完成很多杂乱的工作。通过系统中的init.rc文件也可以看出来,其中每个service中就包含着系统后台服务进程。而这些服务被分为:core类服务(adbd/servicemanager/healthd/lmkd/logd/vold)和main类服务;

2023-05-28 15:00:54 1070

原创 Android系统原理性问题分析 - 单路情况下的C/S模型

各个应用程序创建一个 socket。socket 是一个允许通信的“设备”,两个应用程序都需要用到它。服务器将自己的 socket 绑定到一个众所周知的地址(名称)上使得客户端能够定位到它的位置。使用 socket()系统调用能够创建一个 socket,它返回一个用来在后续系统调用中引用该socket 的文件描述符。不管参数protocol,此篇中protocol参数都设置为0,如果对这个参数感兴趣,可以自行搜索学习。主要分析下前两个参数: domain 和 type。

2023-05-26 12:09:42 844 1

原创 Android系统原理性问题分析 - 多路并发情况下的C/S模型

假设有一个将 INET 套接字用作 C/S 模型。如果想让一个Server端与多个 Client端通信,那么每个Server端 和 Client端都需要 INET 套接字。如果多客户端同时连接服务器端,那服务器端如何处理多客户端的服务请求呢?C/S模型通常有三种处理方式:多进程、多线程、I/O 多路复用。

2023-05-24 21:50:04 831 4

原创 Android系统的JNI原理分析(7)- Android中JNI的高级用法

JNI的基本功能是让 Java 调用Native代码。Native 和 Java 层的双向调用线程处理特殊的文件描述符处理异常处理。

2023-05-23 22:00:00 478

原创 Android系统的JNI原理分析(6)- Android中JNI的存在方式

APK中使用JNI 的核心是其中有 Java 类声明了本地的方法,并且加载了包含JNI本地库得到这些方法。关于Framework层中使用JNI,如果是从本专栏前面开始读过来的,就知道之前对MediaRecorder的分析就属于Framework层中使用JNI,这里就不做赘述了,可以参考前面几篇文章的分析。在应用程序包中使用的JNI,是作为一种补充的实现方式,它让位于 Android 应用层的APP能直接使用包含本地的内容,并随着 APK 一起发布,此时JNI 的库是作为应用程序包的一部分。

2023-05-23 09:15:49 446

原创 Android 系统内的守护进程 - main类服务(7) : sdcard

并非所有的Android 设备都必须支持 SD 卡,不过在Android 系统中还是有一个 sdcard 守护进程,提供用户态中对 SD 卡的支持,其中包括在不支持权限管理的 FAT 文件系统上强制使用权限管理。这是由一种被称为FUSE (File systems in USEr mode,用户态下的文件系统) 的机制来实现的。在完成了降低自身权限的操作之后(使用-u/-g 指定 GID),守护进程会调用 ignite_fuse(),进入一个消息循环中,随时准备处理/dev/fuse 发来的请求。

2023-05-22 21:15:00 470

原创 Android 系统内的守护进程 - main类服务(6) : gatekeeper

不过,运行在 TEE 中的代码还是可以完全访问这些秘密信息的,所以我们仍然能通过 TEE 完成数据加密、身份认证之类的工作。这一举措让 Android 几乎达到了 ios 的高强度的加密标准(在iOS中,一个存储在芯片硬件中的称为UID key密钥,使得暴力破解必须在本机上才能进行,而且速度很慢,即使是破解一个只有 4 位数的 PIN 码也要花很长的时间)在谷歌提供的这个HAL 模块中,是把 TrustZone 作为它自己“可以信赖的”TEE OS的一部分。

2023-05-22 19:30:00 897

原创 Android 系统内的守护进程 - main类服务(5) : debuggerd

以这种方式,而不是产生一个完整的核心转储,tombstone (有望)可以抓到造成崩溃的本质原因,并进行基本的崩溃处理 (crash processing)。如果系统属性 debug.db.uid 的值被设为当前崩溃的进程的 uid,那么 debuggerd 就会把该进程暂停在它最终崩溃的那一瞬间,并等待用户启动 gdbserver (并连上来调试这个进程)。如果是在一个可写的目录中运行这个程序的,那么默认的行为是:在目录中生成一个名为 “core” 的文件。应用在运行时难免会有崩溃的情况。

2023-05-22 19:00:00 1204

原创 Android 系统内的守护进程 - main类服务(4) : keystore

用户的 keystore 的口令被存放在一个 .masterkey 文件中(用根据用户的屏幕解锁密码推出的密钥予以加密),各个 App 的 keystore 则存放在名为 AID_xxxxx的各个对应的文件中。密钥的访问是由 uid 来管理的,因此实际上每个应用都有它自己的私有存储。命令执行的返回码是定义在 system/security/keystore/include/keystore/keystore.h 文件中的,这些返回码会被 keystore_cli 翻译成下表所示的字符串。

2023-05-21 22:58:02 356

epoll 的事件模型 实例

epoll 的事件模型 实例

2023-06-10

Linux 线程池(Thread Pool)的实现原理 实例

Linux 线程池(Thread Pool)的实现原理 实例

2023-06-10

单路情况下的CS模型 tcp-socket udp-socket ud-socket

tcp_socket udp_socket ud_socket

2023-05-26

多路并发情况下的CS模型实例 select poll epoll

多路并发情况下的CS模型实例 select poll epoll

2023-05-24

fastboot_usb_driver.zip

window fastboot驱动

2021-08-25

ffmpeg_x264.tar.gz

我博客《如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)》移入Android7.1源码中的第三方库ffmpeg x264的工程文件夹

2020-03-17

ffmpeg-4.0.2.tar.gz

我博客《如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)》使用的ffmpeg源码

2020-03-17

x264.tar.gz

我博客《如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)》里使用的x264源码

2020-03-17

我的博客中《关于如何在Android源码目录中建立自己的C工程,并用mm命令单独进行该C工程模块的编译,以及Android.mk的使用介绍(2)》源码包

我的博客中《关于如何在Android源码目录中建立自己的C工程,并用mm命令单独进行该C工程模块的编译,以及Android.mk的使用介绍(2)》源码包

2017-09-24

本人编译的iconv.so 与其头文件

我在做一个加密芯片项目时,需要用到此库其中的一些函数,就编译了这个动态库。 要注意的是,不同版本的iconv里的函数名字有时候不同: 1.有的版本是iconv_open、iconv_close这样的名字。 2.有的版本是libiconv_open、libiconv_close这样的名字。 修改办法是: 1.如要iconv_open、iconv_close这样的名字,需在iconv.h中加入#define LIBICONV_PLUG即可。 2.如要libiconv_open、libiconv_close这样的名字,需在iconv.h中移除#define LIBICONV_PLUG即可。

2017-09-18

Z-Stack_Home_1.2.2a.part3.rar

包括以下例程: SampleDoorLock SampleDoorLockController SampleSwitch SampleTemperatureSensor SensorTag

2017-09-18

Z-Stack_Home_1.2.2a.part2.rar

包括以下例程: SampleDoorLock SampleDoorLockController SampleSwitch SampleTemperatureSensor SensorTag

2017-09-18

Z-Stack_Home_1.2.2a.part1.rar

包含一下例程: SampleDoorLock SampleDoorLockController SampleSwitch SampleTemperatureSensor SensorTag

2017-09-18

空空如也

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

TA关注的人

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