Linuxboot:linux as UEFI,linux over UEFI

简介: 本文关键字:linux as UEFI,linux over UEFI,qube-os

本文关键字:linux as UEFI,linux over UEFI,qube-os

在前面《将虚拟机集成在BIOS和EFI层,硬件融合的新起点:虚拟firmware,avatt的编译》及前面一些关于coreboot的文章中,我们提到coreboot是一种开源的boot+firmware,它是从硬件加载到firmware(能够存在于flash的其它非hardware initial必要部分)全包的,coreboot聪明地分开了这二者,将firmware部分视为payload。我们还提到coreboot最初的payload就是linux,除此之外,它还支持UEFI,任何可以在硬件加载完后可执行的东西。

这就是说,coreboot的硬件加载部分依然是需要自实现的。面对一块新主板新平台,开发上,除了软件部分(可以用QEMU调试),硬件上它要求刷机有时甚至要求烧录和焊接技能。—— 这对大部分工作来说都是很麻烦的,写好了也不便于安装。

而UEFI是一种开放的firmware标准(虽然大部分UEFI是闭源的),而且适用于现大部分INTEL平台,为了在平台上开发使用UEFI,照样需要完成硬件加载和firmware衔接工作,和重点的fimware编写工作(DXE),TianoCore是一种开源的UEFI,coreboot的硬件加载部分可以结合tinacore使用。视TianoCore为payload。—— 虽然还是有很多工作,不过,在这种方案下,coreboot的硬件加载可以直接采用该平台开放的部分,然后接入自己的UEFI逻辑,而intel vendor UEFI firmware平台随处可见,是用户可得的。

那么对于我们追求的Linux as firmware,有没有一种更干净的连接起硬件加载部分和firmware的机制呢?并在UEFI上使用 LINUX的技术呢?

这就是linux as UEFI或linux over UEFI。Linuxboot就是这类技术实现的代表

LINUX BOOT

The LinuxBoot project https://github.com/linuxboot/linuxboot (formerly NERF) is a collaboration between Google, Facebook, Horizon Computing Solutions, and Two Sigma that aims to build an open, customizable, and slightly more secure firmware for server machines based on Linux. It supports different runtimes, like the Heads firmware or Google's NERF.

Unlike coreboot, LinuxBoot doesn't attempt to replace the chipset initialization code with opensource. Instead it retains the vendor PEI (Pre-EFI environment) code as well as the signed ACM (authenticated code modules) that Intel provides for establishing the TXT (trusted execution environment). The LinuxBoot firmware replaces the DXE (Driver Execution Environment) portion of UEFI with a few open source wrappers, the Linux Kernel and a flexible initrd based runtime.

1,它首先是一种UEFI实现,跟TianoCore一样,用来代替闭源驱动,相当于coreboot+uefi payload。不过它的工作比coreboot+uefi payload更少。
2,由于它也是全包的解决方案,所以也是一种coreboot代替品,而且它面向使用linux这点与coreboot也不同,coreboot中并没有使用linux当uefi的部分。
3,linuxboot+runtime可以采用cb的硬件加载,也可以使用自己的硬件加载,其linux kernel部分是不变的。
4,它可以实现在硬盘的UEFI分区上直接置换firmware。这样至少对于安装是很方便的。
5,以上其实最终实际上也符合我们在《将虚拟机集成在BIOS和EFI层,硬件融合的新起点:虚拟firmware,avatt的编译》文提到的理论基础,即:linux本身与UEFI技术中的驱动本来就存在重复工作,所以wrapper一下得到的结果也能很好融入UEFI。而linux作为开机预加载环境,可以实现kexec直接加载linux(kernel inside bootloader,不需要专门的bootloader),如果在其中加入虚拟机管理器,可以实现前述我们提到的并启和多OS运行。甚至,虚拟化firmware,可以让黑苹果,黑ios这样的东西变得现实 ——— 这些我们前面都有例子。

Linux boot唯一需要你定制和附加的,就是initrd制作部分,也就是它要接入的runtime,vs Coreboot and Coreboot payload,linuxboot将定制firmware的工作压缩到了仅需要定制rootfs的程度。

Linux boot runtime

Linux boot支持Coreboot runtime(采用其硬件加载部分),linuxboot其前身NERF也是一种runtime,不过像coreboot一样,linuxboot发展到了支持多种其它runtime。如除了coreboot,还有Heads firmware,https://github.com/osresearch/heads

还有这里提到的,https://github.com/u-root/u-root

u-root is an embeddable root file system intended to be placed in a flash device as part of the firmware image, along with a Linux kernel. Unlike most embedded root file systems, which consist of large binaries, u-root only has five: an init program and four Go compiler binaries.

基本上,u-root非常接近我们要得到的goblinux:go,busybox,linux as hyperisor inside boot, linux as user rootfs 。一份及早封装到上游的抽象打包linux for init programmers。

—————

在linuxboot的runtime中集成虚拟机管理器,就得到了我们前面提到的并启虚拟化支持。Linuxboot它主要面向服务器主板作虚拟化。Qubes os就是另外一种主要面向PC主板虚拟化的。


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

qrcode.png

相关文章
|
Ubuntu Linux 开发工具
E2000 UEFI使用设备树方式启动linux系统
E2000 UEFI使用设备树方式启动linux系统
1573 0
E2000 UEFI使用设备树方式启动linux系统
|
Linux 虚拟化 Windows
如何在把Linux装进移动硬盘/U盘(UEFI启动)?
如何在把Linux装进移动硬盘/U盘(UEFI启动)?
2352 1
|
5天前
|
NoSQL 关系型数据库 MySQL
Linux学习记录---(1、基本命令)
该博客文章提供了Linux系统中基本命令的使用记录,包括文件和目录操作、Redis服务管理、MySQL数据库操作以及Tomcat服务器的启动和检查。
Linux学习记录---(1、基本命令)
|
3天前
|
Linux
会玩这10个Linux命令,一定是个有趣的IT男!
会玩这10个Linux命令,一定是个有趣的IT男!
|
2天前
|
安全 Linux 开发者
Linux笔记之ldd命令详解
`ldd`命令是Linux环境下一个非常实用的工具,用于显示一个程序运行时所需的共享库依赖。它帮助开发者和系统管理员快速诊断程序运行问题,特别是在处理"找不到库文件"或者"错误的库文件版本"等错误时。然而,出于安全的考虑,对于不信任的可执行文件,应该慎用 `ldd`命令,可以考虑使用其他工具如 `objdump`。总的来说,懂得如何妥善且安全地使用 `ldd`,对于维护一个稳定和高效的Linux系统来说,是非常重要的。
18 9