Linux安装的思考

当我们给电脑安装系统时,到底在安装什么?

流行的Linux桌面发行版Ubuntu,官方有自己的安装指南 https://ubuntu.com/tutorials/install-ubuntu-desktop

第三步便是 Create a Bootable USB stick ,也就是常说的启动盘。 如果这个设备支持从USB启动,那么可以通过F12进入系统启动菜单,选中这个启动盘启动,本质上还是启动一个操作系统,不过这个操作系统的主要任务是帮助你安装一个完整的操作系统到设备上。

BIOS

BIOS是英文"Basic Input Output System", 即基本输入输出系统,是PC固件的一种业界标准接口, 也是PC启动时加载的第一个程序。 查阅资料可知, http://www.sne.bnu.edu.cn/resource/pxxm/362V40JP/jsjyyjc_bk/contents/learn/ch_01/ch_01_05_03.html >BIOS,其含义是基本输入输出系统,是计算机主板厂商固化在计算机主板内的一段程序代码,其基本功能是提供计算机内部的基本输入输出控制。一般说来,当我们刚刚打开计算机电源时,就是计算机主板上的BIOS程序开始运行,其功能是:首先进行系统自检,检查计算机的硬件设备是否正常(例如内存自检,显示器自检),然后在显示器上以字符界面显示计算机的一些基本信息。自检完成后,BIOS根据CMOS中的配置,查找储存操作系统的外存储器。从外存储器上找到引导区(Boot),控制计算机把操作系统装入计算机内存。当操作系统装入计算机内存后,由操作系统接管对计算机的控制权,BIOS进入休息状态。 > >BIOS系统由主板生产商固化到主板的ROM中。从理论上讲应不允许计算机用户随便修改。然而近几年由于计算机的发展日新月异,绝大多数计算机主板厂商使用EEPROM存储自己的BIOS,允许用户在必要的时候刷新BIOS中的内容,实现BIOS升级。例如,当我们发现自己的PIII微机不能识别新式的大容量硬盘时,就可以到主板厂商的网站上下载一个BIOS升级程序刷新该微机的主板BIOS。 > >BIOS的刷新技术为我们应用计算机提供了许多便利,然而也给心怀不良的人提供了破坏我们计算机的机会。当前,计算机界广泛流行的CIH病毒就是一个专门破坏主板BIOS系统的病毒,该病毒在每年4月26日发作,感染此病毒的计算机系统会在4月26日以病毒代码刷新自己的BIOS,其直接后果是计算机主板被损坏,无法启动计算机系统。

喜欢折腾电脑的发烧友可能比较熟悉,内存超频、CPU超频、BIOS解锁等等,超频失败导致电脑无法启动或者内存自检时间过长,需要频繁进入BIOS配置界面。

也就是说按F12实际上是通过外设(键盘)向BIOS这个操作系统通信,告诉它我们想进入启动菜单。这个启动菜单也是BIOS提供的,通过启动菜单选择启动谁?这里引入了新的问题。

  • 空的U盘为什么不出现在启动菜单里?(即怎么判断某存储介质可启动?)
  • BIOS怎么启动其他操作系统
  • 如何理解多操作系统(一台电脑上同时存在Windows、Linux等)

说到底还是得研究BIOS,我们看一份国内某厂商给出的BIOS规范书,从上层开始分析BIOS

上来就是五大规范

  • 高级配置与电源管理接口规范(ACPI Specification)
  • 智能平台管理接口规范(IPMI Spefification)
  • DSP0266 Redfish 规范 (Redfish Specification)
  • 系统管理输入输出系统规范(SMBIOS Reference Specification)
  • 统一可扩展固件接规范(UEFI Specification)

从下面这段文字我们可以看出来,

  • 7 一般功能
    • 7.1 启动操作系统
      在启动操作系统过程中,BIOS 应满足以下要求:
        1. BIOS 加载启动操作系统的方式符合 UEFI 规范定义。(Level1)
        1. BIOS 按启动项的先后顺序依次尝试启动项,完成操作系统启动。(Level1)
    • 7.2 文件系统支持
      • BIOS 应支持 UEFI 规范定义支持的文件系统。(Level1)

加载操作系统和UEFI规范有关,那我们去扒一扒这个UEFI规范。什么!最近几年BIOS就是UEFI,虽然很多人还叫它BIOS,实际上它已经是UEFI了!!我的笔记本也同样如此,在联想官网,还介绍了如何进行传统BIOS与UEFI切换 alt text 我的电脑默认就是UEFI,官网上也并未将特别区分UEFI/BIOS

alt text

UEFI

UEFI规范中文译本 >Unified Extensible Firmware Interface统一可扩展固件接口 (UEFI) 规范描述了操作系统和平台固件之间的接口 >该接口采用数据表的形式,其中包含与平台相关的信息,以及可供 OS 加载程序和 OS 使用的启动和运行时服务调用。它们共同提供了一个启动操作系统的标准环境。

看完UEFI手册后,系统安装就很好理解了。 如何支持多操作系统?链式加载 BIOS -> 硬盘MBR -> 活动分区DBR -> 操作系统 在我这台笔记本上,启动Linux的顺序是: BIOS –> grub第一阶段 –> 完整grub引导 –> xx_vmlinux+initrd(临时)–> 内核初始化、内核模块必要驱动程序加载完成 ->加载init等(systemd)

主引导记录(Main Boot Record,检测MBR)中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如fdisk)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。

识别MBR 的唯一条件就是,第一个扇区的最后两个字节为 0x55 和 0xAA

先使用命令分析磁盘,

1
sudo fdisk -l
fdisk

磁盘1有两个分区,其中sda1是启动分区,每一个扇区大小是512字节,也就是说510和511位(十六进制0x1fe和0x1ff)位为0x55和0xAA,则是MBR,我们实测一下:

1
sudo dd if=/dev/sda1 bs=512 count=1 | hexdump -C
hexdump

显然,最后两个字节是0x55和0xAA,这是MBR。同时从0x52+2为引导程序

我们把这段数据和程序提取出来

1
2
3
sudo dd if=/dev/sda1 of=/tmp/mbr_test.img bs=512 count=1 
# 使用qemu测试
qemu-system-x86_64 -daemonize -m 128M -drive file=/tmp/mbr_test.img,index=0,media=disk,format=raw
qemu

网络有更详细的资料,这里不再赘述。

引导记录损坏会导致系统无法启动,需要重建/修复引导记录。

UEFI启动项 开机按F12或者F2出现的引导顺序是哪儿来的? 来自,BRID(引导记录标识) BRID的主要作用就是判断该设备是否可以用于启动。BIOS按照“启动顺序”,把控制权转交给排在第一位的储存设备。这时,计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给“启动顺序”中的下一个设备。其实主引导记录的作用就是告诉计算机到硬盘的哪一个位置去找操作系统。

DBR(Dos Boot Record)是操作系统引导记录区的意思。它通常位于硬盘的0磁道1柱面1扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为BPB(Bios Parameter Block)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区根目录前两个文件是不是操作系统的引导文件。

最后

冯诺伊曼计算机,指令与数据都以二进制形式储存在存储器里。操作系统当然也是指令与数据。 安装系统,本质上讲,就是根据规范,配置存储器,有了这些信息,上电后,CPU PC复位到固定地址,才能自动地正确运行下去。CPU,需要知道现在该干什么,下一步该干什么。(也就是状态转换)


Linux安装的思考
http://gs2ygc.online/2024/04/29/Linux安装的思考/
作者
gs2ygc
发布于
2024年4月29日
许可协议