🗒️ [转载]49张图26个问题了解什么是WiFi?

49 张图 26 个问题了解什么是 WiFi,比较入门的wifi基础知识点

[转载]49张图26个问题了解什么是WiFi?
🪒 [转载]Android 操作系统架构开篇 - Gityuan 博客 | 袁辉辉的技术博客

本文作为 Android 系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解 Android 系统的核心技术点,带领大家初探 Android 系统全貌以及内部运作机制。虽然 Android 系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰。Android 底层内核空间以 Linux Kernel 作为基石,上层用户空间由 Native 系统库、虚拟机运行环境、框架层组成,通过系统调用 (Syscall) 连通系统的内核空间与用户空间。对于用户空间主要采用 C++ 和 Java 代码编写,通过 JNI 技术打通用户空间的 Java 层和 Native 层(C++/C),从而连通整个系统

[转载]Android 操作系统架构开篇 - Gityuan 博客 | 袁辉辉的技术博客
Lazy loaded image [转载]ARM64 内存管理一:启动简介

在 bootloader 将控制权交给 linux kernel 前,需要完成下面几个动作 • 初始化系统中 ram,并将 ram 信息告知 kernel • 准备好 device tree blob, 并将首地址写到 x0 寄存器 • 解压内核 (option) • MMU=off, D-cache=off

[转载]ARM64 内存管理一:启动简介
Lazy loaded image [转载]ARM64 内存管理二:创建启动阶段的页表

本文场景前提: 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 内存管理二:创建启动阶段的页表
Lazy loaded image [转载]ARM64 内存管理四:setup_arch 简介 (内存管理初始化)

本篇主要介绍 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 简介 (内存管理初始化)
👡 Linux x86-64 IOMMU 详解(一)——IOMMU 简介

近期所做的项目,与 Linux 内核的 IOMMU 机制有关,因此自己尝试去了解 IOMMU 的相关知识。我在网上多方查找,却总觉得是盲人摸象,难以形成一套系统化的知识体系。并且,许多代码是基于 Linux v2.x、v3.x 内核,而我当前项目是基于较新的 Linux 5.5.4 内核,有一些代码,乃至实现机制,都发生了根本性的变化。最终,还是决定自己研究代码,终于明白了 IOMMU 的初始化流程。现撰文分享,希望之后还有同行遇到此类问题时,能够参考本文,节约学习成本。

Linux x86-64 IOMMU 详解(一)——IOMMU 简介
🏠 Linux x86-64 IOMMU 详解(二)——SWIOTLB(软件 IOMMU)

上一篇文章已经提到,IOMMU 的核心功能就是,实现在 low buffer 和 high buffer 之间的 sync,也就是内存内容的复制操作。读者可能会想,内存的复制,在内核中,不就是调用 memcpy() 函数来实现的吗?没错,这就是本文要介绍的 IOMMU 的软件实现方式——SWIOTLB。之所以说是软件实现,是因为 sync 操作在底层正是调用 memcpy() 函数,这完全是软件实现的。

Linux x86-64 IOMMU 详解(二)——SWIOTLB(软件 IOMMU)
🗓️ Linux x86-64 IOMMU 详解(三)——Intel IOMMU(硬件 IOMMU)的功能与基本原理

本系列的第一篇文章已经提到,IOMMU 分别有软件和硬件实现方式。软件 IOMMU 就是 SWIOTLB,上一篇文章已经进行过详尽的介绍。而对于硬件 IOMMU,有多个厂商都设计了自己的 IOMMU。由于我的开发机器为 Intel x86 平台,因此接触的是 Intel IOMMU。 刚开始,我也找过网上很多资料,但是它们要么是基于较旧的 Linux 内核版本,要么理解不够深入。因此,即使我并没有深入地掌握 Intel IOMMU 的每一处细节,我还是愿意将自己所了解的知识,以尽可能浅显的形式展现出来。

Linux x86-64 IOMMU 详解(三)——Intel IOMMU(硬件 IOMMU)的功能与基本原理
🔮 Linux x86-64 IOMMU 详解(四)——启用 Intel IOMMU 的配置

在 BIOS 中,需要启用 Intel VT 和 VT-d。VT 是 Virtualization Technology 的缩写,而 VT-d 是 Virtualization Technology for Directed I/O 的缩写。后者正是 Intel IOMMU 的别名

Linux x86-64 IOMMU 详解(四)——启用 Intel IOMMU 的配置
🎀 Linux x86-64 IOMMU 详解(五)——Intel IOMMU 初始化流程

下图完整展示了 Intel IOMMU 的初始化流程,是对本文所有内容的总结。只要看懂这张图,读者就能够完全理解 Intel IOMMU 的初始化流程。 接下来,笔者将按流程图的顺序,结合代码,介绍 Intel IOMMU 初始化流程的一些关键步骤。图中部分细节,本文可能并未提到,读者可结合代码自行理解。

Linux x86-64 IOMMU 详解(五)——Intel IOMMU 初始化流程