Windows 引导启动流程详述(BIOS-UEFI)

news/2024/5/9 20:21:12/文章来源:https://blog.csdn.net/qq_37596943/article/details/131442206

Windows 启动流程详述

  • BIOS 和 UEFI 的由来
    • BIOS 存在哪里
    • BIOS 程序的功能
    • BIOS 和 UEFI 的发展由来
    • 如何查看当前计算机是什么方式引导启动呢?
    • Linux 下如何查看 BIOS 大小?
  • 启动流程详述
    • 使用 BIOS 进行系统启动流程
    • 使用 UEFI 进行系统启动流程
      • SEC阶段
      • PEI阶段
      • DXE阶段
      • BDS阶段
      • TSL阶段
      • RT阶段
      • AL阶段
  • 总结
  • 参考文献


BIOS 和 UEFI 的由来

BIOS 存在哪里

上个世纪70年代初,“只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片,计算机通电后,第一件事就是读取它。

在这里插入图片描述
这块芯片里的程序叫做"基本輸出輸入系統"(Basic Input/Output System),简称为BIOS。

BIOS 程序的功能

存储在 ROM 芯片中的这一小段程序就是 BIOS 程序,虽然现在新出现的引导启动方式已经有了 UEFI 启动(或者 EFI 启动),但是其实 UEFI 或者 EFI 的一部分也是存储在这个芯片中。它们在计算机上电后的流程基本是一致的。上电后,硬件操作会将芯片中的程序读到内存中的固定位置,并赋值 PC 和 CS 固定的数值使得 CPU 能够从内存固定的位置去取值执行,从而开始最初的 BIOS 程序执行(这里的 BIOS 程序是指 BIOS 和 UEFI 的统称)。一直以来,我们都将计算机的引导启动程序称为 BIOS ,无论现在它还是否叫 BIOS 或者 UEFI ,我们还是习惯统称其为 BIOS。

BIOS 和 UEFI 的发展由来

最早的 BIOS 就是存放在计算机 ROM 中用于引导开机的一段程序代码(汇编代码)。其功能也很简单纯粹,计算机硬件自检、CMOS设置、寻找存放有操作系统的存储硬件、读取存储硬件的程序、引导操作系统启动、提供硬件 I/O 和硬件中断等基础功能。这些基础功能对于计算机上电后的运行是必不可少的一部分。(就像最简单的 51 单片机一样,最初上电后也需要执行一段最基本的寄存器初始化和内存代码读取的汇编指令)

虽然 BIOS 作为电脑加电启动所必不可少的部分,但是从其于 1975 年诞生之日起近 30 余年, 16 位汇编语言代码,1M 内存寻址,调用中断一条条执行的理念和方式竟然一点都没有改变,虽然经各大主板商不懈努力,BIOS 也有了 ACPI(Advanced Configuration Power Interface)一种基于BIOS 的系统电源管理方案 (是由BIOS实现)提供CPU和外设的电源管理功能;当空闲的时候会被OS调用提供CPU的电源管理。 、USB 设备支持,PnP 即插即用支持等新东西,但是这在根本上没有改变 BIOS 的本质,而 Intel 为了迁就这些旧技术,不得不在一代又一代处理器中保留着 16 位实模式(否则根本无法开机的)。但是,英特尔在 2001 年开发了全新的安腾处理器,采用 IA-64 架构,并推出了全新的 EFI。后来证明,安腾处理器、IA-64 架构没有推广开来,而 EFI 和后继的 UEFI 却发扬光大,成为现在电脑的主要预启动环境。

EFI,是 Extensible Firmware Interface 的词头缩写,直译过来就是可扩展固件接口,它是用模块化、高级语言(主要是 C 语言)构建的一个小型化系统,它和 BIOS 一样,主要在启动过程中完成硬件初始化,但它是直接利用加载 EFI 驱动的方式,识别系统硬件并完成硬件初始化,彻底摒弃读各种中断执行。EFI 驱动并不是直接面向 CPU 的代码,而是由 EFI 字节码编写成, EFI 字节码是专用于 EFI 的虚拟机器指令,需要在 EFI 驱动运行环境 DXE 下解释运行,这样 EFI 既可以实现通配,又提供了良好的兼容。此外,EFI 完全是 32 位或 64 位,摒弃 16 位实模式,在 EFI 中就可以实现处理器的最大寻址,因此可以在任何内存地址存放任何信息。另外,由于 EFI 的驱动开发非常简单,基于 EFI 的驱动模型原则上可以使 EFI 接触到所有硬件功能,在 EFI 上实现文件读写,网络浏览都是完全可能的。BIOS 上的的 CMOS 设置程序在 EFI 上是作为一个个 EFI 程序来执行的,硬件设置是硬件设置程序、而启动管理则是另一个程序,保存 CMOS 又是另一个程序,虽然它们在形式的 Shell 上是在一起的。

EFI 在功能上完全等同于一个轻量化的 OS(操作系统),但是 EFI 在制定时就定位到不足以成为专业 OS 的地位上,首先,它只是一个硬件和操作系统间的一个接口;其次,EFI 不提供中断访问机制,EFI 必须用轮询的方式检查并解释硬件,较 OS 下的驱动执行效率较低,最后,EFI 只有简单的存储器管理机制,在段保护模式下只将存储器分段,所有程序都可以存取任何一段位置,不提供真实的保护服务。

伴随着 EFI,一种全新的 GUID 磁盘分区系统(GPT)被引入支持,传统 MBR 磁盘只能存在 4 个主分区,只有在创建主分区不足 4 个时,可以建立一个扩展分区,再在其上建立被系统识别的逻辑分区,逻辑分区也是有数量的,太多的逻辑分区会严重影响系统启动,MBR硬盘分区最大仅支持2T容量,对于现在的大容量硬盘来说也是浪费。GPT 支持任意多的分区,每个分区大小原则上是无限制的,但实际上受到 OS 的规定限制不能做到无限,不过比 MBR 的 2T 限制是非常重要的进步。GPT 的分区类型由 GUID 表唯一指定,基本不可能出现重复,其中的 EFI 系统分区可以被 EFI 存取,用来存取部分驱动和应用程序,虽然这原则上会使 EFI 系统分区变得不安全,但是一般这里放置的都是些“边缘”数据,即使其被破坏,一般也不会造成严重后果,而且也能够简单的恢复回来。

当 EFI 发展到 1.1 的时候,Intel 决定把 EFI 公之于众,于是后续的 2.0 吸引了众多公司加入,EFI 也不再属于英特尔,而是属于了 Unified EFI Form 的国际组织,EFI 在 2.0 后也遂改称为 UEFIUEFI 其中的 EFI 和原来是一个意思,U 则是 Unified(一元化、统一)的缩写,所以 UEFI 的意思就是“统一的可扩展固件接口”,与前身 EFI 相比,UEFI 主要有以下改进:

  • 首先,UEFI 具有完整的图形驱动功能,之前的 EFI 虽然原则上加入了图形驱动,但为了保证 EFI 和 BIOS 的良好过渡,EFI 多数还是一种类 DOS 界面(仍然是 640480 VGA 分辨率),只支持 PS/2 键盘操作(极少数支持鼠标操作),不支持 USB 键盘和鼠标。到了 UEFI,则是拥有了完整的图形驱动,无论是 PS/2 还是 USB 键盘和鼠标,UEFI 一律是支持的,而且 UEFI 在显卡也支持 GOP VBIOS 的时候,显示的设置界面是显卡高分辨率按 640480或1024*768 显示,因此画面虽小但很清楚,但是这样会导致屏幕周围大片留黑,不过鱼和熊掌不可兼得,除非 UEFI 默认窗口大小也是最高分辨率。
  • 其次,UEFI 具有一个独特的功能,安全启动,而 EFI 是没有安全启动的,安全启动(Secure Boot),实际上通俗的解释是叫做固件验证。开启 UEFI 的安全启动后,主板会根据 TPM 芯片(或者 CPU 内置的 TPM )记录的硬件签名对各硬件判断,只有符合认证的硬件驱动才会被加载,而 Win8 以后的 Windows 则是在操作系统加载的过程中对硬件驱动继续查签名,符合 Windows 记录的硬件才能被 Windows 加载,这在一定程度上降低了启动型程序在操作系统启动前被预加载造成的风险,但是这也会造成系统安装变得垄断。

无论 EFI 还是 UEFI,都必须要有预加载环境、驱动执行环境、驱动程序等必要部分组成,为了支持部分旧设备(如在 UEFI 下挂载传统 MBR 硬盘,不支持 UEFI 启动的显卡在 UEFI 下仍然支持运行等),还需要一个 CSM 兼容性支持模块、EFI 或 UEFI 都是仅支持 GPT 磁盘引导系统的,后面的内容会具体谈一下 EFI 或 UEFI 启动计算机的过程。

从这里,我们就能发现,之前的 BIOS 引导启动需要配合 MBR 的传统磁盘分区进行,而后来者 UEFI 则是引导新的 GPT 磁盘分区进行启动。所以现在主流的启动流程可以简单概括如下两种:

  • BIOS + MBR
  • UEFI + GPT

如何查看当前计算机是什么方式引导启动呢?

在“此电脑”上右键选择“管理”,弹出“计算机管理”选择“磁盘管理”,如果能找到一个“EFI系统分区”,那么就是UEFI引导方式了。
在这里插入图片描述

Linux 下如何查看 BIOS 大小?

Linux 下可以查看 BIOS 大小通过 dmidecode 这个命令来查看。也就是读取 BIOS 的信息。

root@aliyun:~# dmidecode -t bios -q  # 方法一
BIOS InformationVendor: SeaBIOSVersion: 8c24b4cRelease Date: 04/01/2014Address: 0xE8000Runtime Size: 96 kBROM Size: 64 kB --- ROM Size,在此可以看到,BIOS 大小为 64K。Characteristics:BIOS characteristics not supportedTargeted content distribution is supportedBIOS Revision: 0.0root@aliyun:~# cd /sys/class/dmi/id/  # 方法二
root@aliyun:id# ls
bios_date          chassis_serial   modalias        product_serial   sys_vendor
bios_vendor        chassis_type     power           product_uuid     uevent
bios_version       chassis_vendor   product_family  product_version
chassis_asset_tag  chassis_version  product_name    subsystem

启动流程详述

前面,我们讲述了关于 BIOS 和 UEFI 的由来和基本作用。了解了它们在计算机启动过程中所需要发挥的作用后,下面就来详细看一下在计算机上电后它们具体是如何执行和操作来引导操作系统正常启动的。

使用 BIOS 进行系统启动流程

BIOS 用于计算机硬件自检、CMOS 设置、引导操作系统启动、提供硬件 I/O、硬件中断等4项主要功能,因此 BIOS 程序可以分为若干模块,主要有 Boot Block 引导模块、CMOS 设置模块、扩展配置数据(ESCD)模块、DMI 收集硬件数据模块,其中引导模块直接负责执行 BIOS 程序本身入口、计算机基本硬件的检测和初始化,ESCD 用于 BIOS 与 OS 交换硬件配置数据,DMI 则充当了硬件管理工具和系统层之间接口的角色,通过 DMI,用户可以直观地获得硬件的任何信息,CMOS 设置模块就是实现对硬件信息进行设置,并保存在 CMOS 中,是除了启动初始化以外 BIOS 程序最常用的功能。

BIOS 本身是汇编语言代码,是在 16 位实模式下调用 INT 13H 中断执行的,由于 x86-64 是一个高度兼容的指令集,也为了迁就BIOS的16位实模式的运行环境,所以即使现在的 CPU 都已是 64 位,如果还是在 BIOS 启动(基本见于 09 年以前的主板),在开机时仍然都是在 16 位实模式下执行的。16 位实模式直接能访问的内存只有 1MB,就算你安了 4G、8G 或者 16G 还是 32G 内存,到了 BIOS 上一律只先认前 1MB。在这 1MB 内存中,前 640K 称为基本内存,后面 384K 内存留给开机必要硬件和各类 BIOS 本身使用,具体如下图所示:

在这里插入图片描述

  1. 如上图所示,当按下 power on 之后,此时的 CPU 处于 real address mode。由硬件负责将 BIOS 64K 的内容加载到 0xF00000xFFFFF(64K 内存)。并将 CS(code segment) 置为 0xF000,IP(instruction pointer) 置为 0xFFF0。组合起来的内存地址 PC 就是 0xFFFF0
  2. 此时 CPU 从 PC = 0xFFFF0 处开始取指、执行。那么从 0xFFFF00xFFFFF 只有 16Bytes。空间太小了,能放啥呢?但是可以跳到其他地方去执行啊。不错,这里存放的有一条指令是 jmp far f000:e05b, 组合起来就是 0xfe05b。注意这个地址可是在 0xF00000xFFFFF 范围之内,也就是这条指令跳转到 BIOS 内部的代码去执行。从 0xFE05B0xFFFF0 将近 8K 内存,代码不少。
  3. 此时 CPU 从 PC = 0xfe05b 开始取值、执行。具体干啥呢?就是执行所谓的开机自检。检查计算机硬件。同时去找启动扇区,那什么才是启动扇区呢?若 0 盘 0 道 1 扇区最后两个字节分别是 0x55,0xaa,那就是启动区。很像 java class 文件中的魔数,就是标记一下。同时将找到的启动扇区(512Bytes) 复制到内存 0x7C000x7DFF(512Bytes) 处。最后会将 CS 置为 0x0000, IP 置为 0x7C00,组合起来就是 0x7C00
  4. 此时 CPU 从 PC = 0x7C00 开始取值、执行。具体干啥呢?这就是开发人员可以决定的了。在启动扇区上可以是加载 OS Kernel 的代码,硬盘分区,boot loader 等。

将上述细节流程进行概括如下:

  1. 上电并稳定后,CPU执行地址 0xFFFF0H 处指令,此处为BIOS程序;

  2. BIOS 进行硬件自检,没有问题后加载硬盘的第一个扇区到内存0x7c00H 处,第一个扇区为 MBR(Master
    Boot Record),MBR 包含执行程序和分区表;

  3. CPU 开始执行 MBR 程序,查找第一个活动分区,把活动分区的第一个扇区加载到内存中,活动分区第一个扇区为 PBR(Partition Boot Record);

  4. CPU 开始执行 PBR,第一个指令就是跳过 BPB(BIOS Parameter Block)到可执行代码处;BPB 包含比较多参数,有族的大小、MFT 记录大小、MFT 位置等,用于读取 NTFS 文件;

  5. PBR 读取 VBR(Volume BootRecord,占用分区开始的16扇区)剩余的 15 扇区到内存中;接着 CPU 跳转到 0x07C0:027A 处,执行 BOOTMGR 代码(第二个扇区中);

  6. 开始寻找 bootmgr.exe,找不到则寻找 ntldr.exe(win vista之前的系统);

  7. CPU 加载并跳转到 bootmgr.exe 处执行,读取 BCD 文件,如果含有多个系统,则列举显示供用户选择;

  8. 选择的是 Windows 则读取 winload.exe 文件到内存中,CPU 跳转到winload.exe 处执行,读取文件 \windows\bootstat.dat,有需要则显示引导菜单,比如安全引导等等;接着加载内核程序 Ntoskrnl.exe,相关辅助 HAL.dll、CI.dll、PSSHED.dll、BootVID.dll,把 CPU 执行权交给内核程序;

  9. 内核程序执行系统初始化。

在这里插入图片描述

使用 UEFI 进行系统启动流程

前面已经介绍了 UEFI 的由来,所以相比 BIOS 来说 UEFI 会在扩展性、易用性等等方面有很大的改进。下面就来详细讲述 UEFI 的启动执行流程。

一般地,预加载环境和驱动执行环境是存储在 UEFI(UEFI BIOS)芯片中的,当打开电源开关时,电脑的主要部件都开始有了供电,与 BIOS 不同的是,UEFI 预加载环境首先开始执行,负责 CPU 和内存(是全部容量)的初始化工作,这里如出现重要问题,电脑即使有报警喇叭也不会响,因为 UEFI 没有去驱动8255发声,不过预加载环境只检查 CPU 和内存,如果这两个主要硬件出问题,屏幕没显示可以立即确定,另外一些主板会有提供 LED 提示,可根据 CPU 或内存亮灯大致判断故障。

CPU 和内存初始化成功后,驱动执行环境(DXE)载入,当 DXE 载入后,UEFI 就具有了枚举并加载 UEFI 驱动程序的能力,在此阶段,UEFI 会枚举搜索各个硬件的 UEFI 驱动并相继加载,完成硬件初始化工作,这相比 BIOS 的读中断加载速度会快的多,同样如加载显卡的 UEFI 驱动成功,电脑也会出现启动画面,硬件驱动全部加载完毕后,最后同 BIOS 一样,也得去启动操作系统。

在启动操作系统的阶段,同样是根据启动记录的启动顺序,转到相应设备(仅限 GPT 设备,如果启动传统 MBR 设备,则需要打开 CSM 支持)的引导记录,引导操作系统并进入,这里需要注意的是,UEFI 在检测到无任何操作系统启动设备时,会直接进入 UEFI 设置页面,而不是像 BIOS 那样黑屏显示相关信息。

  1. 按下电源键,电源向主板以及其它设备供电,刚开始电压不稳,主板会持续发送 RESET 信号给 CPU,CPU 执行初始化。当电压稳定后,主板停止发送 RESET 信号,CPU 开始执行指令;

  2. CPU 读取 UEFI 指令,执行 UEFI 初始化,执行其它设备的初始化;

  3. 查找 EFI 分区,EFI 分区不需要一定是第一个分区;

  4. 加载 \EFI\Boot\bootx64.efi,在安装 Windows 时实际上会使用\EFI\Microsoft\Boot\bootmgfw.efi 的内容替换到 \EFI\Boot\bootx64.efi,所以\EFI\Boot\bootx64.efi 其实就是 \EFI\Microsoft\Boot\bootmgfw.efi

  5. bootmgfw.efi 会读取 BCD 文件,BCD 是一个数据库文件,如果包含多个系统,信息会包含在 BCD 中,通过显示一个系统列表供用户选择;

  6. BCD 中包含每个系统的引导文件的路径,Windows 的是\Windows\System32\winload.efi,加载到内存中并执行;

  7. winload.efi 读取 \Windows\bootstat.dat 文件,有需要则显示引导菜单,比如安全引导等等;接着加载内核程序 Ntoskrnl.exe,相关辅助HAL.dll、CI.dll、PSSHED.dll、BootVID.dll,把 CPU 执行权交给内核程序;

  8. 内核程序执行系统初始化。

在这里插入图片描述

从 Intel 官方的资料,可以详细讲 UEFI 的执行流程概括成如下七个阶段:

  • SEC(安全验证)->
  • PEI(EFI前期初始化)->
  • DXE(驱动执行环境)->
  • BDS(启动设备选择)->
  • TSL(操作系统加载前期)->
  • RT(系统系统运行阶段)->
  • AL(系统灾难恢复期或关机)

如下图所示:

在这里插入图片描述

详细说明 UEFI 这七个阶段如下:

SEC阶段

作为计算机上电后第一阶段,SEC会做一些与硬件相关的验证,并且将控制权交给PEI Foundation。(注:IA-32和Itanium会有差别)

SEC阶段主要功能:

处理平台启动及重启信号
创建临时存储区域
作为可信系统的根
传递参数给下一阶段(既PEI Foundation)
1、处理平台启动机重启信号:

系统上电信号处理,系统重启信号处理,系统异常信号处理。

2、创建临时存储区域:

SEC阶段需要初始化一些临时内存(这时各种外设及内存并没有被初始化),作为程序的运行载体,仅对CPU和CPU内部Cache作为临时RAM,区别于普通的内存,我们称它为CAR(Cache As RAM)。因为内存并没有初始化,需要将Cache配置成为no-eviction,当read/write miss时候并不会向内存发出miss事件,如果这时向内存发出miss事件会导致平台故障。

3、作为可信系统的根

任何安全设计中,后续模块获得控制的完整性,由调用者证实必须有根,既SEC阶段作为整个可信系统的根。

4、传递参数给下一阶段(既PEI Foundation)

SEC阶段需要为PEI阶段做准备,最终SEC需要把控制权交给PEI。

需要准备如下信息给 PEI Foundation:

  • 当前的系统状态,PEI可以根据这些状态判断系统的健康状况。(注:IA-32和Itanium会有差别)
  • BFV(Boot Firmware Volume)的地址和大小
  • 临时RAM的地址和大小
  • 栈的地址和大小
  • EFI_SEC_HOB_DATA_PPI这个HOB(Optional)

PEI阶段

PEI阶段资源依然十分有限,PEI后期才会初始化内存,主要功能就是初始化一些硬件设备,并且给DXE准备执行环境,通过HOB传递给DXE Foundation,最终将控制权交给DXE Foundation。

初始化内存
准备memory相关的HOB
准备FV相关的HOB
控制权交给DXE Foundation
PEI阶段主要由PEI Foundation、PEIM Dispatcher来处理上述操作。

PEI Foundation:负责初始化gPeiServices和流程执行
PEI Dispatcher:找出系统中所有的PEIM,并根据PEIM之间的依赖关系按顺序执行PEIM,其中CPU/Memory初始化都是由特定的PEIM来完成的,其中DxeIpl来Load DxeCore。

PEI阶段流程

在这里插入图片描述

DXE阶段

这一阶段,内存已经完全可以使用了,这个阶段进行大量的工作,主要是提供:

  • DXE Foundation:负责初始化一系列服务如BootServices/RuntimeServices/DxeServices,和安装一些ConfigurationTable。
  • DXE Dispatcher:负责分发DXE Drivers,包括MM Drivers也是在这个阶段共同分发。
  • DXE Drivers:负责初始化一些Protocol及安装Binding Driver为后续使用。

BDS阶段

BDS阶段理论上也是DXE阶段的一部分,主要负责执行可启动策略,主要包括:

  • 初始化控制台设备
  • 为设备加载相关的驱动,由Binding Driver来决定怎么加载。
  • 为BIOS Setup做准备。
  • 根据系统设置加载和启动可启动选项。

TSL阶段

由 BDS 阶段 LoadImage 并 StartImage 的 grub 镜像。

这一阶段由 grub 执行,资源由 UEFI kernel 提供,当 grub 调用 ExitBootServices 后就进入系统 Runtime 阶段。

RT阶段

这阶段控制权完全交给了 OS,保留 RuntimeServices 交给 OS 使用, MM Mode 脱离于 OS 独立运行。

AL阶段

在 RT 阶段,如果遇到灾难性错误,固件提供错误处理机制和灾难恢复机制,UEFI/PI Spec 都未定义该阶段的行为。

总结

综上对 BIOS 和 UEFI 启动计算机过程的叙述,可以概括为:

  • BIOS 先要对 CPU 初始化,然后跳转到 BIOS 启动处进行 POST 自检,此过程如有严重错误,则电脑会用不同的报警声音提醒,接下来采用读中断的方式加载各种硬件,完成硬件初始化后进入操作系统启动过程;
  • UEFI 则是运行预加载环境先直接初始化 CPU 和内存,CPU 和内存若有问题则直接黑屏,其后启动 PXE 采用枚举方式搜索各种硬件并加载驱动,完成硬件初始化,之后同样进入操作系统启动过程。

此外,BIOS 是 16 位汇编语言程序,只能运行在 16 位实模式,可访问的内存只有 1MB,而 UEFI 是 32 位或 64 位高级语言程序(C 语言程序),突破实模式限制,可以达到要求的最大寻址。

参考文献

Intel 资料:

  • https://edc.intel.com/content/www/us/en/design/products-and-solutions/software-and-services/firmware-and-bios/firmware-interface-table/
  • https://www.intel.cn/content/www/cn/zh/developer/articles/tool/unified-extensible-firmware-interface.html?wapkw=UEFI

知乎资料:

  • https://zhuanlan.zhihu.com/p/483888207
  • https://zhuanlan.zhihu.com/p/342088326
  • https://zhuanlan.zhihu.com/p/54108702
  • https://zhuanlan.zhihu.com/p/283054574
  • https://zhuanlan.zhihu.com/p/36976698#:~:text=1%20BIOS%E5%8A%A0%E7%94%B5%E8%87%AA%E6%A3%80%EF%BC%88Power%20On%20Self%20Test%20–%20POST%EF%BC%89%E3%80%82%202,%E6%A3%80%E6%9F%A5MBR%E7%9A%84%E7%BB%93%E6%9D%9F%E6%A0%87%E5%BF%97%E4%BD%8D%E6%98%AF%E5%90%A6%E7%AD%89%E4%BA%8E55AAH%EF%BC%8C%E8%8B%A5%E4%B8%8D%E7%AD%89%E4%BA%8E%E5%88%99%E8%BD%AC%E5%8E%BB%E5%B0%9D%E8%AF%95%E5%85%B6%E4%BB%96%E5%90%AF%E5%8A%A8%E8%AE%BE%E5%A4%87%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%B2%A1%E6%9C%89%E5%90%AF%E5%8A%A8%E8%AE%BE%E5%A4%87%E6%BB%A1%E8%B6%B3%E8%A6%81%E6%B1%82%E5%88%99%E6%98%BE%E7%A4%BA%22NO%20ROM%20BASIC%22%E7%84%B6%E5%90%8E%E6%AD%BB%E6%9C%BA%E3%80%82%20%E5%BD%93%E6%A3%80%E6%B5%8B%E5%88%B0%E6%9C%89%E5%90%AF%E5%8A%A8%E8%AE%BE%E5%A4%87%E6%BB%A1%E8%B6%B3%E8%A6%81%E6%B1%82%E5%90%8E%EF%BC%8CBIOS%E5%B0%86%E6%8E%A7%E5%88%B6%E6%9D%83%E4%BA%A4%E7%BB%99%E7%9B%B8%E5%BA%94%E5%90%AF%E5%8A%A8%E8%AE%BE%E5%A4%87%E7%9A%84MBR%E3%80%82%203%20%E6%A0%B9%E6%8D%AEMBR%E4%B8%AD%E7%9A%84%E5%BC%95%E5%AF%BC%E4%BB%A3%E7%A0%81%E5%90%AF%E5%8A%A8%20%E5%BC%95%E5%AF%BC%E7%A8%8B%E5%BA%8F%20%E3%80%82

w3school 资料:

  • https://www.w3cschool.cn/bioswqsc/zuxjo6.html

CSDN 资料:

  • https://blog.csdn.net/power_to_go/article/details/106645417#:~:text=x86%20%E6%9E%B6%E6%9E%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B%201%20%E5%A6%82%E4%B8%8A%E5%9B%BE%E6%89%80%E7%A4%BA%EF%BC%8C%E5%BD%93%E6%8C%89%E4%B8%8B%20power%20on%20%E4%B9%8B%E5%90%8E%EF%BC%8C%E6%AD%A4%E6%97%B6%E7%9A%84%20CPU,%E4%BB%8E%20PC%20%3D%200x7C00%20%E5%BC%80%E5%A7%8B%E5%8F%96%E5%80%BC%E3%80%81%E6%89%A7%E8%A1%8C%E3%80%82%20%E5%85%B7%E4%BD%93%E5%B9%B2%E5%95%A5%E5%91%A2%EF%BC%9F%20%E8%BF%99%E5%B0%B1%E6%98%AF%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%E5%8F%AF%E4%BB%A5%E5%86%B3%E5%AE%9A%E7%9A%84%E4%BA%86%E3%80%82%20

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_323795.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广州华锐互动:机电专业VR模拟实操教学平台提供沉浸式的实践操作和训练机会

虚拟现实(VR)技术是一种先进的技术,可以应用于机电专业的培训中。以下是VR技术应用到机电专业培训的一些好处: 模拟实际操作环境:VR技术可以创建一个虚拟的环境,模拟真实的机械和电气设备的操作环境。这使得学生可以在安全的环境…

自定义MVC

目录 一、MVC概念描述 1、什么是MVC? 2、什么是自定义MVC? 3、自定义MVC有什么用(主要用途)? 二、MVC三层架构 第一种版本 JSP页面 servlet 结果 第二种版本 JSP代码 servlet 结果 第三种版本 jsp页面 s…

Ubuntu18.04 系统设置修改物理内存-迅为RK3568开发板

打开虚拟机,如下图。单击红色框中的“虚拟机”。如下图所示: 然后点击“设置”弹出虚拟机的设置界面,如下图所示: 更多教程B站搜:迅为3568开发板

云原生运维实战 | 快速解决高可用K8s集群证书到期问题

欢迎关注「全栈工程师修炼指南」公众号 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折,莫待无花空折枝。 ” 作者主页&#xff1…

(小程序)uniapp调接口完整流程

(小程序)uniapp调接口完整流程 代码&#xff1a; <script lang"ts" setup>import { ref } from "vue"; const form ref({searchVal: "", });//搜索const searchClick () > {console.log(form.value.searchVal)let data {text: form…

Redis高并发分布式锁

文章目录 高并发场景秒杀抢购超卖Bug高并发场景秒杀抢购Demo测试结果 JVM级别锁使用nginx对本地服务进行负载均衡 Redis实现分布式锁Redis分布式锁实现DemoRedis分布式锁有关问题 分布式锁性能的提升减少锁的粒度使用异步处理 高并发场景秒杀抢购超卖Bug 在今天的数字化世界中&…

Python操作SQLite数据库

文章目录 这篇博客很简单&#xff0c;简单记录下SQLite基础使用。有些数据文件是.db为扩展名的&#xff0c;要用到SQLite进行读写和增删改查操作。SQLite数据库是一种轻量级的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;以单个文件的形式存储&#xff0c;整…

【数据挖掘】时间序列教程【二】

2.4 示例&#xff1a;颗粒物浓度 在本章中&#xff0c;我们将使用美国环境保护署的一些空气污染数据作为运行样本。该数据集由 2 年和 5 年空气动力学直径小于或等于 3.2017 \&#xff08;mu\&#xff09;g/m\&#xff08;^2018\&#xff09; 的颗粒物组成。 我们将特别关注来自…

优盘数据恢复怎么做?3个方法分享!

我的优盘里保存了很多有纪念意义的照片&#xff0c;但是刚刚将u盘插入电脑后&#xff0c;发现有些照片已经损坏了。我想将优盘里的数据恢复&#xff0c;有什么靠谱的方法吗&#xff1f;给我推荐一下吧&#xff01; 优盘是一种便携式存储设备&#xff0c;常用于存储和传输数据。…

Linux v4l2框架分析

1. 概述 V4L2(Video for Linux 2)&#xff1a;Linux内核中关于视频设备驱动的框架&#xff0c;对上向应用层提供统一的接口&#xff0c;对下支持各类复杂硬件的灵活扩展&#xff1b; V4L2框架&#xff0c;主要包括v4l2-core、meida framework、videobuf2等模块&#xff0c;这也…

攻防世界-Crypto-Normal_RSA

题目描述&#xff1a;下载附件后&#xff0c;附件中只有两个文件&#xff0c;一个是加密后的密钥&#xff0c;一个是公钥文件 背景知识&#xff1a;RSA加密算法 现在相当于给出了密文和公钥&#xff0c;需要我们去求解明文 1. 思路分析 既然要解密&#xff0c;那么必须要获取…

Facebook Insights分析工具解读,掌握关键数据指标

什么是Facebook Insights&#xff1f; Facebook Insights是Facebook平台上的一项内置分析工具&#xff0c;旨在帮助企业和品牌了解其在Facebook上的表现和受众互动情况。该工具提供了丰富的数据和指标&#xff0c;可以帮助用户洞察粉丝群体、了解发布内容的表现&#xff0c;并…

Hutool 30

Hutool是一个Java工具包&#xff0c;提供了丰富的工具类库和简化开发的工具方法。它的目标是提供一套丰富、实用、高效和易用的Java工具类&#xff0c;以提升开发者的开发效率和开发质量。以下是Hutool的一些主要特点和功能模块&#xff1a; 常用工具类&#xff1a;Hutool提供了…

百度智能车竞赛丝绸之路2——手柄控制

百度智能车竞赛丝绸之路1——智能车设计与编程实现控制 百度智能车竞赛丝绸之路2——手柄控制 一、机器人设计 二、实现原理 本教程使用Python的Serial库和Struct二进制数据解析库去实现Xbox手柄百度大脑学习开发板&#xff08;上位机&#xff09;和机器人控制器&#xff08;…

你的服务器还安全吗?用户数据是否面临泄露风险?

一系列严重的网络安全事件引起了广泛关注&#xff0c;多家知名公司的服务器遭到黑客挟持&#xff0c;用户的个人数据和敏感信息面临泄露的风险。这些事件揭示了网络安全的脆弱性和黑客攻击的威胁性&#xff0c;提醒着企业和个人加强对网络安全的重视。 一、入侵案例1.1 蔚来数据…

Pycharm中成功配置PyQt5(External Tools),设计好界面直接生成python代码

1、安装PyQt5和PyQt5-tools 在Pycharm中设置好Python环境&#xff0c;点击File-Settings-Project-Python Interpreter 设置好后退出&#xff0c;点击窗口下的Terminal&#xff0c;输入 # 直接安装输入pip install pyqt5&#xff0c;如果太慢可以用国内镜像源&#xff0c;若出…

PS扣签名

打开Photoshop CS6&#xff0c;依次点击“文件”-“打开”&#xff0c;把签名照导入进来。 在“选择”菜单下点击“色彩范围”。 此时鼠标形状变成了一支笔&#xff0c;点击签名上黑色的地方&#xff0c;适当调整颜色容差&#xff0c;点击“确定”完成选择。 按住CtrlJ组…

Postman设置断言

目录 前言&#xff1a; 一、断言的定义 二、Postman断言的语法 三、Postman中chai.js断言常用语法 前言&#xff1a; 在进行API测试时&#xff0c;断言是一项重要的功能。它能帮助我们验证接口的响应是否符合预期结果&#xff0c;从而确保API的正确性和可靠性。在Postman中…

【微服务】什么是微服务?-- 全面了解微服务架构

What is Microservices — Edureka 您有没有想过&#xff0c;什么是微服务以及扩展行业如何与它们集成&#xff0c;同时构建应用程序以满足客户的期望&#xff1f; 要了解什么是微服务&#xff0c;您必须了解如何将单体应用程序分解为独立打包和部署的小型微型应用程序。本文将…