ARM64 Linux 内核学习指南:从基础到实践

linux 内核ARM64启动 这个是与机器有关的,可能使用了内部算法自动的定位并取得物理内存的大小,这些CPU在内核之外的保留的内存区域(dtb里的 /memreserve/ 的指定区域)空转,并轮询“cpu-release-addr”地址,该地址也在保留区域内。任何描述给内核的内存(包括低于镜像起始地址的),如果没有标记为保留的(dtb里的 /memreserve指定)将被内核认为是可以使用的。所有可写的系统寄存器在这内核镜像将要进入的异常级别(EL)必须在一个更高的异常级别(EL)通过软件初始化,来防止在一个未知的状态执行。 阅读详情

前言

ARM64 作为当今主流的处理器架构,被广泛应用于移动设备、嵌入式系统和服务器领域。学习 ARM64 在 Linux 内核中的实现,不仅有助于深入理解操作系统底层机制,还能提升在内核开发、驱动编写、虚拟化等领域的专业能力。

本指南面向对 Linux 内核有一定了解的读者,提供完整的学习思路和实践路径,帮助你高效掌握 ARM64 Linux 内核。


在这里插入图片描述

一、ARM64 Linux 内核学习的全局视角

在学习 ARM64 内核时,我们可以将其划分为几个核心模块,每个模块都涉及关键技术点:

1. 内核启动与地址映射

  • 了解 ARM64 内核的启动流程(从 Bootloader 到 start_kernel)
  • 学习地址映射方式,包括 TTBR0/TTBR1、PAGE_OFFSET 等概念
  • 解析 Device Tree 与 ACPI 设备描述的作用

2. 页表与 MMU 机制

  • 掌握 ARM64 页表结构(4 级页表:PGD -> PUD -> PMD -> PTE)
  • 研究 MMU(Memory Management Unit)如何管理虚拟地址
  • 解析 TLB(Translation Lookaside Buffer)对性能的影响

3. 中断与异常处理

  • 了解 ARM64 的异常模型(同步异常、IRQ、FIQ、SError)
  • 探索 GIC(Generic Interrupt Controller)如何管理中断
  • 学习 arch/arm64/kernel/entry.S 的异常向量表实现

4. 内存管理与缓存一致性

  • 解析 ARM64 内存管理(物理/虚拟地址映射、内存分区)
  • 研究 Cache Coherency(PoC、PoU)和内存屏障(dsb、dmb、isb)
  • 探讨 ASID(Address Space Identifier)如何优化 TLB
  • 重点:
    • 物理地址 vs 虚拟地址转换机制
    • Linux 内存分区:ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM
    • 内核态 vs 用户态内存管理策略
    • kmalloc、vmalloc、mmap 的区别与应用

5. 进程调度与 SMP 机制

  • 学习 Linux CFS 调度器在 ARM64 上的实现
  • 探索 ARM64 多核(SMP)架构的 CPU 启动流程
  • 了解 arch/arm64/kernel/smp.c 如何管理 CPU 之间的通信

6. 高级内核特性

  • 研究 KVM(Kernel-based Virtual Machine)在 ARM64 上的虚拟化支持
  • 解析 TrustZone 安全架构及其在 Linux 运行环境中的应用
  • 深入理解 ftrace、perf 等内核性能调试工具

二、面试常见问题与答案

1. ARM64 内核启动流程是怎样的?

  • 从 Bootloader 加载内核 -> 进入 head.S -> 进入 start_kernel() -> 挂载根文件系统 -> 启动 init 进程。

2. ARM64 Linux 如何管理页表?

  • 采用 4 级页表(PGD -> PUD -> PMD -> PTE),使用 create_pgd_mapping() 建立映射。

3. 什么是 TLB?如何优化?

  • TLB(Translation Lookaside Buffer)用于缓存页表映射,减少 MMU 查表开销。
  • 通过 ASID(地址空间标识符)、TLB flush 控制优化 TLB。

4. PoC 和 PoU 的区别?

  • PoC(Point of Coherency):所有 CPU 和 DMA 设备都能看到的数据。
  • PoU(Point of Unification):指令缓存和数据缓存一致的点。

5. ARM64 的中断系统如何工作?

  • 采用 GIC(Generic Interrupt Controller)管理中断。
  • 使用 arch/arm64/kernel/entry.S 处理异常和中断。

6. 什么是 TrustZone?

  • TrustZone 提供安全世界和普通世界隔离,提高系统安全性。

7. 什么是 KVM,如何在 ARM64 上使用?

  • KVM(Kernel-based Virtual Machine)是 Linux 内核的虚拟化解决方案。
  • 通过 modprobe kvm 启用,使用 QEMU+KVM 运行虚拟机。

8. 什么是 SMP,如何在 ARM64 上支持?

  • SMP(对称多处理)允许多个 CPU 核心共享内存。
  • 通过 arch/arm64/kernel/smp.c 实现多核启动。

三、最佳实践与实验方法

1. 选择合适的实验环境

在实践 ARM64 内核学习时,可以选择以下两种环境:

QEMU 虚拟环境(适合 MMU、页表、异常处理等实验)
qemu-system-aarch64 -M virt -cpu cortex-a57 -smp 2 -m 2G -kernel Image -nographic
  • 适用于调试页表映射、异常处理、中断机制
  • 可结合 GDB 远程调试分析内核行为
ARM64 开发板(如 Raspberry Pi 4B / NXP i.MX8MP)(适合真实设备驱动与性能测试)
  • 运行真实的 ARM64 Linux 发行版(Yocto、Ubuntu、Debian)
  • 测试设备树(Device Tree)解析、驱动开发等
  • 使用 dmesg 解析内核日志,排查异常问题

2. 分析关键内核代码

  • 启动流程: arch/arm64/kernel/head.S,分析 start_kernel() 执行路径
  • 页表管理: arch/arm64/mm/mmu.c,理解 create_pgd_mapping() 如何建立映射
  • 异常处理: arch/arm64/kernel/entry.S,解析 el1_sync 如何捕获系统调用
  • SMP 初始化: arch/arm64/kernel/smp.c,探索 secondary_start_kernel() 如何初始化多核

3. 使用调试工具优化学习过程

  • GDB + QEMU 远程调试
qemu-system-aarch64 -M virt -cpu cortex-a57 -smp 2 -m 2G -kernel vmlinux -s -S
  • ftrace 分析内核函数调用路径
echo function_graph > /sys/kernel/debug/tracing/current_tracer
  • perf 采样分析内核性能瓶颈
perf record -g -a sleep 5
perf report

四、进阶学习与发展方向

完成 ARM64 Linux 内核基础学习后,可以深入以下领域:

  1. 驱动开发:基于 ARM64 开发设备驱动,如 GPIO、I2C、SPI、PCIe
  2. 实时系统(RT)优化:深入 PREEMPT_RT 补丁,提高系统实时性
  3. 虚拟化技术(KVM/Hypervisor):研究 ARM64 服务器环境的 KVM、Xen、Docker
  4. 安全机制:研究 ARM64 TrustZone、SELinux、Cgroup 及其安全加固

结论

学习 ARM64 Linux 内核需要建立清晰的知识体系,采用“框架+实践+调试”的方式,逐步深入。从 QEMU 模拟实验入手,再到开发板实际测试,结合代码分析和调试工具,可以有效掌握 ARM64 的内核机制。

希望这篇指南能够帮助你建立正确的学习路径,加速对 ARM64 Linux 内核的掌握!

【Note】《Linux 内核深度解析:基于 ARM64 架构的 Linux 4.x 内核》 第三章:内存管理(Memory Management) ARM64 使用64 位虚拟地址空间配置虚拟地址空间页表级别每页大小4KB 页48-bit VA4 级页表4KB16KB 页48-bit VA3 级页表16KB64KB 页42-bit VA2 级页表64KBLinux 采用基于页(Page)的虚拟内存管理方式,每个页的大小通常为 4KB,通过页表完成虚拟地址到物理地址的映射。页表结构,每一级页表映射更多地址。用户空间地址段内核空间地址段ARM64 的内核地址空间以开始,一般为。 阅读详情

相关推荐

Vscode 调试arm64 linux内核

vscode调试arm64 linux内核步骤记录

每个人的博客 2929

arm64架构的linux中断分析(一)

第二组表示异常发生在ELn(n可以为1,2,3),处理异常的特权等级也是ELn(n可以为1,2,3),但是这里是linux内核,所以我们的特权为EL1,我们可以理解为异常发生在EL1,处理异常的特权等级也是EL1。软件中断号,有时候也叫虚拟中断号,是由内核定义的中断号,用于执行内核函数或服务。当触发流程走到cpu后,cpu会跳转到中断异常向量表,执行后面的操作:读取GIC信息,了解到是GPIO触发的中断,再读取GPIO控制器的信息,了解到是某一个GPIO的外设导致的,执行这个外设的中断处理函数。

jianjian的博客 2519

Linux内核配置解析 - 概述(基于ARM64架构)

对刚接触Linux kernel的同学来说,遇到的第一个问题就是:我该从哪里入手?话说Linux kernel的打开方式是多种多样的:从简单的设备驱动入手;从源代码的目录结构入手;从kernel的启动过程入手;从大的功能模块入手;等等。不管怎样,每条都是正途(条条大路通罗马嘛)。而本文(以及随后的系列文章),将从Linux kernel的配置项入手,从整体上认识Linux kernel。

m0_74282605的博客 1320

ARM64-Linux:内核裁剪过程(全志H616平台)

为基于arm64 全志H616平台的开发板烧录Linux系统

m0_54251560的博客 2301

QEMU运行ARM64 Linux内核

Qemu运行ARM64 Linux内核

qilu0882的专栏 1157

Linux内核编译全流程:从配置到ARM64部署

Linux内核编译是操作系统定制与嵌入式开发的基础能力,其本质是通过配置驱动(Kconfig)、构建系统(Makefile)和交叉工具链协同,将C/汇编源码转化为目标平台可执行镜像。核心原理在于ARCH与CROSS_COMPILE变量对架构路径和编译器的显式绑定,确保arch/子目录加载与指令集生成严格匹配。技术价值体现在系统裁剪、安全加固与硬件适配三大维度,广泛应用于ARM64服务器、国产SoC开发板及实时边缘设备。本文聚焦内核编译的工程化落地,覆盖环境准备、defconfig裁剪、menuconfig规

weixin_30336531的博客 620

CentOS(4)——关于Linux软件下载时:amd64、x86、x86_64、arm64 的说明

在安装GitLab Runner的时候,去清华源下载RPM包时发现同一个软件有许多不同架构的安装包,常见的有amd64、x86、x86_64、arm64这些架构,这就类似于Windows下安装软件需要区分32bit和64bit。在Linux系统中,我们除了区分位数以外还需要区分不同的CPU架构,本篇文章将简单介绍这些架构的不同。

Hemameba的博客 1万+

脑机接口最新发展动态报告 (2024-2025)

脑机接口动态

高山 4106

arm64 Linux操作系统知识点

低地址存放:指向上一个栈 (父函数的栈)的栈基地址 FP,类似于链表的prev指针。应用程序要访问内核就必须通过系统调用层,内核可以在系统调用层对应用程序的访问权限、用户类型和其他一些规则进行过滤,以避免应用程序不正确地访问内核。高地址存放:当前函数的返回地址,也就是进入该函数时LR的值,本书把这个地址称为P_LR(Previous LR)。在函数执行时,FP和SP寄存器会指向该函数栈空间的FP处。4. 函数返回时,ARM64处理器先把栈中的P_LR的值载入当前LR,然后执行RET指令。

weixin_42198851的博客 1850

DSPF28335:从零到一,实战GPIO与外部中断的嵌入式系统交互设计

本文以德州仪器DSPF28335芯片为例,详细讲解了嵌入式系统中GPIO与外部中断(EXTI)的实战配置方法。通过一个完整的按键控制LED并触发ADC采样的项目,深入剖析了GPIO寄存器配置、三级中断机制(外设-PIE-CPU)以及中断服务函数编写的核心要点,帮助开发者掌握嵌入式交互设计的基石,并提供了关键的避坑指南与调试清单。

weixin_29169899的博客 115

win10下Miracast无线投屏使用教程及异常解决方案(超详细)

文章目录一、什么是Miracast?二、主流的无线投屏技术有哪些特点?三、如何查看自己的win10电脑是否支持Miracast无线投屏功能?四、win10电脑如何使用Miracast无线投屏功能? 一、什么是Miracast? Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的3C设备(如智能手机、电视、投影、电脑等...

帅气的小白的博客 44万+

QEMU启动ARM64 Linux内核

本文介绍采用 qemu 模拟ARM-64bit开发板,并启动ARM64 Linux内核。

许振坪的专栏 1万+

SIPVicious实战指南:从零开始掌握VoIP渗透测试(Kali Linux环境)

本文为SIPVicious实战指南,详细介绍了在Kali Linux环境下进行VoIP渗透测试的完整流程。从环境准备与工具安装开始,逐步讲解如何使用svmap扫描SIP服务器、svwar枚举PBX分机号,以及svcrack进行密码安全测试,并整合svreport生成报告。旨在帮助安全从业者从零开始,系统掌握这套经典开源工具,在授权范围内有效评估VoIP系统的安全性。

weixin_29327977的博客 539

ARM DS-5单步调试ARM64 linux 内核

目录 1 介绍 2 开发环境 3 准备工作 3.1 Ubuntu环境准备 3.2 源代码准备 3.3 DS-5准备 3.4 使用DS-5调试源码 3.4.1 建立源码工程 3.4.2创建debug配置 3.4.2 使用kernle_debug调试arm64 linux内核代码 4 使用-O0的内核进行调试 4.1 内核下载 4.2 编译链设置 4.3 构建源码 4....

pomelo coder 6221

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 283

解决ADS1.2报错Cannot obtain license

报错如下 将licenses文件下的license内容进行修改: 修改为如下内容即可。 # # Generated on 2021-dec-1 by licwizard # PACKAGE ads armlmd 1.200 E32F0DE5161D COMPONENTS="armasm compiler bats armulate axd adwu fromelf armlink codewarrior armsd" INCREMENT ads armlmd 1.200 permanent uncounte

qq_46110320的博客 3462

搭建qemu运行arm64 Linux环境

修改完mk_initrd.sh 脚本后,我们先创建一个make_initrd目录,并把 mk_initrd.sh 脚本拷贝到该目录下,由于在ubuntu下做mount和umount操作需要sudo权限,所以在执行mk_initrd.sh脚本前需要先在终端进入sudo权限,然后再执行该 mk_initrd.sh 脚本生成initrd.ext4镜像,命令和日志如下:​​​​​​​。然后通过qemu.sh脚本来让模拟器运行linux内核,对应的命令和日志如下:​​​​​​​。

linux_research的博客 3830

黑猫带你学eMMC协议第33篇:eMMC CQE功能介绍——一种模仿UFS命令队列的发送机制

本文详细介绍了eMMC协议中的Command Queuing Engine (CQE)及其相关功能。CQE是eMMC 5.1版本引入的新特性,旨在通过硬件处理命令队列,简化软件代码的编写。文章首先介绍了CQE的基本概念,包括其与Host Controller Interface (HCI)的区别,以及CQE如何通过Task Descriptor List (TDL)管理任务。接着,文章详细描述了CQE如何发送命令和数据给eMMC,并解释了Task Descriptor和Transfer Descriptor

黑猫奥利奥的博客 981

Arm64下Linux内核Image头的格式

Linux对于Arm64架构,其编译出来的内核默认是不支持压缩的;而对于Arm32版本来说,默认支持内核解压的操作(代码位于arch/arm/boot/compressed目录下,可是arm64目录下没有对应的代码)。如果实在想压缩内核,也可以在bootloader里面解压好后放到内存中指定的位置。 struct arm64_image_header { __le32 code0; __l...

Roland_Sun的专栏 5140

【软考高项论文】论信息系统项目管理的干系人绩效域

例如,在处理与电信运营商合作铺设光纤网络的问题时,考虑到其在通信设施建设和运维方面的专业性和重要性,我们将之定位为高权力高利益的干系人,给予了高度关注和优先沟通。项目全程,我们对干系人绩效域的执行效果进行了定期检查和评估,通过定量与定性的数据收集,确认了项目在干系人管理上的成效,具体表现为:建立了稳固的工作关系网络,使干系人普遍认可项目目标;鉴于本项目牵涉到政府各级部门、企事业单位、市民团体、技术研发伙伴等多种类型的干系人,且干系人的诉求和影响力各异,因此,有序且持续的干系人参与管理显得尤为关键。

Programming Talk 1681

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux下ARM64内核空间分布及页表查询

Linux下ARM64内核空间分布及页表查询 下面的ko模块可用于查询内核空间及用户程序空间虚拟地址分布及属性,以及查询对应虚拟地址的物理地址。 github地址https://github.com/MaybeYoc/pid_page_tables 在git根目录Makefile中将KDIR指向自己的linux内核代码目录即可,使用make编译出pid_page_tables.ko。注意此ko适用于arm64架构。 一. 打印内核空间地址分布 使用命令echo kernel > /sys/kern

看我眼色行事的博客 3789

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ARM64 Linux 内核页表的块映射

作者 | 宋宝华责编 | 张文头图|优快云 下载自视觉中国出品 | 优快云(ID:优快云news)内核文档 Documentation/arm64/memory.rst 描...

优快云资讯 2763

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

突破性能瓶颈:Linux内核ARM64架构中NEON指令的优化实践

在嵌入式设备和移动终端性能竞争日益激烈的今天,每一个时钟周期的优化都至关重要。作为占据全球90%以上移动设备市场份额的操作系统内核,Linux在ARM64架构上的性能表现直接影响着数十亿用户的体验。本文将深入剖析Linux内核如何利用ARM NEON(Advanced SIMD)技术实现计算效能的跃升,通过解密加密算法、图像处理等核心场景的优化实践,为开发者提供一套可复用的高性能编程范式。 ##...

gitblog_01173的博客 1377

Linux内核内存管理 ARM64 内核内存布局的详细解析

ARM64 架构采用 48 位虚拟地址空间(最大支持 52 位,但主流实现为 48 位),划分为两部分:用户空间:0x0000_0000_0000_0000 ~ 0x0000_FFFF_FFFF_FFFF(256TB),供用户进程使用。内核空间:0xFFFF_0000_0000_0000 ~ 0xFFFF_FFFF_FFFF_FFFF(256TB),由内核独占。核心特点:无高端内存:48 位寻址空间足够大(256TB),无需像 ARM32 那样动态映射高端内存。

sinat_37817094的博客 2128

Linux内核6.12 ARM64启动流程详解

preserve_boot_args: 保存bootloader传递的参数(X0-X3寄存器)init_kernel_el: 初始化异常级别(EL),确保CPU运行在EL1或EL2。arm64_memblock_init(): 初始化内存模型。bootmem_init(): 初始化bootmem分配器。kmem_cache_init(): SLAB分配器初始化。smp_init_cpus(): 初始化多核CPU信息。early_trap_init(): 设置早期异常处理。

baron-周贺贺-代码改变世界ctw 1228

宋宝华: ARM64 Linux内核页表的块映射

内核文档Documentation/arm64/memory.rst描述了ARM64 Linux内核空间的内存映射情况,应该是此方面最权威文档。以典型的4K页和48位虚拟地址为例,整个内...

宋宝华 1753
上一篇: 处理器架构 :如何高效学习 - 从理论到实践
下一篇: AI + Yocto 项目:嵌入式 AI 的未来之路
嵌入式孙老师
博客等级 码龄7年 5687粉丝 902原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值