03 2022 档案
摘要:建议先看:https://www.cnblogs.com/zhangzhiwei122/p/16085238.html memblock 属于 “六、内存布局” 这一部分。收集物理内存信息 memblock 介绍 memblock 内存管理机制主要用于 Kernel 启动阶段的内存管理,可以认为从k
阅读全文
摘要:上一篇:命令行参数获取 https://www.cnblogs.com/zhangzhiwei122/p/16060542.html start_kernel 中解析参数的几个入口 870 行 early 阶段参数解析 - setup_arch -> parse_early_params 871 行
阅读全文
摘要:调用顺序 setup_arch(&command_line)->setup_machine_fdt(__fdt_pointer); 需要注意的是*command_line 是指向到 boot_command_line;而boot_command_line是一个静态数组,在 init/main.c 里
阅读全文
摘要:调用顺序 arch/arm64/kernel/setup.c setup_arch -> setup_machine_fdt setup_machine_fdt 171static void __init setup_machine_fdt(phys_addr_t dt_phys) 172{ 173
阅读全文
摘要:1、初始化 arch/arm64/kernel/setup.c( setup_arch )-> arch/arm64/mm/ioremap.c( early_ioremap_init ) -> mm/early_ioremap.c ( early_ioremap_setup ) early_iore
阅读全文
摘要:arch/arm64/include/asm/fixmap.h 中的定义 enum fixed_addresses 地址类型枚举,在 101 行的函数 __set_fixmap(idx, phys) 第一个参数用到。 将一个物理地址,映射到 idx 代表的 VA 地址上面。 25/* 26 * He
阅读全文
摘要:1、线性空间下移 4.X 内核中 线性映射区域 位于 内核地址空间的高位处。介绍文章举例: https://blog.csdn.net/u012142460/article/details/105867221/ 线性映射区域下移 2019年8月的一个commit,将线性映射区域 下移了。 commi
阅读全文
摘要:1、cpu_number 是一个 percpu 类型的 int 变量, arch/arm64/include/asm/smp.h。 34 行,声明 percpu 变量 cpu_number . 在 arch/arm64/kernel/smp.c 中定义。 2、raw_smp_processor_id
阅读全文
摘要:include/linux/percpu-defs.h 1、 SHIFT_PERCPU_PTR 230 ~ 231 定义了 SHIFT_PERCPU_PTR ,输入 __p 和 __offset ,直接使用 RELOC_HIDE 对两者进行相加。 RELOC_HIDE 见 https://www.c
阅读全文
摘要:38 行定义 unsigned long 类型的 __ptr 39 行,将 输入 ptr 的值 放到 __ptr 里面。 40 行,__ptr 里面的值和 offset 的值相加。 但是返回的类型还是 ptr 的类型。 背景: 假设有对象类型 struct people { int age; int
阅读全文
摘要:linux/arch/arm64/kernel/setup.c 85void __init smp_setup_processor_id(void) 86{ 87 u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK; 88 set_cpu_logi
阅读全文
摘要:thread_info * task_thread_info(tsk) 由task 结构体得到 thread_info 结构体的指针。 linux/include/linux/sched.h 由 这儿可以知道,两种情况, 1729 ~ 1732 、thread_info 对象在 task 结构体内部
阅读全文
摘要:图片来自:https://blog.csdn.net/longwang155069/article/details/104346778 threadinfo不在task中-没有配置 CONFIG_THREAD_INFO_IN_TASK current 的实现 那如何获取一个进程的task_struc
阅读全文
摘要:1、__entry_task为内核静态定义的percpu变量,在进程切换时,会将next进程的进程描述符保存到该变量中。 arch/arm64/kernel/process.c 497 498/* 499 * We store our current task in sp_el0, which is
阅读全文
摘要:版权声明:本文为CSDN博主「liuhangtiant」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/liuhangtiant/article/details/90456136 前言 本文介绍kernel_en
阅读全文
摘要:https://github.com/ARM-software/arm-trusted-firmware Trusted Firmware-A (TF-A) is a reference implementation of secure world software for Arm A-Profil
阅读全文
摘要:enable_mmu 输入 X0 SCTRL_EL1 的值,见 setup_cpu 的返回值。 X1 TTBT1_EL1 的值, 见 primary_switch 964 行设置 x1 以下内容来自 https://blog.csdn.net/lgjjeff/article/details/9337
阅读全文
摘要:cpu setup 正如其名,初始化 CPU 寄存器。 413 无效 TLB transition lookaside buffer 。这相当于是一块 页表的缓存。页表我们刚在 head.S 设置好,使能分页后,应该使用我们 内存中设置的,而不是 TLB 中的,所以 无效 TLB 。 416 ~ 4
阅读全文
摘要:注释写的很详细了。 映射一段 VA 地址。 输入参数: tbl table location - 使用调用前 设置的值 rtbl - 会覆盖为 rtbl = tbl + PAGE_SIZE, 所以调用前的值不关心。 vstart 虚拟地址的起始值 使用调用前 设置的值 vend 虚拟地址的结束值 使
阅读全文
摘要:上一篇: https://www.cnblogs.com/zhangzhiwei122/p/16030252.html 1 ~ 8 介绍了 顶层的makefile 中的内容。 里面大量用到了 $(build)=xx 的方式。 虽然 $(build)=xx 用法网络已经有很多介绍了。但是,如果不 加入
阅读全文
摘要:上一篇: https://www.cnblogs.com/zhangzhiwei122/p/16029589.html 背景说明 版本: 5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。 在线浏览: https://lxr.missinglinkelectro
阅读全文
摘要:上一篇:https://www.cnblogs.com/zhangzhiwei122/p/16029312.html 背景说明 版本: 5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。 在线浏览: https://lxr.missinglinkelectron
阅读全文
摘要:上一篇: https://www.cnblogs.com/zhangzhiwei122/p/16029174.html 背景说明 版本: 5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。 在线浏览: https://lxr.missinglinkelectro
阅读全文
摘要:上一篇: https://www.cnblogs.com/zhangzhiwei122/p/16027368.html 背景说明 版本: 5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。 在线浏览: https://lxr.missinglinkelectro
阅读全文
摘要:版权声明:本文为CSDN博主「正在起飞的蜗牛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_42031299/article/details/119720236 前言 这四种赋值运算符在Makef
阅读全文
摘要:上一篇: https://www.cnblogs.com/zhangzhiwei122/p/16026987.html 背景说明 版本: 5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。 在线浏览: https://lxr.missinglinkelectro
阅读全文
摘要:上一篇: https://www.cnblogs.com/zhangzhiwei122/p/16025969.html 背景说明 版本: 5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。 在线浏览: https://lxr.missinglinkelectro
阅读全文
摘要:上一篇:https://www.cnblogs.com/zhangzhiwei122/p/16025859.html 背景说明 版本: 5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。 在线浏览: https://lxr.missinglinkelectron
阅读全文
摘要:背景说明 版本: 5.10.0 - 下面分析中 使用的行号,都是 参考 这个 版本的 Makefile 。 在线浏览: https://lxr.missinglinkelectronics.com/linux/Makefile 使用场景: 在源码文件夹下面建立一个build 文件夹,然后使用 O=b
阅读全文
摘要:摘录自 原文: Linux内存管理(二):ARMv8 地址转换 https://blog.csdn.net/yhb1047818384/article/details/108210044 memory attributes Table descriptor和table entry, block en
阅读全文
摘要:参考: 参考:Arm Architecture Reference Manual for A-profile architecture Chapter D5 The AArch64 Virtual Memory System Architecture 内存属性存放位置 MAIR_EL1, Memor
阅读全文
摘要:代码如下 <1> 把 返回地址 从lr 寄存器 复制到 x28 寄存器。在 <18> , ret 时使用。 <2> 把 从 init_pg_dir 到 init_pg_end 这一段 内存对应的缓存 失效。 __inval_dcache_area 参考 https://www.cnblogs.com
阅读全文
摘要:TTBRx_EL1 寄存器 里面存放页表 起始物理地址。 注意,BADDR 最小 bit 是 1. ASID - An ASID for the translation table base address. 页表起始物理地址的 Address Space ID. 作用参考: https://blo
阅读全文
摘要:版权声明:本文为CSDN博主「代码改变世界ctw」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_42135087/article/details/109057232 一、TCR寄存器 在ARM C
阅读全文
摘要:参考:Arm Architecture Reference Manual for A-profile architecture Chapter D5 The AArch64 Virtual Memory System Architecture 本文只从里面摘取,使用 AArch64 模式时的相关信息
阅读全文
摘要:set_cpu_boot_mode_flag 使用 el2_setup 的返回值,填充 __boot_cpu_mode 这个全局数组 , 1、__boot_cpu_mode 也在 head.S 里面定义的。初始值如下: /* * We need to find out the CPU boot mo
阅读全文
摘要:el2_setup 检查运行级别,如果是 EL1,简单设置 SCTRL_EL1 后就退出。 如果是 EL2级别,就要作很多EL2 需要的设置,然后切换到EL1 级别,然后退出。 <1> 使用 SP_EL{1,2} 寄存器作为 SP 寄存器。 <2> 获取当前运行 级别到 X0,然后和 EL2 级别进
阅读全文
摘要:preserve_boot_args 在 arch/arm64/kernel/head.S 中实现。 作用就是保存 X0 X1 X2 X3 寄存器的值到 boot_args 这个数组中。 1 /* 2 * Preserve the arguments passed by the bootloader
阅读全文
摘要:__inval_dcache_area(kaddr, size) 让一段 kaddr 开始的,长度为 size 的 内存 数据 缓存失效 在 arch/arm64/mm/cache.S 中实现的这个函数。 1 /* 2 * __inval_dcache_area(kaddr, size) 3 * 4
阅读全文
摘要:版权声明:本文为CSDN博主「代码改变世界ctw」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_42135087/article/details/109383407 在ARMV8中,只有CTR_E
阅读全文
摘要:环境 x86-64 PC ubuntu 系统 工具准备 aarch64-linux-gnu-gcc:可以通过下载 linaro 工具链 http://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gn
阅读全文
摘要:1、我们些的汇编代码 head.S 是被 汇编软件处理的。所以,我们 .S 里面的内容怎么写,应该看 汇编软件 的指南。 gnu 汇编器 文档: https://sourceware.org/binutils/docs-2.38/as/index.html aarch64-下gnu as 可以识别的
阅读全文
摘要:背景介绍: 参考: http://www.wowotech.net/linux_kenrel/UEFI.html 1、UEFI是什么鬼? BIOS实际上就是IBM PC兼容机(多么古老的一个词汇啊)主板上的固件(firmware),这些固件可以在系统启动过程中初始化硬件,self test,加载bo
阅读全文
摘要:参考:Arm Architecture Reference Manual for A-profile architecture C5.2 Special-purpose registers 当前运行状态 PSTATE不是一个寄存器,它表示的是保存当前 process 状态信息的一组寄存器或者一些标志
阅读全文
摘要:31 个,(不是 32 这个 2 的 5 次方) X0,X1,X2,......,X30 X0 ~ X7 用作参数传递和返回值存放。 X0 用于存放函数返回值。 X8 别名 XR,用于存放 函数 的返回值。 x0和x8 都用作返回值, 当返回值为基本数据类型时,存放在 X0中,如果返回值为 结构体对
阅读全文