标签: grub2

如何在 Centos-8 下的命令行中列出和编辑 GRUB2 的“菜单项”?

如何在Centos-8下的命令行中列出GRUB2的\xe2\x80\x9cmenuentries\xe2\x80\x9d?\n使用的可行方法“fgrep menuentry /etc/grub2.conf”失败。

\n\n

因为在 Centos-8/RHEL-8 中,它们不会将菜单项存储在 /etc/grub2.conf 中。\n相反,它们会在启动运行时搜索并构建条目。

\n\n

以及如何将自定义命令行参数添加到特殊菜单项?\n/etc/grub2.conf 中没有菜单项,我无法编辑任何菜单项。

\n

boot rhel grub2 centos8

6
推荐指数
1
解决办法
1万
查看次数

调试在QEMU上运行的GRUB2 EFI映像

我想实现的目标

我想自定义GRUB EFI映像,并在QEMU上运行时对其进行调试。

因此,我尝试在自定义之前调试原始GRUB图像。

到目前为止我做了什么

我从http://git.savannah.gnu.org下载GRUB2 并进行了编译:

./autogen.sh
./configure --prefix=`pwd`/local --with-platform=efi --target=i386 CFLAGS=-g
make
make install
Run Code Online (Sandbox Code Playgroud)

然后,生成具有以下内容的普通EFI图像:

./local/bin/grub-mkstandalone -O i386-efi -o bootIA32.efi
Run Code Online (Sandbox Code Playgroud)

并将其放在磁盘映像文件中:

qemu-img create -f raw hda.img 1G
mkfs.fat hda.img
sudo mount -o uid=$UID hda.img /mnt
mkdir -p /mnt/efi/boot/
mv bootIA32.efi /mnt/efi/boot/
sudo umount /mnt
Run Code Online (Sandbox Code Playgroud)

为了启动它,我编译了一个IA32 OVMF.fd使其与QEMU一起使用:

qemu-system-i386 -bios $UDK_PATH/Build/OvmfIa32/RELEASE_GCC48/FV/OVMF.fd \
                 -hda hda.img
Run Code Online (Sandbox Code Playgroud)

它可以正确启动,给我一个g壳。


我被困在那里

现在,我想调试GRUB。所以我用其他参数调用了QEMU:

qemu-system-i386 -bios $UDK_PATH/Build/OvmfIa32/RELEASE_GCC48/FV/OVMF.fd \
                 -hda hda.img \
                 -s -S
Run Code Online (Sandbox Code Playgroud)

并将gdb附加到QEMU:

cd grub-core/
gdb -x gdb_grub
Run Code Online (Sandbox Code Playgroud)

但是,似乎缺少调试符号:

GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1 …
Run Code Online (Sandbox Code Playgroud)

gdb qemu uefi grub2

5
推荐指数
1
解决办法
1011
查看次数

读取 GRUB2 调试日志

我想查看 grub_dprintf() 生成的 GRUB2 调试日志,例如,在 mmap.c:

  grub_dprintf ("mmap", "EFI memory region 0x%llx-0x%llx: %d\n",
        (unsigned long long) desc->physical_start,
        (unsigned long long) desc->physical_start
        + desc->num_pages * 4096, desc->type);
Run Code Online (Sandbox Code Playgroud)

经过一番研究,我发现启用此日志的方法是在 grub 菜单中设置 debug env 变量(我在 grub.cfg 上更改了它,可能不应该这样做)

set debug=all
Run Code Online (Sandbox Code Playgroud)

如何查看日志?grub 日志在启动过程中滚动得如此之快,以至于很难检查。也许有办法在内核启动后检查日志?

我正在使用 CENTOS 7。

grub grub2

5
推荐指数
1
解决办法
4010
查看次数

GRUB 脚本中的文件名通配符扩展

GRUB 脚本中是否可以进行文件名通配符扩展?

就像是:

for i in directory/*; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

我的目的是让 GRUB 加载位于某些目录中的不同 cfg 文件。

scripting grub grub2

5
推荐指数
1
解决办法
843
查看次数

GRUB2 UEFI加载程序如何知道在哪里寻找配置文件(或第二阶段文件所在的位置)?

如果在启用GPT的分区上使用GRUB2,加载程序如何“知道”在哪里找到其配置文件和其他第二阶段的文件?

注意:我发现一些有关配置文件的提及,该配置文件与GRUB的EFI加载器位于同一文件夹中,并且包含来自指定分区的“主要”配置文件的链式加载,但这绝对不正确-只有一个“东西”。 efi”文件。

boot grub uefi guid-partition-table grub2

3
推荐指数
2
解决办法
1403
查看次数

如何在谷歌计算引擎实例上安装自定义内核?

我想在 Google Compute Engine 实例上安装自定义内核映像。我有一个运行的实例:

foo@instance-1:/boot/efi$ uname -a
Linux instance-1 4.10.0-22-generic #24-Ubuntu SMP Mon May 22 17:43:20 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

我已经构建并安装了我的内核映像:

sudo dpkg -i linux-image-4.10.0-rc8.10.0-rc8_amd64.deb
Run Code Online (Sandbox Code Playgroud)

它显示在 grub 配置文件中,我已经将默认的 grub 菜单项设置为正确的数字,并且我已经运行

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

然而,当我重新启动时,我得到了与开始时相同的内核。

谷歌关于这方面的文档似乎不存在。有一个地方表明我可能必须在外部创建映像、安装内核并导入它。但是,我需要做很多事情,所以我宁愿以老式的方式安装新内核。

linux-kernel google-compute-engine grub2

2
推荐指数
1
解决办法
4998
查看次数

从 GRUB2 多重引导信息结构中获取总可用 RAM

我设法访问了multiboot_info_ti386 内核中的 GRUB 多引导信息结构 ( ),并且有两个字段分别称为mem_lowermem_upper。我如何使用它们来获取总可用 RAM(以字节为单位)?

x86 kernel i386 grub2

2
推荐指数
1
解决办法
918
查看次数

GNU GRUB 为 Multiboot2 提供“错误:不支持的标签:0xc”

我尝试将以下代码用于 Multiboot2 兼容内核的标头,但是当我multiboot2在 grub 中尝试该命令时,它给出了以下错误消息:

错误:不支持的标签:0xc

我的 Multiboot2 标头定义为:

section .multiboot align=4096
mbhead: dd 0xe85250d6
        dd 0
        dd 76
        dd 0 - 76 - 0xe85250d6                  ; TODO the linker and assembler get angry if we calculate this with symbols, we need to do this by hand
        dw 1                                    ; multiboot information request
        dw 0
        dd 20
        dd 1
        dd 2
        dd 6
        dw 4                                    ; console flags
        dw 0
        dd 12
        dd 0x3
        dw 5                                    ; framebuffer settings …
Run Code Online (Sandbox Code Playgroud)

x86 assembly osdev multiboot grub2

2
推荐指数
1
解决办法
433
查看次数

grub2-mkpasswd-pbkdf2 - 它可以接受标准输入吗?

在 CentOS 6 上,我们目前使用该选项加密 grub 密码password --md5,并且可以将其编写到我们的标准服务器构建中。

我们正忙于迁移到 CentOS 7,看来该password --md5选项已在 grub2 中删除并替换为grub2-mkpasswd-pbkdf2.

尽管我欢迎安全性的提高,但我找不到grub2-mkpasswd-pbkdf2通过标准输入将密码传递给命令的方法,而且 grub2 似乎已经删除了对 md5 的支持,这两者的结合破坏了我们的脚本构建自动化。

任何人都可以帮忙:

  1. 一种通过标准输入传递密码的方法grub2-mkpasswd-pbkdf2?或者
  2. 接受标准输入的替代 pbkdf2 生成实用程序grub2-mkpasswd-pbkdf2?或者
  3. 与 grub2 一起使用的机制--md5

security redhat grub centos grub2

1
推荐指数
1
解决办法
4072
查看次数