2024-12-14
如何实现动态切换rro?
在Android项目中,针对单一设备名需适配两套电池参数的问题,提出一种通过vnd侧overlay apk和系统属性切换的解决方案。首先,编译两套独立的overlay apk,每套包含不同的`power_profile.xml`文件。然后,利用系统属性`ro.power.profile`作为触发条件,在rc文件中根据设备特性设置该属性,从而动态切换overlay。此方案避免了修改missi侧代码,确保了项目的灵活性和稳定性。
2024-12-06
记一次uid设置错误导致的adb push失败问题
我司项目无法通过ADB将文件推送至`/vendor/firmware_mnt`目录。分析显示,该目录仅授权给`group`为`system`的读写权限,而`root`用户无权限访问。解决方案为修改`/vendor/etc/fstab.default`文件,将`uid=0`改为`uid=1000`,重新挂载后可成功推送文件。验证结果显示,修改后文件推送正常。
2024-11-25
如何下载以及编译ACK?
本文介绍了如何下载Android通用内核代码(ACK),并对其进行编译,包括使用Bazel和旧版build.sh脚本的方法。文章还详细说明了如何修改KMI接口,包括修改特定文件、更新ABI以及向Google提交代码更改的步骤。整个流程涉及命令行操作、文件编辑和版本控制,旨在帮助开发者定制和更新Android内核。
2024-11-22
基于hexo+vercel零成本搭建博客网站
搭建个人博客网站是数字时代展示个人才华和分享知识的重要方式。本文介绍了选择Hexo框架和Vercel平台零成本搭建博客的原因及具体步骤。首先阐述了拥有博客网站的意义,然后详细说明了安装Hexo和部署到GitHub的流程,最后讲解了如何利用Vercel进行网站上线。文章简洁明了,为初学者提供了清晰的建站指导。
2024-11-22
Android编译原理之make编译过程
本文介绍了Android系统编译过程中make指令的使用,并以高通代码为例,详细解析了编译指令的执行流程。文章指出,make指令实质是对make的封装,通过调用build/soong/soong_ui.bash文件进行编译。接着,文章详细解析了soong_ui.bash的执行流程,包括获取make命令、编译soong_ui、执行make命令等步骤。最后,文章深入分析了build.go文件的执行流程,包括配置编译参数、编译工具、生成ninja文件、执行编译过程等步骤。
2024-11-22
Android编译原理之lunch
本文概述了Android编译系统的演进过程,从Android 7.0开始,Google引入了ninja、kati、Android.bp和soong构建系统,旨在取代原有的GNU Make,以提高编译效率。文章详细介绍了Soong构建系统的组成,包括blueprint、kati、make、soong等工具链,并解释了它们之间的关系。同时,文章还分析了编译步骤,包括envsetup.sh和lunch命令的执行过程,以及编译工具链之间的关系。最后,文章总结了Android编译系统的演进和工具链的使用,为读者提供了对Android编译过程的全面了解。
2024-11-22
Android系统中各image文件解压缩
本文主要介绍了在Android系统编译后如何查看镜像文件中包含的内容。通过使用simg2img、lpunpack、unpack_bootimg、mkdtimg和dtc等工具,可以将不同类型的镜像文件(如boot.img、recovery.img、dtbo.img、dtb.img、metadata.img、super.img和persist.img)转换或解析为可读格式,并挂载到目录中进行查看。文章详细说明了每个工具的使用方法以及相关命令,为开发者提供了便捷的方式来检查和理解Android系统镜像文件的结构。
2024-11-22
高通android启动代码流程分析(SBL->ABL)
本篇文章主要介绍了UEFI阶段代码移植以及开机故障问题,并深入分析了开机启动流程。文章首先阐述了芯片的冷启动流程,包括APPS PBL、XBL SEC、XBL Loader、XBL CORE APPSBL和HLOS等阶段的运行过程。接着,文章详细介绍了arm架构的知识点,如异常级别和secure state,以及相关模块的功能。然后,文章分析了代码目录架构,包括编译指令和代码位置。此外,文章还详细介绍了PBL到SBL的启动过程,包括sbl1_main_ctl函数和boot_config_process_bl函数的工作原理。最后,文章深入分析了UEFI的背景介绍、流程分析和ABL的相关内容,包括XBL Loader Architecture、xbl代码运行流程、如何创建UEFI DXE_DRIVER驱动及UEFI_APPLICATION应用程序以及UEFI XBL QcomChargerApp充电流程代码分析等。
2024-11-21
ARMv8内存地址翻译
Armv8-A 使用虚拟内存系统,通过内存管理单元 (MMU) 将虚拟地址转换为物理地址。MMU 使用存储在内存中的转换表进行地址转换,支持多个任务在各自的私有虚拟内存空间中运行。每个程序可以使用相同的虚拟内存地址空间,即使物理内存是碎片化的。MMU 还可以控制每个内存区域的访问权限、内存顺序和缓存策略。内核空间和用户空间的虚拟地址分离,内核使用固定映射,而应用程序使用可变映射。MMU 支持两种地址空间:安全地址空间和非安全地址空间。虚拟化引入了翻译的第二阶段,将虚拟地址转换为中间物理地址,再转换为最终物理地址。转换表配置包括颗粒尺寸、缓存配置、虚拟地址标记等。访问权限通过转换表条目控制,操作系统可以使用访问标志位跟踪页面的使用情况。安全性方面,NS 位和 NSTable 位控制虚拟地址是否转换为安全物理地址或非安全物理地址。翻译旁观缓冲区 (TLB) 缓存最近访问的页面翻译,提高性能。系统 MMU (SMMU) 允许设备看到与内核相同的中间物理地址空间,避免软件中昂贵的捕获需求。内存屏障指令用于确保内存操作的顺序,包括指令同步屏障 (ISB)、数据内存屏障 (DMB) 和数据同步屏障 (DSB)。