2025年02月09日 固件(firmware)是硬件设备自身执行的一段程序。固件一般存放在设备flash内。而出于成本和便利性的考虑,通常是先将硬件设备的运行程序打包为一个特定格式的固件文件,存储到终端系统内,通过终端系统给硬件设备进行升级。 Linux内核开发过程中,开发人员调试外设驱动设备,比如触控,充电,线性马达,存储,WIFI设备等,同样存在需要更新固件的情况。在Linux系统中,设备驱动程序处于内核态,而固件文件处于用户态,因此需要一个安全稳定可靠的机制,用来确保设备驱动程序成功加载固件文件。 为了解决设备

深入浅出理解Linux固件 firmware 子系统

2025年02月09日 Binder是安卓平台上的一种IPC framework,其整体的架构如下: Binder渗透到了安卓系统的各个软件层次:在应用层,利用Framework中的binder Java接口,开发者可以方便的申请系统服务提供的服务、实现自定义Service组件并开放给其他模块等。由于Native层的binder库使用的是C++,因此安卓框架中的Binder模块会通过JNI接口进入C/C++世界。在最底层,Linux内核提供了binder驱动,完成进程间通信的功能。 Binder对安卓非常重

深入浅出Binder框架

2025年02月09日 本文主要围绕三个问题对tombstone进行分析和介绍,debuggerd是如何监控进程并生成tombstone的?tombstone文件中的信息都是什么,是怎么获取的?tombstone文件应该怎么分析? Tombstone简介 当一个native程序开始执行时,系统会注册一些连接到debuggerd的signal handlers。针对进程出现的不同的异常状态,Linux kernel会发送相应的signal给异常进程,debuggerd捕获这些signal,做出相应处理的同时(一般来说是退

深入浅出理解Tombstone

2025年02月09日 随着Face ID、指纹识别、5G、AI等技术的发展,移动互联网已经悄然根植于现代生活中,伴随着日常生活的移动化,移动终端中存储的各种敏感信息日益增多,移动终端自身的安全性面临着巨大的挑战。 移动端系统运行的环境叫做REE(Rich Execution Environment),在其中运行的系统叫做Rich OS(Operating System),如最常见的Android系统,但是REE是一个开放的环境,容易收到恶意软件的攻击,比如敏感数据被窃取、数字版权被滥用、移动支付被盗用等。因此,201

深入浅出理解TEE

2025年02月08日 在Android平台上,如何在C++里面打印Backtrace。 在Android.mk文件中加入动态库依赖 LOCAL_SHARED_LIBRARIES += libutilscallstack 在C++文件中加入头文件 #include <log/log.h> #include <utils/CallStack.h> 在想调用Callstack的函数中加入如下代码 android::CallStack callstack; callstack.update(); ca

在C++打印Backtrace

2025年02月08日 Linux Device Tree中定义了很多和中断相关的属性,这些属性之间的关系错综复杂。为剖析这些关系,特地查阅文档后输出本文。本文基于ARM平台,主要说明如下几个属性: interrupt-controller interrupt-parent interrupt-cells interrupts interrupt domain和interrupt specifier interrupt-map 其中第5点属于中断相关文章中经常会提到的概念,并不是Device Tree中定义的属性。

Linux DTS中和中断相关属性的解释和用法

2025年02月08日 dex(Dalvik Executable)是Android平台源代码文件(java,kotlin)经过编译、重构、重排、压缩、混淆后的字节码文件,是对传统的class 文件再处理。dex 更适合于资源有限的嵌入式设备使用,和class 文件比,dex 明显的优势主要表现在下面两个方面 体积更小,dex 在class的基础上,将多个class 文件特征进行统一处理,通过重排,压缩,和class 文件比,体积明显变小 IO 量明显减少,dex 将大量class文件整合成一个文件,在程序执行

Android dex文件格式介绍

2025年02月08日 中断是当前计算机系统的基础功能,也是系统响应外设事件的必备桥梁。不同的架构对中断控制器有不同的设计理念,本文针对ARM公司提供的通用中断控制器(GIC,Generic Interrupt Controller)介绍在linux系统中的硬件中断号与软件中断号的映射过程。 首先,我们先来理解一下硬件中断号和软件中断号。 硬件中断号:GIC为每一个硬件中断源都分配了一个唯一编号,称为硬件中断号,用于区分不同的中断源。GIC-v3支持的硬件中断类型和分配的硬件中断号范围如下图所示。 软

Linux中断子系统之中断映射

2025年02月08日 大多数人接触UEFI都是在PC的应用场景上,有在PC上安装过多操作系统的经历的同学,通常会进入UEFI界面设置操作系统引导顺序、CPU虚拟化等设置。UEFI诞生之初也确实是作为BIOS的替代者,主要应用在PC电脑上。 随着手机/平板等移动设备的发展,高通从MSM8998开始使用UEFI替代LK(Little Kernel)作为手机的Bootloader,作为一个嵌入式开发者势必比较好奇,UEFI相比嵌入式常见Bootloader(u-boot、LK等)区别在哪? UEFI(Unified Ext

UEFI简介

2025年02月08日 AppOpsManager 是Google在Android4.3里面引进的应用程序操作(权限)的管理类,核心实现类为AppOpsService。Google对AppOpsManager的说明在:AppOpsManager app op(应用操作)的出现比运行时权限早,最初在没有出现运行时权限的时候,应用一旦被安装成功,是会被一次性授予所有需要的权限的,所以限制应用权限的唯一方案是使用AppOpsManager。但在现在,app op不但覆盖了所有的运行时权限(例如,拍照的app op是OP_CA

AppOpsManager介绍

2025年02月08日 本文是极客笔记出品,介绍如何使用dmabuf_dump工具。 什么是DMA-BUF dma-buf 的出现就是为了解决各个驱动之间 buffer 共享的问题,因此它本质上是 buffer 与 file 的结合,即 dma-buf 既是块物理 buffer,又是个 linux file。 buffer 是内容,file 是媒介,只有通过 file 这个媒介才能实现同一 buffer 在不同驱动之间的流转。 exporter: 分配 buffer 的模块 importer/user:使

Android dmabuf dump 工具的使用详解

2025年02月08日 本文是极客笔记出品,基于Android 13源码分析dmabuf_dump工具如何工作的。 DmaBuffer DmaBuffer结构体定义如下: 主要成员变量 name_ : 该dmabuf的name,如果读不到name,默认为 ‘<unknown>’ pids_: 有dup或map该dmabuf的pid 集合。 count_: fdinfo里面的count,目前看dambuf_dump并没有用。 size_: 该dmabuf占用的内存

Android dmabuf dump 如何工作的

2025年02月08日 Android Init 语言 Android Init语言由五部分组成: Actions Commands Services Options(选项) Imports rc文件都是面向行的,由以空白分隔的标记组成。如果要表达空白字符,可以使用C语言中的反斜杠(或双引号)来转义。当反斜杠是一行的最后一个字符时,可用于续行。 注释,以#开头。 System properties can be expanded using the syntax ${property.name}. Thi

Android Init语言介绍

2025年02月08日 Android Camera软件系统中,每路Stream的Buffer都是DMA-BUF,这种Buffer通常对外暴露的结构是ANativeWindowBuffer或GraphicBuffer(跨进程传递时用的native_handle_t),本文介绍Android系统中AHardwareBuffer、ANativeWindowBuffer和GraphicBuffer的关系。ANativeWindowBuffer、AHardwareBuffer都是GraphicBuffer通过类型转换而来,AN

Android 系统中AHardwareBuffer ANativeWindowBuffer和GraphicBuffer的关系

2025年02月08日 LOCAL_PATH 每个模块都在Android.mk里定义,表示模块所在目录。 此变量用于指定当前文件的路径。必须在 Android.mk 文件开头定义此变量。以下示例演示了如何定义此变量: LOCAL_PATH := $(call my-dir) LOCAL_PATH的作用 有人就问了,在本Android.mk中又没有使用到LOCAL_PATH,为什么先 要定义这么一个变量呢?为什么规定必须放在所有的include $(CLEAR_VARS)之前呢? 哪里在使用LOCAL_PATH 在A

LOCAL PATH

最新内容