Starguard
开发笔记
Toggle navigation
Starguard
全部笔记
Unity
大话存储笔记
C语言
MongoDB
About Me
归档
标签
Documentation_efi-stub.txt
2020-02-01 07:19:08
84
0
0
admin
# 目录 [TOC] # EFI Boot Stub * 在X86和ARM平台,内核的zImage或bzImage可以伪装成PE/COFF映像文件,EFI固件可以把它当做EFI可执行文件来加载。 * 修改bzImage头的代码,以及固件引导程序跳转到的EFI特定入口点被统称为EFI引导存根(EFI boot stub)。对于X86,两个程序分别位于arch/x86/boot/header.S和arch/x86/boot/compressed/eboot.c。对于ARM,EFI stub由arch/arm/boot/comparessed/efi-header.S和arch/arm/boot/compressed/efi-stub.c实现。不同架构共享的EFI stub代码在drivers/firmware/efi/libstub中。 * 对于arm64,没有压缩内核支持,所以Image自身伪装成PE/COFF映像文件,EFI stub被链接到内核。arm64的EFI stub位于arch/arm64/kernel/efi-entry.S和drivers/firmware/efi/libstub/arm64-stub.c。 * 通过使用EFI boot stub,就可以不用传统的EFI bootloader,如grub和elilo。EFI boot stub实际上扮演了bootloader的角色。 * EFI boot stub通过内核配置`CONFIG_EFI_STUB`打开。 # 如何安装bzImage.efi * 对于X86,bzImage位于arch/x86/boot/bzImage,它需要被复制到EFI系统分区(ESP)然后重命名为"xxx.efi"文件,如果没有.efi扩展名,EFI固件会拒绝执行它。在通常的Linux文件系统中不能执行bzImage.efi,因为EFI固件没有提供支持。 * 对于ARM,arch/arm/boot/zImage应该被复制到ESP,并且无需改名。arm64相似,arch/arm64/boot/Image应该被复制到ESP并且无需改名。 # 通过EFI shell向内核传递参数 ``` fs0:> bzImage.efi console=ttyS0 root=/dev/sda4 ``` # "initrd="选项 * 和多数bootloader一样,EFI stub允许用户通过"initrd="选项指定initrd映像文件,这是唯一的EFI stub特定命令行参数,其他的参数都在内核启动时传递给内核。 * initrd映像文件的路径必须是从ESP开始的绝对路径,相对路径不能正常识别。并且,路径的分隔符必须是"\",例如目录结构如下: ``` Kernels\ bzImage.efi initrd-large.img Ramdisks\ initrd-small.img initrd-medium.img ``` * 要从initrd-large.img文件启动,需要使用如下命令: ``` > fs0: fs0:> cd Kernels fs0:\Kernels> bzImage.efi initrd=\Kernels\initrd-large.img # bzImage.efi看起来是相对路径,因为它由EFI shell处理,但initrd=参数必须使用绝对路径,因为参数被传给bzImage.efi处理 ``` * 对于ARM和arm64架构,可以通过"dtb="选项指定设备树文件。
上一篇:
(七)GRUB2环境变量与命令
下一篇:
(一)GRUB简介
0
赞
84 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
文档导航