Grub 2 未检测到内核中的多重引导标头

2023-11-23

我在使用 Grub 2(以及 QEMU 的-kernel)没有检测到我的内核中的 Multiboot v1 标头。我之前将标题放在单独的部分中.text.

linker.ld:

SECTIONS
{
    . = 1M;

    .multiboot ALIGN(4K) :
    {
        *(.multiboot)
    }

    .text ALIGN(4K) :
    {
        *(.text)
    }

    [snip]

boot.s(GNU 语法):

.set MAGIC, 0x1badb002
.set FLAGS, (1<<0 | 1<<1) # align, provide mem map
.set CHECKSUM, -(MAGIC + FLAGS)

.section .multiboot
    .long MAGIC
    .long FLAGS
    .long CHECKSUM

.section .text
    [snip]

我已经验证标题部分是按照幻数指定添加的:

kernel.bin:     file format elf32-i386

Contents of section .multiboot:
 101000 02b0ad1b 03000000 fb4f52e4           .........OR.    
Contents of section .text:
 [snip]

然而 Grub 2 表示内核没有有效的 Multiboot 标头,并且使用 QEMU-kernel选项原因:

qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a000

这似乎是 BIOS 映射范围内的地址,而不是 Multiboot 应该在的位置。

我已经与 Bran 和 OSDev 中的常用代码(加上我以前的内核)进行了比较,但我似乎无法弄清楚我做错了什么。


我的多重引导内核遇到了同样的错误。当 .text 部分的大小超过大约 4k 时,我遇到了同样的错误。我的问题的原因是,在链接时,我在 ld 参数中首先指定了 kernel.o,然后指定了 loader.o(我编写了一个 Makefile 以使我的项目基于 OSDev Wiki Bare Bones 更易于开发)。 Multiboot 应该在前 4k 中查找标头,随着我的代码增长,它将标头推出该区域(因为它位于内核 .text 部分中的加载器之前)。您对多重引导标头使用了单独的部分,我不知道这可能是也可能不是一个好主意。我会尝试的事情:

  • 删除 .multiboot 部分,并将其内容放入加载程序的开头,并确保 loader.o 是链接器的第一个参数,kernel.o 紧随其后。
  • use readelf -a kernel确保多重引导标头确实位于前 4k 中(也就是说,如果开头位于0x00100000,其偏移量低于0x00101000.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Grub 2 未检测到内核中的多重引导标头 的相关文章

  • 以内核模式运行的进程和以 root 身份运行的进程之间的区别?

    我知道在用户模式下运行的进程和在内核模式下运行的进程之间的区别 基于访问限制 对硬件的访问等 但出于好奇 以内核模式运行的进程与以 root 身份运行的进程有什么区别 内核模式和根是两个独立的概念 彼此之间并不真正相关 以 root 身份运
  • 定位并删除 jupyter 笔记本中的隐藏内核

    我试图找出我的 mac 中的 anaconda 内核在哪里 因为应用程序报告了不同的事情 如果我运行 jupyter 内核规范列表 I get 可用内核 python2 用户 用户 anaconda 共享 jupyter kernels p
  • 有没有一种方法可以在不读取 Linux 上的 proc/sys 文件的情况下获取电池信息(状态、插入等)?

    我想在linux上用C获取有关电池的信息 我don t想要阅读或解析any文件 是否有任何与 acpi 内核或任何其他模块的低级接口来获取我想要的信息 我已经在网上搜索过 但每个问题都会得到答案 parse proc foo bar 我真的
  • 如何以编程方式动态管理 iptables 规则?

    我需要查询现有规则 以及能够轻松添加和删除规则 我还没有找到任何 API 来执行此操作 我缺少什么吗 我最接近的解决方案是使用iptables save iptables xml用于查询并手动调用 iptables 命令本身来添加 删除规则
  • 根据.config剥离Linux内核源代码

    是否有任何有效的方法 也许通过滥用 gcc 预处理器 来获取一组剥离的内核源代码 其中根据 config 不需要的所有代码都被省略 好吧 我们采取了一些解决方案 首先 可以通过以下方式获取所使用的编译器命令 make KBUILD VERB
  • 在 anaconda 中更新 Spyder 后出现内核错误 [重复]

    这个问题在这里已经有答案了 我将 Spyder 更新到版本 4 1 0 以及 anaconda 中的所有其他软件包 Spyder 本身工作正常 但内核无法工作 我收到以下错误 但不知道如何解决它 An error ocurred while
  • 如何设置 intel_idle.max_cstate=0 来禁用 c 状态?

    我想在我的计算机上禁用 c 状态 我在 BIOS 上禁用了 c state 但没有获得任何结果 不过 我找到了一个解释 大多数较新的 Linux 发行版 在配备 Intel 处理器的系统上 使用 intel idle 驱动程序 可能编译到内
  • 来自task_struct的完整进程名称

    我想从中获取完整的进程名称struct task struct The comm字段仅存储 16 个字符 而进程名称可以更长 有没有办法获得完整的进程名称 这可以通过获取来完成struct vm area struct from task
  • 如何使用 conda 卸载 r-essentials?

    最近 我安装了r essentials using conda命令 conda install c r r essentials正如这个网址中所描述的 https anaconda org r r essentials https anac
  • 如何在 Windows 中拦截 DNS 查询

    我正在研究如何在 Windows 中拦截 DNS 查询 以一种不需要将 DLL 注入到每个进程中的方式 并且理想情况下能够根据发出查询的进程做出决策 因此简单的 DNS 代理服务器是不够的 从表面上看 DNS 查询所采用的路径如下所示 某些
  • 在执行期间访问.eh_frame数据

    我正在尝试访问以下内容 eh frame正在运行的程序的一部分 具体来说 该程序是 Linux 内核 2 6 34 8 这 eh frame包含用于异常处理的有用数据 我想在内核代码内部使用它 该部分已经由以下人员编写gcc readelf
  • Linux 中 NDIS 过滤器的类似物是什么?

    我正在研究一个as close to real time我在linux中尽可能地使用系统 并且需要在收到特定数据包后立即发送大约600 800字节的TCP数据包 为了获得最佳的延迟 我希望这个数据包直接从内核发送 而不是将接收到的数据包一直
  • 每个进程是否都存在内核堆栈?

    每个用户空间进程是否都存在一个内核堆栈和一个用户空间堆栈 如果两个堆栈都存在 那么每个用户空间进程应该有 2 个堆栈指针 对吗 在 Linux 中 每个任务 用户空间或内核线程 都有一个 8kb 或 4kb 的内核堆栈 具体取决于内核配置
  • Linux 源代码中的哪个位置会识别特定的 USB 设备?

    我有一个特定的 USB 设备 我想检查其 Linux 驱动程序源代码 我的理解是 USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备 就我而言 供应商 ID 是0BDA产品 ID 是8187 有了这些信
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • 当IRQL下降时,Windows中如何触发软件中断?

    我知道对于硬件中断 当 KeAcquireInterruptSpinLock 调用 KeLowerIrql 时 HAL 会调整 LAPIC 中的中断掩码 这将允许自动服务排队的中断 可能在 IRR 中 但是对于软件中断 例如 ntdll d
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的

随机推荐

  • php获取变量作为键,但没有分配值

    如果我在浏览器中输入以下内容 http domain com script php 1234 script php 有以下脚本 key array keys GET echo key 0 输出将是 1234 我正在尝试消除丑陋的 r 123
  • Python 3 写入管道

    我正在尝试编写一些代码将数据放入管道中 并且我希望该解决方案与 python 2 6 和 3 x 兼容 例子 from future import print function import subprocess import sys if
  • R 脚本行号错误? [复制]

    这个问题在这里已经有答案了 我找到了这个post从一年前开始 我正在使用R version 2 11 1 2010 05 31 但仍然收到没有行号的错误消息 有什么解决办法吗 那里给出的答案仍然有效 从脚本返回行号并不是那么简单 但是 R
  • C++ 中指针的值初始化到底有什么作用?

    我看过相关答案here and here对此 但我想要确认 因为他们都没有明确说明这一点 假设我有一堂课Foo和一名会员bar类型的int 以下两个初始化完全等效吗 Foo Foo bar NULL null pointer constan
  • “应用程序安装失败:无法检查应用程序包”

    当从 Xcode 到我的 iPhone 进行构建和运行时 Xcode 不断地给我这个错误 在它给我错误后 没有控制台错误 我可以再次运行它 一切都很好 部署到设备上没有问题 我不知道如何解决这个问题 我已经尝试过问题中的解决方案here h
  • 如何获取上个月数据和本月至今数据

    需要帮助编写查询以获取上个月的数据以及本月至今的数据 如果今天的日期是2011年3月23日 我需要检索上个月的数据以及直到今天的数据 指2011年3月23日 如果日期为 2011 年 4 月 3 日 则数据应包含 3 月数据和截至 2011
  • 错误 2006:使用 Python、Bottle Microframework 和 Apache 时“MySQL 服务器已消失”

    使用以下方式访问我的网络应用程序后 Python 2 7 Bottle 微框架 v 0 10 6 阿帕奇 2 2 22 mod wsgi 在 Ubuntu Server 12 04 64 位上 几个小时后我收到此错误 Operational
  • 在 Nuget 中为 PackageReferece 项目打包静态内容

    我有一个类库 net47 项目 我想将我的 dll 和几个静态内容文件 js css 图像 打包到 nuget 中 我想使用这个 dll 和消费者项目的内容 这些项目将是 MVC PackageReference 项目 在这些项目中 本地静
  • hadoop hdfs 格式化块池出现错误失败

    格式化 hdfs 后 出现以下错误 2015 05 28 21 41 57 544 WARN org apache hadoop hdfs server common Storage java io IOException Incompat
  • 如何使用自制程序中的 openSSL 在 macOS 上编译 Python 3.6.2?

    我正在尝试根据 macOS 10 11 上的说明编译 Python 3 6 2https bugs python org issue29095 我使用自制程序将 openSSL 安装到标准位置 然后将 LDFLAGS CFLAGS 和 CP
  • 如何使用 Python 将 SQL IN 子句格式化为字符串

    我正在尝试创建如下声明 SELECT FROM table WHERE provider IN provider1 provider2 但是 我在 Django API 的字符串格式化方面遇到了一些问题 这是我到目前为止所拥有的 profi
  • WCF 数据服务:如何避免 __metadata 成员

    我目前正在尝试使用 WCF 数据服务来进一步开放我们的产品 同时能够使用来自 AJAX 的数据 我注意到的一件事是 JSON 表示格式将这些 metada 成员散布在数据中 并且在 OData 文档中我发现了这一点 在代表条目 可选的 me
  • && 的优先级高于 || [复制]

    这个问题在这里已经有答案了 据我所知逻辑运算符 优先级高于 运行代码时 include
  • 树莓派Qt5设置物理屏幕尺寸

    我正在使用交叉编译在 raspbian 上的树莓派上开发 qt5 应用程序 当我运行它时 我得到一个黑屏 试图显示一个 QFrame 弹出窗口 我想它无法定位 因为我在开头收到了错误消息 EGLFS 无法查询物理屏幕尺寸 默认为100 dp
  • 为什么 '.sort()' 会导致 Python 中的列表为 'None'? [复制]

    这个问题在这里已经有答案了 我正在尝试对 Python 列表进行排序ints 然后使用 pop 函数返回最高的一个 我尝试过以不同的方式编写该方法 def LongestPath T paths Ancestors T x for x in
  • 计算出一天已过去的百分比

    有点奇怪的问题 但希望有人能帮忙 本质上 如果时间是中午 12 点 则经过百分比为 50 上午 6 点为 25 下午 16 点为 75 给定当前时间 您如何计算出已经过去了多少天 假设您可以获得一天中的当前时间 那么计算一天过去的百分比将非
  • JSpinner.DateEditor 必须包含年份,即使开始和结束是同一年

    我有一个使用 SpinnerDateModel 的 JSpinner 其开始日期为 2010 年 1 月 1 日 00 00 00 000 结束日期为 2010 年 1 月 1 日 00 12 34 217 我希望我的 JSpinner D
  • 如何设置在整个应用程序中可访问的全局变量

    我开发了一个带有全局变量的PHP页面 如下所示 global amty imgCache amty imgCache array GLOBALS amty imgCache amty imgCache 该页面具有向该数组添加 删除条目的功能
  • 使用管道符号作为分隔符拆分字符串

    为什么下面的输出是 并不是 1 String input 1 2 3 String values input split System out println values 0 Output 但是 如果我们更改分隔符 则输出为 1 Stri
  • Grub 2 未检测到内核中的多重引导标头

    我在使用 Grub 2 以及 QEMU 的 kernel 没有检测到我的内核中的 Multiboot v1 标头 我之前将标题放在单独的部分中 text linker ld SECTIONS 1M multiboot ALIGN 4K mu