问题标签 [grub]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 如何使用 Grub2 配置 kgdb?
我需要设置一个内核调试会话,以便我可以在 PCIe 硬件设备上查看和查看一些寄存器。我使用的是使用 Grub2 的 Ubuntu 12.04。根据我的 /boot/config-3.5.0-23-generic 文件,内核已经构建了 KGDB 支持,但显然没有支持 kgdb-over-ethernet。为此,我正在重建内核。
同时,我试图弄清楚如何修改我的 Grub2 配置文件以添加 KGDB 条目。我能找到的唯一教程都参考了传统的 Grub 风格的语法来做到这一点:
Grub2 的语法明显不同,因为“kernel”命令似乎已被“linux”取代,而且我还看到了许多其他差异。这让我对期望旧语法“正常工作”的希望渺茫。
我还没有找到任何在线使用 Grub2 配置 KGDB 的说明。这样做的正确方法是什么?有人可以提供使用 Grub2 语法的示例吗?
另外,由于我是 Linux 内核调试的新手,也许我什至没有以正确的方式解决这个问题。请让我知道我是否应该为此使用不同的方法,例如,如果其他人由于已知的以太网问题而使用串行调试,或者其他任何情况。
谢谢!
linux - How does GRUB's stage 1 boot loader loads the stage 2 bootloader?
From the past week I am puzzled with the question that how the grub first stage boot loader which is only 446 bytes is able to search for the second stage, when the second stage is in a complex file system! How does it locate the second stage?
When a complex partitioning scheme of windows and linux is in place, and the linux system is entirely in the extended partition, then how does the stage 1 finds the stage 2? Even stage 1.5?
All of the grub tutorials skim through this important part. I have searched though the internet but couldn't find anything that explains this. Sadly, I am not an assembly programmer.
I want to understand the boot process intricately in terms of which sectors of the hard disk are tickled (and roughly how) during bootup. *Please point me to a good resource or answer here. It will greatly help me to play with grub wisely.*
Some Resources Searched:
- How Linux Works : What every superuser should know by Brian Ward
- http://www.dedoimedo.com/computers/grub.html
- some past stackoverflow questions.
kernel - Grub 2 未在内核中检测到 Multiboot 标头
我遇到了 Grub 2(和 QEMU's -kernel
)没有在我的内核中检测到 Multiboot v1 标头的问题。我之前在单独的部分中有标题.text
。
linker.ld
:
boot.s
(GNU 作为语法):
我已经验证了标题部分正在按照幻数指定的方式添加:
然而 Grub 2 说内核没有有效的 Multiboot 标头,并且使用 QEMU 的-kernel
选项会导致:
这似乎是 BIOS 映射范围内的地址,而不是 Multiboot 应该在的位置。
我已经与 Bran 和 OSDev 中的常用代码(加上我以前的内核)进行了比较,但我似乎无法弄清楚我做错了什么。
x86 - 使用 GRUB2 引导非多重引导内核
我想用 GRUB2 引导一个自定义内核(非多重引导),我读过我需要grub.cfg
这样:
所以,我有一些问题:
- grub如何检测内核?(我使用了多重引导规范
kernel /boot/kernel.bin
) - 我的内核必须是什么样子(对不起我的英语不好)?它必须是 512 字节吗(如自定义引导加载程序,加载到 0x7c00 中)?
(hd0,0)
是硬盘分区,如果我使用CD,我必须放什么?也许(cdrom0,0)
?- 要启动 Linux 内核,我们可以使用
linux
命令,我可以使用它来启动我的自定义内核(进行一些更改)吗? - Grub 会进入
Protected mode
还是不进入?
ubuntu-12.10 - 如何将 ubuntu 12.10 条目添加到 grub 菜单列表?
menu.lst
我在编辑文件时删除了我的 ubuntu 12.10 条目。
谁能给我一个包含文件中 ubuntu 12.10 条目的示例menu.lst
文件。
它应该是这样的:
我的 ubuntu 安装已开启sda6
。
谁可以帮我这个事?
debian - Debian GRUB 救援 - “无效的独立于拱门的 ELF 魔法”
我最近用 Debian Wheezy 双启动了一台 Windows PC。安装顺利,没有错误,但是当我启动到 Debian 时,我立即受到 GRUB 救援的欢迎:
在使用set
命令进一步检查后,我注意到它正在引导到错误的分区:
这里它指向(hd0,gpt4)
Debian 的安装位置是(hd0,gpt5)
. 所以,我做了一个快速修复,使用set
将变量改回它们应该是什么:
在这样做之后,我只做了我记得我应该做的事情来引导到操作系统并运行:
当我收到错误时,这就是事情开始出错的地方:
然后我对这个问题进行了一些研究,似乎常见的解决方案是从 live CD 重新安装 GRUB。因此,我启动到 Debian 的 live CD 并运行以下命令:
我收到错误的地方:
虽然我可以保证这个文件确实存在并且是可编辑的,因为我可以编辑它
那么可能是什么问题呢?
grub - 使用 grub,是否可以在引导期间使用“if, while”(在加载 normal.mod 之前)?
我的电脑安装了grub。在加载 normal.mod 之前的引导期间,我需要能够在我的配置文件中运行 if 和 while 命令,该文件已链接到 core.img(使用 grub-mkimage -c myconfig.confg)。在 myconfig.config 中,我有一个 if 语句,并且在引导过程中我不断收到“unknown command if”。我在http://www.gnu.org/software/grub/manual/html_node/Embedded-configuration.html中看到了一个示例,看起来我只需要包含搜索、测试和普通模块。我错过了什么吗?谢谢
assembly - 用基本内核实现 GDT
我最近迷上了内核开发,并从 OSDev Wiki 上的基本教程开始。实现 Hello World 示例后,我继续尝试创建全局描述符表。我从网上的各种来源拼凑了一些 GDT 代码,但最终失败了。我的实现是否有问题,如果不是立即清楚,是否有任何来源可以提供更多信息?
简而言之,以下具有 GDT 的内核实现无法使用 GRUB 加载。我正在使用gcc
and进行编译as
,可以提供所需的任何其他信息。
靴子
内核.c
gdt.c
assembly - 多重引导标头在引导文件中不起作用
我正在尝试使用 grub (legacy) 规范编写兼容的多引导内核,这是我的 boot.s 的内容(用 gnu 编写)
boot.h 文件包含 grub 的一些定义:
我还像这样设置链接器:
目前,我的 kernel_main 只是返回值 0x01 ,这是我在 %eax 寄存器中所期望的,但是当我使用以下命令执行内核时:
然后info registers
在 qemu 中发出命令,我总是为 %eax 找到 18 的值。所以我的问题是:我的 boot.s 文件是否正确定义为兼容 grub?为什么 %eax 中的值是 18 而不是 0x01?