smp_setup_processor_id是kernel的第2个函数,其主要作用是: 读取CPU寄存器中唯一标识符MPIDR_EL1 建立逻辑与物理CPU的映射关系 初始化Per-CPU偏移量 输出启动信息 这个函数的具体实例化在/arch/arm64/kernel/setup.h: void _
kernel最开头是一段汇编,本文讲的最开头的kernel的C代码的函数展开。 init task底加魔术字函数的展开 也就是/init/main.c文件start_kernel主函数中的第一个实际执行函数set_task_stack_end_magic。(这个函数的主要作用是给kernel自身主进
进程是来自CPU硬件结构、虚拟地址空间独立性、资源共享性、多核任务调度管理等多个维度的需求共同相互作用诞生的一个概念,用于形象的描述具备独立地址空间的正在运行的程序。 从数据结构的角度在kernel中谈论进程,就是在谈论如下特质:
首先需要明确一下kernel的ACPI解析发生在哪里,以及驱动如何获取ACPI命名空间中的变量。 首先是需要介绍一下kernel编译过程中的initcall机制。这个机制大意是说,在kernel的C语言文件中,通过宏展开的方式可以将一些函数带上特定的标记。然后,在kernel编译完进行链接的阶段,可
在之前的文章中已经成功实现了基础的ConOut打印,现在可以来尝试深入了解一下ACPI了。 ACPI本身是一个于UEFI协议分离的单独协议,对UEFI来说,主要是在系统表的Configuration Table中携带一个RSDP的指针指向ACPI表。 系统表中的EFI_CONFIGURATION_T
这两个表在EDK2、GRUB2、KERNAL等多个项目中都会涉及,且同时还存在于一份标准的ACPI文档之中。 ACPI规范本体的5.2章节详细规范了这一系列的表格事宜:5. ACPI Software Programming Model — ACPI Specification 6.6 docume
主要节选自ACPI协议的5.2章节:5. ACPI Software Programming Model — ACPI Specification 6.6 documentation ACPI表项的入口来自于EFI系统表的Configuration Table中的一个携带特定GUID的RSDP表项头
经过之前多篇文章的积累,目前终于具备了搭建EFI的自有shell的各种条件。完成这种初步的hello world是后续打印各种协议信息的基础。 需要使用的东西是UefiMain.h所包含的表、SimpleText.h所包含的输入输出协议。 具体的实现思路是: 1、编写EFI_Main的主函数,引用其
在编译自定义的makefile时,会发现脱离autogen生成脚本时,引用头文件会进行一次编译器参数定义下的自动typedefine的判断。这个判断依赖于编译器命令的传入参数,所以这里结合实际的autogen生成GNUmakefile来做一次具体的解析。 原始的问题可以表示为这样的图: 造成这个现象
这里保留一份完整的MakeFile文件用来做Shell或者其他类似EFI文件的生成。 由于GenFw是EDK2项目下挂的工具,因此EFI的制作,即便没有依赖EDK提供的系统表库,依然最好在EDK2项目下创建对应子项目,具体来说,在EDK2项目下挂包含两个主要操作: 1、在EDK2的子目录下建立文件夹