- 博客(16)
- 收藏
- 关注
原创 EDK2环境搭建(二)
上一篇文章对EDK2进行了编译运行,我发现,是对EmulatorPkg进行操作,因在target.txt文件中,有指定默认编译文件。此编译文件是一种UEFI的模拟器。会生成QEMU能识别的UEFI模拟器。所以昨天在使用Build命令后,会出现此结果。在EDK2文件夹中,还有一个很重要的固件:OVMF。同样可以使用QEMU打开。OVMF即开放虚拟机固件,它一般用于测试,是虚拟机上的UEFI固件。
2023-08-18 10:49:48
593
1
原创 EDK2环境搭建(一)
在前段时间,自己也在Windows下搭建过几次,但是都卡在一些奇怪的问题上,导致无法完成搭建,这两天自己又尝试搭了几次,终于在今天编译成功了,并且进去了qemu的Shell界面。如下图示。
2023-08-18 10:34:12
772
1
原创 DXE-------Driver Execution Environment (执行驱动环境)详解
DXE是在PEI阶段之后的下一个阶段。它实现了驱动环境的搭建(UEFI第三阶段)。DXE阶段执行了大量的系统初始化工作,在PEI的基础上,进入此阶段时,内存已经可以被完全使用,因此此阶段可以进行大量复杂的工作。DXE驱动之间通过Protocol通信。当所有的Driver都执行完毕后,系统完成初始化,接着会执行一个特殊的DXE Driver 的Protocol进而进入BDS阶段。从本质上讲,BDS是一种特殊的DXE阶段的应用程序。整体流程DxeMain是DXE阶段执行的主函数,入口函数。
2023-08-18 10:16:30
1832
1
原创 AMI中的SDL文件详解
System Description Language-----系统描述语言(用于描述硬件和配置的编程语言)是AMI引入的一种描述语言,SDL简单的说就是把BIOS代码中经常要改动的地方整理出来,单独放在SDL文件里面。这样要修改BIOS的时候,只需要改动SDL文件就可以了,不用去改动什么ASM,所以用SDL的目的是为了易于BIOS工程师更好的维护整个工程。TOKEN在AMI BIOS开发中,Token是一种预处理器宏,用于在编译时控制编译选项,生成代码和配置系统行为。
2023-08-17 16:18:19
2768
2
原创 PCI和PCIE总线详解
PCI的含义是外设部件互连,PCI局部总线是1991年由intel定义的,现在PCI局部总线已经成为PC机中不可缺少的外围设备总线,几乎所有的外部设备都连接到PCI局部总线上,我们说的PCI设备,实际上就是指连接在PCI局部总线上的设备,比如:显卡,网卡等。PCIE是PCI的扩充升级,早期的PCI时期,系统为每个PCI设备分配的内存大小仅有256B。后来的PCIE时期,随着设备性能增强,PCIE设备的配置空间扩展至4KB。PCIE是一种点对点连接的总线,而不像PCI那样的共享总线。
2023-08-17 11:17:49
661
1
原创 使用VScode编译AMI代码
我现在了解到的和拿到的code,都是基于AMI的code,一般的编译AMI都需要搭配使用AMI的编译环境Veb,而Veb用到现在,一直都觉得有点卡顿,浏览代码的体验也比VScode差很多。在这之前还要,考虑设置TOOLS_DIR和EWKE_DIR的环境变量,因为在Veb中是可以通过设置自动设置的,但是VScode里面没用设置环境变量的选项。这里可以看出,Veb工具栏中的Build和Rebuild All的命令对应这里的make和make rebuild,也就是说Veb是调用此命令进行编译的。
2023-08-17 10:50:48
1176
6
原创 ACPI Source Language(ASL)详解
ASL代码通常嵌入在BIOS固件中,并由ACPI解释器在系统启动和运行时执行,以处理各种电源管理和系统配置任务。ASL代码以人类可读且与平台无关的方式编写,然后编译成ACPI机器语言(AML),这是ACPI BIOS在系统初始化期间解释的二进制格式。ASL语言由ACPI规范定义,由UEFI(统一可扩展固件接口)论坛维护和更新。规范包含有关ASL的语法、语义和功能的详细信息。
2023-08-17 10:34:37
3436
2
原创 PEI-------Pre-EFI Initialization (预先EFI初始化)详解
PEI是在SEC阶段之后的下一个阶段。它实现了初始化内存(UEFI第二阶段)。虽然SEC阶段对CPU和CPU内的资源进行了初始化,但是PEI阶段可用的资源依旧十分有限,该阶段对内存进行初始化,主要功能是为DXE阶段准备执行环境,将所需要传递给DXE的信息组成HOB(Hand Off Block)列表,最终将控制权转交到DXE。
2023-08-17 09:59:09
1377
1
原创 Advanced Configuration and Power Interface (ACPI)的详解
当操作系统查询AML解释器时,解释器在namespace中搜索请求的变量,计算与该变量关联的对象,并返回计算结果。固件开发人员将硬件规范的相关部分转换为包含用ACPI源语言(ASL)编写的代码的文件。一般地,ACPI定义了两种类型的数据结构,它们在系统固件和操作系统之间共享:数据表和定义块。②XSDT是操作系统ACPI子系统使用的第一个表,它包含系统上大多数其他ACPI表的地址。④FADT将ACPI子系统引导到DSDT, DSDT是namespace的开始,因为它是包含定义块的第一个表。
2023-08-16 10:54:04
348
1
原创 SEC-------security(安全验证阶段)详解
保存有关PEI核操作环境的信息,例如临时RAM位置的大小、堆栈位置和BFV位置。这个是UEFI当中在SEC阶段最重要的一个数据结构,将环境从以汇编语言执行转向C语言执行。(一)以临时RAM初始化为界,SEC的执行又分为两大部分:临时RAM生效(CAR)之前称为Reset Vector阶段,临时RAM生效(CAR)后调用SEC入口函数从而进人SEC功能区。所有真正的平台库实例都需要在程序集中实现真正的入口点。SEC是在上电/复位时控制平台的第一个模块。它是可信系统的根,安全阶段(第一阶段)。
2023-08-16 10:36:22
648
2
原创 UEFI启动的七个阶段简介汇总
Pre-EFI 也就是早期的EFI初始化,它也是处于启动流程中很早期的阶段,只能利用处理器的片上资源,比如上面提到的缓存作为临时内存,在C语言函数调用中当作栈使用,PEI阶段也有4档子事要处理,首当其冲的就是初始化一些永久内存,然后调用SEC阶段提供的接口,处理作为临时内存的缓存保障安全,然后把初始化好的永久内存通过Hand-Off Blocks形式进行描述,从名字可以看出,HOB是一种用于交接的块,负责阶段间的数据传递。计算机关机,休眠,睡眠,重启过程的系统信息都会在这一阶段保存。
2023-08-15 17:10:20
651
原创 中断向量表
CPU正常的运行是,不停的取指令,解码,执行,写回。首先对这些事件分类,可能发生在外部,为外部硬件中断,也可能发生在内部,为内部软件中断。注:IRQ2是一个扩展,用于链接从片,前面说外部设备与CPU连接的引脚INTR,通常会使用8259A芯片,是一个可编程中断控制器。首先要保护现场,不能影响原来程序的执行,所以中断处理前要保存寄存器的值,在执行中尽情使用,执行后还要恢复这些寄存器的值。优先级:在硬件层面进行了划分,首先NMI的优先级要高于INTR,NMI要先处理,IRQ的编号越小,优先级越高。
2023-08-15 16:57:44
1614
原创 X86寄存器
里,16位的寄存器没用具体的分配硬件,而是由32位寄存器的低16位组成。32位的寄存器不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器相比16位寄存器更具有通用性。我的理解是,寄存器是由许多基本门电路组成(锁存器),在CPU中暂存二进制数的工具,并且这些二进制数可以是数据或者是地址。个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。⑤8个调试寄存器:DR0,DR1,DR2,DR4,DR5,DR6,DR7。
2023-08-15 16:38:05
177
原创 关于运动控制的PID算法
数学公式会比较抽象,所以我再用一个简单的实例来解释这种算法,例如,在使用控制器使一锅水的温度保持在50度时,第一个想到的方法是,很简单呀,大于50度就关,小于50度就开呗。,如果过去误差累计起来,则会加大力度去修改这个误差,就像如果这锅水在冬天的雪地里,外界会给他降温,虽然一直在加热但温度体不上来,这时过去误差累计起来,I运算会使加热功率进一步提高,达到稳定状态。每个不同的系统,参数都是不一样的,平衡点都是不同的,所以在做此类项目时调参数很重要。,受Kp参数的控制,这个参数又叫比例增益。
2023-08-15 16:07:20
304
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人