2024-11-26
[linux内存管理] 第004章 内存架构和内存模型
文档详细介绍了计算机系统中以内存为研究对象的两种架构:NUMA和UMA,以及对应的内存模型:FLATMEM、DISCONTIGMEM、SPARSEMEM。并对内存管理发展过程中,与UMA和NUMA对应的三种内存模型进行了简述。
2024-11-26
[linux内存管理] 第003篇 内存分布
本文详细阐述了进程在编译时和运行时,其内存的分布情况,并简单介绍了在arm64 系统中虚拟地址的分布情况。文章首先介绍了内存的概念和存储方式,随后解释了虚拟内存的由来和作用,最后从进程和Linux内核的角度分别探讨了内存的管理机制。
2024-11-26
[linux内存管理] 第005篇 启动代码分析之汇编部分
本文详细分析了Linux内核启动阶段的引导程序、内核起始地址、head.S、内存映射和__cpu_setup函数。引导程序负责初始化物理内存、设置设备树、解压缩内核映像并将其加载到内核运行地址,然后跳转到内核入口地址。内核起始地址在arch/arm64/kernel/vmlinux.lds.S文件中定义,并使用readelf工具读取vmlinux文件进行验证。head.S文件包含内核启动汇编代码,主要完成切换到EL1模式、创建恒等映射页表、为打开MMU做处理器相关初始化、启动MMU并跳转到start_kernel()函数等任务。内存映射部分分析了恒等映射和粗粒度内核镜像映射的原理和实现,以及map_memory宏、compute_indices宏和populate_entries宏的作用。__cpu_setup函数负责为打开MMU做一些处理器相关初始化,包括清除本地TLB、启用FP/ASIMD、设置TCR寄存器、设置SCTLR_EL1寄存器等。__primary_switch函数启动MMU,并跳转到start_kernel()函数进入内核的C语言部分。
2024-11-25
如何下载以及编译ACK?
本文介绍了如何下载Android通用内核代码(ACK),并对其进行编译,包括使用Bazel和旧版build.sh脚本的方法。文章还详细说明了如何修改KMI接口,包括修改特定文件、更新ABI以及向Google提交代码更改的步骤。整个流程涉及命令行操作、文件编辑和版本控制,旨在帮助开发者定制和更新Android内核。
2024-11-25
[linux内存管理] 第001篇 内存与内存管理机制
内存管理是操作系统核心功能之一,经历了从纸带存储到现代内存管理机制的演变。内存,作为数据货架,以字节为单位存储数据,并通过内存地址进行编号。内存类型包括RAM、ROM、闪存和虚拟内存等。RAM分为SRAM和DRAM,SRAM速度快但成本高,DRAM容量大且成本低。内存分段机制将程序内存空间划分为多个逻辑分段,解决了地址空间保护问题,但内存使用效率低。内存分页机制将内存划分为固定大小的页面,提高了内存使用效率。MMU负责将虚拟页面映射到物理页面,实现内存管理机制。
2024-11-25
[linux内存管理] 第002篇 页表查询过程简述
对内存管理单元(MMU)、页表(PT)、页表项(PTE)、转换后备缓冲器(TLB)等概念的总结,并对ARMv8处理器中的分页管理原理进行了阐述。同时,我还对Linux内核中关于页表操作的API进行了简要分析,包括PGD、PUD、PMD的划分,以及页表设置相关的宏定义。
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编译过程的全面了解。