
Android编译原理之make编译过程
本文介绍了Android系统编译过程中make指令的使用,并以高通代码为例,详细解析了编译指令的执行流程。文章指出,make指令实质是对make的封装,通过调用build/soong/soong_ui.bash文件进行编译。接着,文章详细解析了soong_ui.bash的执行流程,包括获取make命令、编译soong_ui、执行make命令等步骤。最后,文章深入分析了build.go文件的执行流程,包括配置编译参数、编译工具、生成ninja文件、执行编译过程等步骤。

Android编译原理之lunch
本文概述了Android编译系统的演进过程,从Android 7.0开始,Google引入了ninja、kati、Android.bp和soong构建系统,旨在取代原有的GNU Make,以提高编译效率。文章详细介绍了Soong构建系统的组成,包括blueprint、kati、make、soong等工具链,并解释了它们之间的关系。同时,文章还分析了编译步骤,包括envsetup.sh和lunch命令的执行过程,以及编译工具链之间的关系。最后,文章总结了Android编译系统的演进和工具链的使用,为读者提供了对Android编译过程的全面了解。

Android系统中各image文件解压缩
本文主要介绍了在Android系统编译后如何查看镜像文件中包含的内容。通过使用simg2img、lpunpack、unpack_bootimg、mkdtimg和dtc等工具,可以将不同类型的镜像文件(如boot.img、recovery.img、dtbo.img、dtb.img、metadata.img、super.img和persist.img)转换或解析为可读格式,并挂载到目录中进行查看。文章详细说明了每个工具的使用方法以及相关命令,为开发者提供了便捷的方式来检查和理解Android系统镜像文件的结构。

高通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充电流程代码分析等。

Linux级联中断控制器注册与中断处理
本文主要介绍了Linux内核中关于中断控制器的概念和注册过程。文中首先解释了几个关键概念,如`IRQCHIP_DECLARE`、`IRQCHIP_OF_MATCH_TABLE`和`__irqchip_of_table`,这些都是内核中用于中断控制器注册的重要结构。然后详细阐述了GIC中断控制器作为root中断控制器的注册流程,包括系统启动到GICv3初始化的过程以及GICv3中断控制器的初始化。接着,文中以高通平台的tlmm pinctrl控制器为例,说明了级联中断控制器的注册过程。最后,描述了级联情况下的中断处理流程。整篇文章提供了丰富的代码和设备树节点示例,帮助读者更好地理解中断控制器的注册和处理机制。

linux源码解析05–ioremap原理
科学边界文章摘要:本文介绍了不同处理器架构对内存访问的方式,如x86架构通过I/O端口空间访问外设,而RISC架构如ARM/PowerPC则将I/O内存空间视为普通内存的一部分。文章重点讲解了ioremap映射函数,包括其定义和使用,以及如何通过ioremap_page_range函数将物理地址映射到虚拟地址,使应用程序能够通过虚拟地址访问寄存器地址。

A64指令集学习
本文档详细介绍了 Armv8-A 指令集架构,特别是 A64 指令集。A64 指令集是固定长度的 32 位指令集,用于 AArch64 执行状态。文档首先概述了指令集的基本格式、分类、助记符和条件码。接着,详细介绍了跳转指令、PC 相对寻址、系统操作指令、异常产生和返回指令、系统存储器指令、数据运算指令和 load/store 指令。最后,文档还介绍了内存屏障指令,包括 DMB、DSB 和 ISB。

ARMv8内存地址翻译
**摘要**: Armv8-A 使用虚拟内存系统,通过内存管理单元 (MMU) 将虚拟地址转换为物理地址。MMU 使用存储在内存中的转换表进行地址转换,支持多个任务在各自的私有虚拟内存空间中运行。每个程序可以使用相同的虚拟内存地址空间,即使物理内存是碎片化的。MMU 还可以控制每个内存区域的访问权限、内存顺序和缓存策略。内核空间和用户空间的虚拟地址分离,内核使用固定映射,而应用程序使用可变映射。MMU 支持两种地址空间:安全地址空间和非安全地址空间。虚拟化引入了翻译的第二阶段,将虚拟地址转换为中间物理地址,再转换为最终物理地址。转换表配置包括颗粒尺寸、缓存配置、虚拟地址标记等。访问权限通过转换表条目控制,操作系统可以使用访问标志位跟踪页面的使用情况。安全性方面,NS 位和 NSTable 位控制虚拟地址是否转换为安全物理地址或非安全物理地址。翻译旁观缓冲区 (TLB) 缓存最近访问的页面翻译,提高性能。系统 MMU (SMMU) 允许设备看到与内核相同的中间物理地址空间,避免软件中昂贵的捕获需求。内存屏障指令用于确保内存操作的顺序,包括指令同步屏障 (ISB)、数据内存屏障 (DMB) 和数据同步屏障 (DSB)。

ARMv8‑A 架构和处理器
ARM架构自1985年起不断发展,从早期的ARM内核逐步演进,增加了特性和功能。ARMv8-A架构是最新一代,支持32位和64位执行状态,引入了64位宽寄存器,同时保持与ARMv7软件的向后兼容性。它具备多项增强,如大物理地址、64位虚拟寻址、自动事件信号等,以及硬件加速密码学等功能。ARMv8-A架构的处理器包括Cortex-A53和Cortex-A57,分别针对中档、低功耗和高端计算需求,提供高性能和能源效率。

armv8的寄存器
AArch64执行状态提供了32个64位通用寄存器,每个寄存器都有32位形式。此外,还有几个特殊寄存器,如零寄存器、栈指针、程序计数器、异常链接寄存器、程序状态保存寄存器等。处理器状态PSTATE包含多个独立访问的字段,如ALU标志、执行状态、异常级别等。系统配置通过系统寄存器进行控制,使用MSR和MRS指令进行访问。字节序控制可以通过SCTLR_ELn寄存器中的EE位进行设置。在AArch64和AArch32之间切换时,AArch64寄存器映射到AArch32寄存器集,并保留状态。NEON和浮点寄存器提供128位浮点寄存器,用于保存浮点操作数和NEON操作的标量操作数和向量操作数。

为什么需要虚拟内存
本文主要探讨了操作系统中虚拟内存的概念及其重要性。虚拟内存是一种内存管理技术,它为每个进程分配一套独立的虚拟地址空间,而操作系统负责将这些虚拟地址映射到物理内存地址。这样,进程之间的内存地址相互隔离,互不干扰,有效解决了多进程环境下的内存冲突问题。此外,虚拟内存还允许进程的运行内存超过物理内存大小,因为操作系统会将不常使用的内存页面换出到硬盘上,从而释放物理内存空间。虚拟内存的管理方式主要有内存分段和内存分页,两者各有优缺点。分段机制将程序划分为不同的逻辑段,但容易出现外部内存碎片和内存交换效率低的问题;而分页机制将内存空间划分为固定大小的页,解决了外部内存碎片问题,并提高了内存交换效率。为了解决简单分页产生的页表过大的问题,引入了多级页表和TLB技术。最后,本文还介绍了Linux操作系统的内存管理方式,主要采用分页管理,同时涉及分段机制。

Git入门图文教程
Git 是一款先进的分布式版本控制系统,支持代码版本控制、跨区域多人协作等功能。本文介绍了 Git 的基本概念、安装配置、使用入门、远程仓库、分支、标签管理、撤销变更等,并结合实际工作中的 Git 实践,如 Git flow、stash、cherry-pick 等进行了详细讲解。通过本文的学习,读者可以掌握 Git 的基本操作和高级功能,更好地进行团队协作和代码管理。