![[转载]49张图26个问题了解什么是WiFi?](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimages%2Fpage-cover%2Fnasa_orion_nebula.jpg&w=3840&q=75)
本文作为 Android 系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解 Android 系统的核心技术点,带领大家初探 Android 系统全貌以及内部运作机制。虽然 Android 系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰。Android 底层内核空间以 Linux Kernel 作为基石,上层用户空间由 Native 系统库、虚拟机运行环境、框架层组成,通过系统调用 (Syscall) 连通系统的内核空间与用户空间。对于用户空间主要采用 C++ 和 Java 代码编写,通过 JNI 技术打通用户空间的 Java 层和 Native 层(C++/C),从而连通整个系统
![[转载]Android 操作系统架构开篇 - Gityuan 博客 | 袁辉辉的技术博客](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimages%2Fpage-cover%2Fnasa_space_shuttle_columbia.jpg&w=3840&q=75)
本文场景前提: 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)
![[Code Snipaste] rtc定时器中断解决系统睡眠时的workqueue唤醒](/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimages%2Fpage-cover%2Fmet_winslow_homer_maine_coast.jpg&w=3840&q=75)