当前位置: 首页 > news >正文

【Linux基础】深入理解Linux环境下的BIOS机制

目录

引言

1 BIOS基础概念详解

1.1 BIOS的定义与本质

1.2 BIOS的核心功能

1.2.1 硬件初始化与检测

1.2.2 系统设置管理

1.2.3 引导加载功能

1.3 BIOS的存储结构

2 Linux启动过程中的BIOS角色

2.1 Linux启动的完整流程

2.2 BIOS与Linux内核的交互

2.2.1 内存信息传递

2.2.2 硬件资源分配

3 BIOS的高级特性与Linux支持

3.1 ACPI与Linux电源管理

3.1.1 ACPI表结构

3.1.2 Linux中的ACPI支持

3.2 UEFI与Linux启动

3.2.1 UEFI启动流程

3.2.2 Linux对UEFI的特性支持

4 BIOS配置与Linux系统管理

4.1 BIOS配置工具

4.2 常用BIOS信息查看命令

4.2.1 dmidecode命令

4.2.2 其他常用命令

5 总结


引言

在Linux系统的世界里,虽然我们通常关注的是内核、用户空间和应用程序,但系统启动过程中最底层的BIOS(Basic Input/Output System,基本输入输出系统)扮演着至关重要的角色。BIOS作为固化在计算机主板ROM芯片中的固件程序,是计算机加电后执行的第一段软件代码,它为Linux系统的启动奠定了硬件基础。

1 BIOS基础概念详解

1.1 BIOS的定义与本质

BIOS(Basic Input/Output System,基本输入输出系统)是一组固化到计算机主板上的只读存储器(ROM)芯片中的程序。作为计算机启动过程中的第一个软件程序,BIOS承担着硬件初始化和系统引导的关键职责。
BIOS启动流程描述:
  • 计算机加电:当用户按下电源按钮,计算机开始加电,电源稳定输出各路电压
  • CPU复位:CPU执行复位操作,程序计数器(PC)被设置为预定义地址(通常是0xFFFF0)
  • 执行BIOS代码:CPU从ROM芯片中执行BIOS程序,这是计算机启动后的第一段代码
  • POST自检:BIOS执行加电自检(Power-On Self-Test),检测关键硬件是否正常
  • 硬件初始化:初始化CPU、内存、显卡、键盘等基本硬件设备
  • 查找启动设备:按照BIOS设置中的启动顺序查找可启动设备
  • 读取引导扇区:从启动设备的第一个扇区读取引导程序(如GRUB)
  • 加载引导程序:将引导程序加载到内存的特定位置(0x7C00)
  • 移交控制权:将CPU控制权交给引导程序,开始Linux系统的启动过程

1.2 BIOS的核心功能

1.2.1 硬件初始化与检测

BIOS负责在Linux系统启动前对所有硬件进行初始化和检测:
  • CPU初始化:设置CPU的基本工作模式,开启必要的功能,如缓存、虚拟模式等
  • 内存检测:检测内存容量和完整性,建立内存映射表,为Linux内核提供内存信息
  • 设备初始化:初始化键盘、鼠标、串口、并口等基本输入输出设备
  • 存储设备检测:检测硬盘、光驱等存储设备的存在性和基本参数

1.2.2 系统设置管理

BIOS提供系统配置的管理功能:
  • CMOS设置:管理BIOS设置信息,存储在CMOS RAM中,包括启动顺序、时间、密码等
  • 硬件参数配置:配置CPU频率、内存时序、硬盘参数等硬件相关设置
  • 电源管理:配置ACPI(高级配置和电源接口)相关参数
  • 安全设置:设置开机密码、启动保护等安全选项

1.2.3 引导加载功能

BIOS是Linux系统引导的第一步:
  • 引导设备查找:按照预设顺序查找可启动设备
  • 引导扇区读取:读取启动设备的引导扇区(MBR或EFI分区)
  • 引导程序加载:将引导程序(如GRUB)加载到内存中
  • 控制权移交:将系统控制权移交给引导程序

1.3 BIOS的存储结构

BIOS存储结构说明:
  • 主板ROM芯片:BIOS程序固化在主板上的ROM芯片中,容量通常为1MB-8MB
  • BIOS核心程序:提供基本的硬件控制和系统管理功能
  • POST自检程序:执行硬件检测和初始化,确保硬件正常工作
  • 硬件初始化程序:初始化各种硬件设备,建立硬件抽象层
  • 引导加载程序:负责查找和加载引导程序
  • 中断向量表:定义硬件中断服务程序的入口地址
  • 系统服务例程:为操作系统提供硬件访问的接口
  • 硬件检测模块:检测各种硬件设备的存在性和状态
  • 设备驱动程序:提供基本的硬件驱动功能
  • 引导设备管理:管理启动设备的查找和加载

2 Linux启动过程中的BIOS角色

2.1 Linux启动的完整流程

Linux启动流程详解:
  • BIOS启动:计算机加电后,CPU执行BIOS程序
  • POST自检:BIOS执行硬件检测,确保关键硬件正常
  • 硬件初始化:BIOS初始化CPU、内存、显卡等基本硬件
  • 查找启动设备:BIOS按照启动顺序查找可启动设备
  • 读取MBR/EFI:从启动设备的引导扇区读取引导程序
  • 加载GRUB:将GRUB引导程序加载到内存中
  • GRUB菜单:显示启动菜单,用户可以选择启动项
  • 加载Linux内核:GRUB加载Linux内核(vmlinuz)到内存
  • 初始化initramfs:加载初始内存文件系统,提供早期用户空间
  • 启动systemd:Linux内核启动systemd作为第一个进程
  • 运行系统服务:systemd启动各种系统服务
  • 启动用户界面:启动图形界面或提供命令行登录

2.2 BIOS与Linux内核的交互

2.2.1 内存信息传递

BIOS通过特定的内存区域向Linux内核传递硬件信息:
  • EBDA(Extended BIOS Data Area):扩展BIOS数据区域,存储硬件配置信息
  • 实模式内存映射:BIOS建立实模式下的内存映射,为Linux内核提供内存布局信息
  • ACPI表:BIOS通过ACPI表传递硬件资源分配和电源管理信息

2.2.2 硬件资源分配

BIOS负责分配硬件资源:
  • 中断向量分配:为各种硬件设备分配中断号
  • DMA通道分配:为需要DMA的设备分配DMA通道
  • I/O端口分配:为硬件设备分配I/O端口地址
  • 内存区域分配:为硬件设备分配内存映射区域

3 BIOS的高级特性与Linux支持

3.1 ACPI与Linux电源管理

3.1.1 ACPI表结构

ACPI表结构说明:
  • RSDP(Root System Description Pointer):ACPI表的根指针,位于内存特定位置
  • RSDT(Root System Description Table):根系统描述表,指向其他ACPI表
  • FADT(Fixed ACPI Description Table):固定ACPI描述表,包含系统基本信息
  • MADT(Multiple APIC Description Table):多重APIC描述表,包含处理器信息
  • SSDT(Secondary System Description Table):辅助系统描述表,包含设备信息
  • FACS(Firmware ACPI Control Structure):固件ACPI控制结构,包含系统状态
  • DSDT(Differentiated System Description Table):差异化系统描述表,包含设备描述

3.1.2 Linux中的ACPI支持

Linux内核通过ACPI子系统实现电源管理:
  • ACPI核心模块:提供ACPI表解析和设备管理功能
  • 电源管理:支持ACPI S1-S5睡眠状态,实现系统休眠和唤醒
  • 设备热插拔:支持ACPI设备的热插拔和重新配置
  • thermal 管理:通过ACPI thermal zone实现温度监控和控制

3.2 UEFI与Linux启动

3.2.1 UEFI启动流程

UEFI启动流程描述:
  • UEFI固件启动:CPU执行UEFI固件程序
  • 硬件初始化:初始化必要的硬件设备
  • 安全启动检查:验证引导程序的数字签名
  • 查找EFI系统分区:查找ESP(EFI System Partition)
  • 读取EFI引导程序:从ESP读取引导程序(如GRUB2)
  • 加载GRUB2:将GRUB2引导程序加载到内存
  • GRUB2菜单:显示启动菜单,用户可以选择启动项
  • 加载Linux内核:GRUB2加载Linux内核到内存
  • 启动Linux系统:Linux内核开始执行,启动完整的系统

3.2.2 Linux对UEFI的特性支持

Linux对UEFI提供了以下特性支持:
  • 安全启动:支持UEFI安全启动,验证引导程序的数字签名
  • 快速启动:支持UEFI快速启动,减少系统启动时间
  • 固件更新:支持通过Linux更新UEFI固件
  • 诊断工具:提供efibootmgr等工具管理UEFI启动项

4 BIOS配置与Linux系统管理

4.1 BIOS配置工具

  • Linux提供了多种工具来管理和配置BIOS/UEFI:
BIOS配置工具说明:
  • 命令行工具
    • dmidecode:解析DMI表,获取硬件信息
    • lscpu:显示CPU信息
    • hwinfo:显示详细的硬件信息
  • 图形界面工具
    • fwupd:固件更新工具
    • gnome-firmware:GNOME固件管理器
  • 编程接口
    • sysfs:sys文件系统提供硬件信息
    • procfs:proc文件系统提供进程和系统信息
    • ACPI接口:通过ACPI接口访问硬件信息

4.2 常用BIOS信息查看命令

4.2.1 dmidecode命令

# 查看所有BIOS信息
sudo dmidecode -t bios# 查看系统信息
sudo dmidecode -t system# 查看主板信息
sudo dmidecode -t baseboard# 查看处理器信息
sudo dmidecode -t processor# 查看内存信息
sudo dmidecode -t memory

4.2.2 其他常用命令

# 查看CPU信息
lscpu# 查看硬件详细信息
sudo lshw# 查看PCI设备
lspci# 查看USB设备
lsusb# 查看DMI表
sudo dmidecode

5 总结

BIOS作为Linux系统启动的底层基础,其重要性不言而喻。虽然现代Linux系统启动后不再直接依赖BIOS,但BIOS的质量和配置直接影响Linux系统的启动速度、稳定性和性能。在实际应用中,建议结合具体的硬件环境和Linux发行版进行实践,不断积累经验,最终达到熟练掌握和灵活应用的水平。
http://www.xdnf.cn/news/1403749.html

相关文章:

  • PostgreSQL:突破关系型数据库的边界
  • AI公司是怎样对权重和损失函数做处理的?
  • nacos3端口漂移问题
  • mysql的内置函数
  • 论《运动战》
  • 个性化导航新体验:cpolar让Dashy支持语音控制
  • Tomcat 企业级运维实战系列(四):Tomcat 企业级监控
  • 数值分析——数据误差对函数值的影响
  • nacos 2.5.1 心跳源码解析
  • 基于单片机商用电子计价秤电子秤系统Proteus仿真(含全部资料)
  • 图解LLM(AI大模型)的工作原理
  • Redis 测试:过期 key 内存释放情况
  • 深入理解shared_ptr与循环引用问题
  • node.js ---文件读写(FS模块)
  • 用【Coze】实现文案提取+创作
  • 蓓韵安禧活性叶酸独立包装日期标注
  • 加密软件哪个好用?加密软件-为数据共享提供安全保障
  • 【基础-单选】例如现在要实现一个广告弹窗,包含图片和文本等信息,使用下面那种弹窗可以实现
  • ROS 2 机器人开发$2
  • 项目管理方法论有哪些流派
  • basic_ostream
  • Linux网络基础1(三)之网络与协议栈and网络传输基本流程
  • Yolov8损失函数:回顾Yolov8-Loss
  • 6.1 Update不能写复杂的逻辑
  • HarmonyOS Router 基本使用详解:从代码示例到实战要点
  • 【随笔】【Debian】【ArchLinux】基于Debian和ArchLinux的ISO镜像和虚拟机VM的系统镜像获取安装
  • 4-ATSAM3X8E-FLASH写入
  • Docker(自写)
  • MEM课程之物流与供应链管理课程经典案例及分析-个人原创内容放在此保存
  • 数据结构(C语言篇):(七)双向链表