- 标签:
- 内存管理 (13)
- andorid (9)
- 必看精选 (9)
- gki (6)
- linux kernel (6)
- iommu (6)
- dma (6)
- wifi (5)
- connectivity (5)
- android (4)
- Makefile (4)
- arm (4)
- 编译原理 (3)
- 热门文章 (3)
- qcom (2)
- unpack (2)
- mtk (2)
- UEFI (2)
- 文字 (1)
- linux (1)
- sbl (1)
- abl (1)
- xbl (1)
- images (1)
- validation (1)
- mac address (1)
- dtbo (1)
- dbglevel (1)
- Code Snipaste (1)
- rtc handler (1)
- cmdline (1)
- targetfile (1)
- qupv3 (1)
- logfs (1)
- miui_task (1)
- ramdump (1)
- ssr (1)
- github action (1)
- workflow (1)
本文场景前提: ARM64,VA 是 48 bit,page size 是 4K===》在地址映射过程中,地址被分成 9(level 0) + 9(level 1) + 9(level 2) + 9(level 3) + 12(page offset) 主要描述 ARM64 启动过程中,如何建立初始化阶段页表,以便在打开 MMU 后能正确执行 linux 内核代码;场景前提:ARM64,VA 是 48 bit,page size 是 4K 在一般程序中,要想内核执行我们的一个程序,我们只要告知内核 2 个东西即可:1. 代码地址及长度;2. 程序参数地址及长度;linux kernel 就是一个特殊的程序,因此在打开 MMU 前,我们得先准备好打开 MMU 后,Linux image 地址及长度,传入 kernel 的参数地址及长度
![[转载]ARM64 内存管理二:创建启动阶段的页表](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimages%2Fpage-cover%2Fnasa_space_shuttle_columbia.jpg&w=3840&q=75)
本篇主要介绍 memblock 建立过程及分页机制化,主要有如下几个步骤 • setup_machine_fdt: 解析 dtb,收集内存信息及 bootargs • early_fixmap_init: 对保留的 fixmap 区域创建映射 • early_ioremap_init: 初始化 early_ioremap 机制 • arm64_memblock_init: 初始化 memblock 机制 • paging_init: 初始化内核页表,内存节点,内存域及页帧 page, 此函数功能较为复杂 • request_standard_resources:将 memblock.memory 挂载到 iomem_resource 资源树下 • early_ioremap_reset: 结束 early_ioremap 机制 • unflatten_device_tree: dtb 转换为 device_node tree • 根据 device node tree 初始化 CPU,psci
![[转载]ARM64 内存管理四:setup_arch 简介 (内存管理初始化)](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimages%2Fpage-cover%2Fwebb3.jpg&w=3840&q=75)