概述
目录
一、LinuxBoot背景
二、LinuxBoot项目研究意义及现状
1.研究意义
2.研究现状
三、LinuxBoot介绍
1.LinuxBoot组成
2.LinuxBoot过程
3.LinuxBoot vs UEFI
四.平台搭建
五.注
六.参考文献汇总
前言
随着人们对于计算资源需求的不断增长,对于硬件的需求也越来越高。云服务器的出现为这些公司或个人提供了很好的选择。比如说国外著名的亚马逊云服务器AWS,用户达到了数百万。在国内,有阿里云,腾讯云,华为云服务器,用户数也是非常之多。云服务器迎来了一个势不可挡的趋势,而目前的云服务器固件几乎均采用UEFI/Tiano方案,而这往往是安全性不高且启动速度较低的,而这并不能够很好满足企业用户高质量高效的需要。
一、LinuxBoot背景
LinuxBIOS起源于1999年,来自Ron Minnich,Stefan Reinauer等人。这是一个将Linux作为固件运行的实验。当时,Linux对于硬件初始化项目来说还不够成熟,虽然LinuxBIOS在几个性能和可靠性关键环境中取得了成功,但它并没有被大规模采用。LinuxBIOS在2000年代初变成了coreboot,并且由于闪存尺寸的缩小,删除了Linux部分,并成为能够引导其他有效负载的更通用的板初始化工具。2017年,在Linux大会上,同样是Ron带来了NERF(Non-Extensible Reduced Firmware)。只改动了几十行代码,剥离了coreboot的ramstage,只留下romstage,在内存和一些必须的硬件初始化好了就直接加载Linux Kernel。这也就是Linuxboot的前身。
LinuxBoot项目是Google,Facebook,Horizon Computing Solutions和Two Sigma之间的合作,旨在为基于Linux的服务器机器构建一个开放,可定制且稍微安全一些的固件。它支持不同的运行时,如Heads固件或Google的NERF。
二、LinuxBoot项目研究意义及现状
1.研究意义
为了解决底层固件差异性和封闭性所带来的一系列问题,很多开源社区在开发新的固件方案。目前服务器主流的固件系统包括UEFI/Tiano,Min Platform, Coreboot和LinuxBoot,这些固件都有特定的特点,如下表所示:
UEFI是目前比较主流的固件方案,UEFI/Tiano是一种存在较久的固件系统,生态好,但是由于其代码太过繁琐,社区活跃度低,几乎没有厂商能基于 UEFI/Tiano 的开源方案直接产品化;Min Platform定义了多个平台的最小化启动方案,以及UEFI的最小集合,用户只需要进行重构,然后拼接起来即可实现完整的功能。但是社区活跃度仍然较低,不利于开发;CoreBoot的前身是LinuxBIOS,但由于在开发过程中逐渐以core boot程序为主,为了避免误解改名CoreBoot。随着主板类型增多,CoreBoot的程序也变得越来越大,加入了更多的硬件初始化代码。系统的启动流程变得更加繁琐。为了解决Coreboot存在的问题,新的BIOS框架Linux Boot诞生了。LinuxBoot旨在通过用Linux 内核和运行时替换某些固件功能来提高系统启动性能和可靠性。
2.研究现状
2021年9月15日字节跳动宣布开发出第一代云固件 (Cloud Firmware)。第一代云固件首批 200+ 服务器已顺利完成生产上线,并稳定支持了字节跳动部分业务的持续运行。
三、LinuxBoot介绍
1.LinuxBoot组成
LinuxBoot是一个旨在用Linux内核和运行时替换特定固件功能的项目。LinuxBoot支持多种运行时,其前身NERF就是一种运行时,Linux boot支持Coreboot runtime(采用其硬件加载部分)。多年来,该项目已经发展到包括各种计划,其总体目标是从晦涩难懂的复杂固件迁移到更简单的开源固件。LinuxBoot由三部分组成:
第一部分BIOS:这不一定是特定的 BIOS;目前LinuxBoot支持UEFI和coreboot。
第二部分linux内核:可以使用Linux内核功能替换特定的UEFI功能,然后在计算机上启动实际的生产内核。特定于 LinuxBoot 的内核配置文件提供了所需的 Linux 内核功能,而不会因不必要的驱动程序而使 BIOS 的大小膨胀。
第三部分u-root-> initramfs:当 Linux 引导时,它需要一个提供引导和启动实用程序的根文件系统。u-root就是一个这样的使用Go语言编写的文件系统,u-root是一个用户空间环境,可以提供一个 Linux 环境中工作的基本库和实用程序。LinuxBoot使用u-root来创建一个用于此目的的initramfs。initramfs 是嵌入在固件映像本身中的根文件系统。它旨在与Linux内核一起放置在闪存设备中,作为LinuxBoot固件映像的一部分。u-root 是一个 Go 用户空间(一组用 Go 编写的程序和库,用于与内核交互)。它包含标准 Linux 应用程序和命令的工具集。
u-root 可以在两种不同的模式下创建 initramfs:源模式,其中包含:Go工具链二进制文件、一个简单的外壳、通过 shell 动态编译工具的 Go 源代码 ; Busybox (bb) 模式:这是一个类似 busybox 的二进制文件,包含所有请求的实用程序。
2.LinuxBoot过程
LinuxBoot使用驱动本质上代替了UEFI DXE和BDS阶段,代替了coreboot的ramstage,而利用UEFI的PEI和SEC阶段,或coreboot的romstage,来进行最少的必要硬件初始化,后面的很多硬件初始化都依靠Linux内核的驱动来完成,而这些驱动也会更加安全。无论UEFI的PEI,或者说coreboot的romstage,内存和为初始化内存进行的必要硬件初始化代码只能而且应该由芯片厂商提供,在Intel就是FSP,在AMD就是AGESA,除此之外的代码量很少。
3.LinuxBoot vs UEFI
LinuxBoot 用 Linux 应用程序取代了统一可扩展固件接口 (UEFI) 和其他固件(尤其是网络堆栈和文件系统模块)使用的许多驱动程序执行环境 (DXE) 模块。LinuxBoot将Linux内核作为Flash ROM中的DXE而不是UEFI shell。Linux 内核提供了基于 Go 的用户空间,然后可以调出要在计算机上运行的内核。LinuxBoot 固件范式支持将引导加载程序、调试、诊断和错误检测应用程序等传统固件应用程序编写为跨体系结构和跨平台可移植 Linux 应用程序。当Linux引导时,它需要一个带有实用程序的根文件系统。用于Linuxboot的一个这样的根文件系统是基于用Go编写的u-root标准实用程序。下图显示了 UEFI 启动过程的当前状态以及过渡到 LinuxBoot 的过程。
对比目前主流的UEFI,很明显Linuxboot有以下几个优点:
- 通过将经过轻微测试的固件驱动程序替换为强化的 Linux 驱动程序来提高启动可靠性。
- 通过删除不必要的代码缩短启动时间。通常使启动速度提高 20 倍。
- 允许自定义 initrd 运行时以支持特定于站点的需求(设备驱动程序以及自定义可执行文件)
四.平台搭建
LinuxBoot可以支持多种BIOS,如UEFI、coreboot、u-boot等;
LinuxBoot可以启动多个操作系统(Linux,Berkeley UNIX(BSD),XEN,Windows);
LinxBoot支持以下服务器主板:
- QEMU模拟Q35系统
- Intel S2600WF
- Dell R630
- Winterfell Open Compute node(运行良好)
- Leopard Open Compute node(运行良好)
- Tioga Pass Open Compute node(运行良好)
- Monolake Open Compute node (not tested)
综上,基于现有设备,这里采用QEMU模拟Q35系统进行使用LinuxBoot中的Linux Kernel来引导设备完成识别和初始化,通过引导加载程序来启动虚拟操作系统。
五.注
专业词汇 | 介绍 |
BIOS | 最初,BIOS是内置于计算机中的软件,用于向硬件发送简单的指令,允许在加载操作系统之前进行输入和输出。它是一个没有标准化结构的二进制 blob,负责初始化 CPU 和内存,并跳转到第一个磁盘驱动器的主块上的硬编码位置。BIOS已在很大程度上被UEFI取代。许多UEFI实现仍然提供“BIOS兼容模式”,这使得它的行为类似于旧的BIOS及其功能。 |
busybox | Busybox 是一个单一用户空间二进制文件,它包括大量系统命令的版本,包括一个shell。此包对于从某些类型的系统故障(尤其是涉及损坏的共享库的系统故障)中恢复非常有用。busybox 有多个实现,例如git.busybox.net/busybox 和 github.com/u-root/u-root。 |
coreboot | 为各种体系结构开发开源启动固件的项目。它的设计理念是做最低限度的必要工作,以确保硬件可用,然后将控制权传递给称为有效载荷的不同程序。然后,有效负载可以提供用户界面,文件系统驱动程序,各种策略等来加载操作系统。 |
EDK II | UEFI 兼容固件的开源参考实现,最初由英特尔开发。请参阅 https://github.com/tianocore/edk2。 |
firmware | 为设备的特定硬件提供低级控制的特定类计算机软件。它是在制造时安装的,并且是计算机打开时运行的第一个程序。它检查计算设备具有哪些硬件组件,唤醒组件,并将它们移交给要安装在计算机上的操作系统。当前的 x86 固件基于英特尔的通用可扩展固件接口 (UEFI)。 |
Heads | 适用于笔记本电脑和服务器的开源固件,旨在实现强大的平台安全性。由Trammell Hudson开发,基于剥离的UEFI和Linux,以及BusyBox而不是you-root。更多信息请见Heads - Trammell Hudson's Projects。 |
iSCSI | 一种协议,它提供了一种使网络连接存储看起来像是使用它的主机的本地设备的方法,允许它(除其他事项外)作为常规本地文件系统挂载。 |
kexec | 一种系统调用,使您能够从当前运行的内核加载并引导到另一个内核。kexec 从内核中执行引导加载程序的功能。 |
LinuxBIOS | 一个项目起源于1999年,来自Ron Minnich,Stefan Reinauer等人。这是一个将Linux作为固件运行的实验。当时,Linux对于硬件初始化项目来说还不够成熟,虽然LinuxBIOS在几个性能和可靠性关键环境中取得了成功,但它并没有被大规模采用。它后来成为coreboot。 |
LinuxBoot | LinuxBoot不是一个产品,而是一个概念。这是使用Linux(系统固件)启动Linux(OS)的想法。在某种程度上,LinuxBIOS开创了同样的概念。它就像一个Linux发行版,但用于固件。它是各种开源组件的集合,组合在一起作为一致的固件操作系统工作。 |
NERF | LinuxBoot项目的原始名称由剥离的UEFI加上Linux加上u-root组成。该名称代表不可扩展的简化固件,而不是UEFI的统一可扩展固件接口。NERF 是 UEFI 的替代品,它更紧凑且可扩展性更低。虽然可扩展性很好,而且通常是可取的,但太多的可扩展性会使复杂的项目很难维护和保持安全。 |
Open Source Firmware | OSF 可用于引用开源固件或开放系统固件,具体取决于上下文。 |
Open System Firmware (OSF) | 开放计算项目 (OCP) 的官方子项目。OSF是由OCP的各种成员在开放中开发的,他们对开源系统固件感兴趣。OSF定义了一套指导方针,其中包括微软,谷歌,Facebook,英特尔,9elements,TwoSigma和其他几家公司的贡献。 |
OVMF | 打开虚拟机固件。开放式虚拟机固件是用于虚拟机的 EDK II 版本。它包括对 UEFI 的完全支持,包括安全启动,允许在 EFI 初始化 (PEI) 中使用 UEFI 代替传统的 BIOS。 |
production kernel | LinuxBoot不是一个运行时生产内核;相反,它旨在使用Linux内核功能替换特定的UEFI功能,然后在计算机上启动实际的生产内核(prodkernel)。特定于 LinuxBoot 的内核配置文件提供了所需的 Linux 内核功能,而不会因不必要的驱动程序而使 BIOS 的大小膨胀。 |
QEMU | 执行硬件虚拟化的仿真器。QEMU 是托管的虚拟机监视器。 |
Secure Boot Preverifier (SEC) | 在 UEFI 中,SEC 阶段初始化 CPU 缓存即 RAM (CAR), 并将控制权交给 PEI 调度程序。它是 99.9% 的汇编代码(32 位保护模式)。 |
u-boot | 一个非常流行的开源固件和引导加载程序。不要与u-root混淆。 |
u-root | 适用于 Linux 的现代嵌入式用户空间环境,带有引导加载程序工具。请参阅有关 u-root 的部分。 |
UEFI | 统一的可扩展固件接口。这是英特尔对系统固件标准的规范。UEFI定义了从闪存芯片上的布局到如何连接到外围设备,从磁盘或网络启动,定义UEFI应用程序如何工作等所有内容。它不是一个实现,而是一个标准。EDK II 和 OpenEDK II 是 UEFI 实现。UEFI本身不是闭源的,但在实践中,大多数实现都是。 |
userland/userspace | 一组用于与内核交互的程序和库。 |
六.参考文献汇总
https://www.linuxboot.org/
https://github.com/linuxboot/book
Linuxboot : linux as UEFI,linux over UEFI
下一代BIOS标准探讨之三:Linux固件的回归—LinuxBoot
LinuxBoot 34c3
LinuxBoot: Linux as firmware
下一代BIOS标准探讨引子:之各种Bootloader大比拼
下一代BIOS标准探讨之四:UEFI界中的乐高—MinPlatform
字节跳动首发云固件
https://linux.cn/article-10257-1.html
最后
以上就是爱笑音响为你收集整理的Linuxboot01-背景及现状一、LinuxBoot背景二、LinuxBoot项目研究意义及现状 三、LinuxBoot介绍四.平台搭建五.注六.参考文献汇总的全部内容,希望文章能够帮你解决Linuxboot01-背景及现状一、LinuxBoot背景二、LinuxBoot项目研究意义及现状 三、LinuxBoot介绍四.平台搭建五.注六.参考文献汇总所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复