- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在关注 Bran 的内核开发 tutorial .在他的汇编代码中,他有以下代码块,他将其描述为不是那么重要,但与 GRUB 相关。
; This part MUST be 4byte aligned, so we solve that issue using 'ALIGN 4'
ALIGN 4
mboot:
; Multiboot macros to make a few lines later more readable
MULTIBOOT_PAGE_ALIGN equ 1<<0
MULTIBOOT_MEMORY_INFO equ 1<<1
MULTIBOOT_AOUT_KLUDGE equ 1<<16
MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGE
MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
EXTERN code, bss, end
; This is the GRUB Multiboot header. A boot signature
dd MULTIBOOT_HEADER_MAGIC
dd MULTIBOOT_HEADER_FLAGS
dd MULTIBOOT_CHECKSUM
; AOUT kludge - must be physical addresses. Make a note of these:
; The linker script fills in the data for these ones!
dd mboot
dd code
dd bss
dd end
dd start
我还想知道这段代码在做什么?有人可以给我或指出我在哪里可以找到关于此的描述。二、为什么这段代码需要4字节对齐?这是出于效率原因还是在 GRUB 的上下文中具有某些特殊意义?
最佳答案
这部分汇编不是代码,而是多重引导头文件。当您链接内核时,此 header 将放置在二进制文件的开头,因此 GRUB 可以看到您的内核是多引导兼容的。此 header 包含一个魔数(Magic Number)(0x1badb002)、一个标志列表(在您的情况下,内核应该加载到一个页面对齐的地址上,并且您希望 GRUB 为您提供一个内存映射)和一个校验和。如果这些条目之一不遵循多重引导规范,GRUB 将不会加载您的内核。
您可以在 GRUB 的多重引导手册中找到有关多重引导的更多信息:
http://www.gnu.org/software/grub/manual/multiboot/multiboot.html
引用手册:
An OS image must contain an additional header called Multiboot header, besides the headers of the format used by the OS image. The Multiboot header must be contained completely within the first 8192 bytes of the OS image, and must be longword (32-bit) aligned. In general, it should come as early as possible, and may be embedded in the beginning of the text segment after the real executable header.
我不确定 AOUT kludge 的作用。我只在我的操作系统中使用 ELF。我遵循了这个指南:http://wiki.osdev.org/Bare_Bones
关于kernel - 麸皮内核开发 : Grub Multiboot header?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812163/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
本节,我们就来看看 GRUB 的配置文件 /boot/gmb/grub.conf 中到底写了什么。命令如下: [rootdlocalhost ~]# vi /boot/grub/grub.conf d
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我使用 grub 加载我的内核。虽然我在链接描述文件中指定了.=0x100 0000,但我只能在0x10 0000处找到一个有效的MultiBoot2头文件。一一比较后,我发现它不是我的内核。并使用g
GRUB 脚本中是否可以进行文件名通配符扩展? 就像是: for i in directory/*; do echo $i; done 我的目的是让 GRUB 加载位于某些目录中的不同 cfg 文件。
我想问一下是 GRUB 在启动时将 CPU 切换到保护模式还是 Linux 内核做的。我还想问 - 内核本身 (vmlinuz) 是 ELF 还是纯二进制格式?谢谢。 最佳答案 GRUB 确实让您进入
我想查看 grub_dprintf() 生成的 GRUB2 调试日志,例如,在 mmap.c: grub_dprintf ("mmap", "EFI memory region 0x%llx-0x
我一直在开发一个玩具操作系统,并且一直使用 grub 作为我的引导加载程序。最近在尝试使用VGA时,我发现无法使用硬件中断。我发现这是因为我被 grub 拖入了保护模式。 有人知道如何在不必摆脱gru
我正在从 OSDev.org 学习一些操作系统开发知识。我有一个内核,我正在尝试使用 qemu 在 GRUB Legacy (0.97) 中启动。但是,当我输入 kernel 200+9 时,我收到消
我有一个系统,在一个硬盘驱动器上安装了多个 Red Hat。我想在运行时自动选择默认安装来启动。 Red Hat 的做法(与 Grub 文档略有不同)是进入 grub shell 并说 savedef
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我是 linux 和 bash 的新手,所以我不知道我做错了什么。我设置grub不显示,按shift 3秒后显示。这很好用。然后我将 30_os-prober 中的行(如下所示)更改为“F11”,其中
我想以编程方式选择当前操作系统重新启动后将运行的下一个操作系统。例如我有这些操作系统: -Linux Mint -Windows 7 我现在在Linux中,我想在重新启动后运行Windows。我必须修
我想在启动期间在多个操作系统之间进行选择。我如何使用我的蓝牙键盘/手机或至少我的红外 Remote 来管理它? 最佳答案 一个解决方案是先启动linux系统,然后添加boot once命令 grub
我可以在 GRUB 加载时运行一些自定义代码吗?换句话说,GRUB 是否提供了在加载任何操作系统之前运行一些自定义代码的工具? 最佳答案 自 GRUB 支持以来 the Multiboot speci
本章第一节就已经讲过,BIOS 在进行完成系统检测之后,就会找到第一个可以启动的设备,并读取该设备的 MBR(主引导记录)以及加载 MBR 中的 boot loader(启动引导程序),这个启动引导程
我想直接启动到我的 Xubuntu。我在网上搜索了一下,发现可以编辑文件/etc/default/grub使 GRUB 的超时时间为 0 秒。你要做的就是改变GRUB_TIMEOUT至0然后在你的 s
安装Ubuntu后,EFI系统分区的/efi/UBUNTU/里面有几个*.efi文件: GRUBX64.EFI MOKMANAG.EFI SHIMX64.EFI mmx64.efi fwupx64.e
我按照出色的指南制作了一张 Debian Live DVD https://willhaley.com/blog/custom-debian-live-environment/ . 我希望在选择自动登
这是我的 arch linux 的 grub.cfg 文件的内容。 # # DO NOT EDIT THIS FILE # # It is automatically generated by gru
我是一名优秀的程序员,十分优秀!