You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Legacy BIOS下GRUB无法引导带Multiboot头的自定义内核怎么办?

Legacy BIOS环境下GRUB无法引导Multiboot内核

我开发了一个带有Multiboot头的内核,但当虚拟机使用Legacy BIOS固件时,GRUB无法完成引导。以下是相关代码文件与信息:

链接器脚本

ENTRY(_start) /* 入口标签名称 */

SECTIONS {
    . = 0x00100000; /* 代码加载地址为1MB */
    .text ALIGN (0x1000) : /* 按4KB对齐 */
    {
        *(.text) /* 所有文件的text段 */
    }
    .rodata ALIGN (0x1000) : /* 按4KB对齐 */
    {
        *(.rodata*) /* 所有文件的只读数据段 */
    }
    .data ALIGN (0x1000) : /* 按4KB对齐 */
    {
        *(.data) /* 所有文件的数据段 */
    }
    .bss ALIGN (0x1000) : /* 按4KB对齐 */
    {
        *(COMMON) /* 所有文件的COMMON段 */
        *(.bss) /* 所有文件的bss段 */
    }
}

内核加载器(汇编代码)

bits 32

MB_MAGIC        equ 0x1BAD002
MB_FLAGS        equ 0x0010003
MB_CHECKSUM     equ -(MB_MAGIC + MB_FLAGS)

section .multiboot
align 4
    dd MB_MAGIC
    dd MB_FLAGS
    dd MB_CHECKSUM

global _start
extern kinit
_start:
    cli
    call kinit
.loop:
    jmp .loop

section .note.GNU-stack noalloc noexec nowrite progbits

内核代码(C语言)

#include <stdint.h>
#include <cga.h>

void kinit() {
    print("Hello Crix!", CGA_COLOR_BLACK, CGA_COLOR_WHITE);
}

构建ISO镜像的Makefile

CC = gcc
ASM = nasm
TARGET_DIR = target

JUNKS = *.o *.a *.bin *.elf *.log *.img *.iso *.cpio* crix*

.PHONY: build
build:
    @$(MAKE) clean
    @mkdir -p $(TARGET_DIR)/boot/grub
    @$(MAKE) -C kernel
    @cp kernel/crix $(TARGET_DIR)/boot

    @echo set timeout=0 > $(TARGET_DIR)/boot/grub/grub.cfg
    @echo menutry ""Crix"" { >> $(TARGET_DIR)/boot/grub/grub.cfg
    @echo "    kernel /boot/crix" >> $(TARGET_DIR)/boot/grub/grub.cfg
    @echo } >> $(TARGET_DIR)/boot/grub/grub.cfg
    @grub-mkrescue $(TARGET_DIR) -o crix.iso

clean:
    @$(foreach JUNK, $(JUNKS), $(shell find . -name "$(JUNK)" -delete))
    @rm -rf $(TARGET_DIR)

export CC
export ASM

引导错误截图

引导错误

源码托管在GitHub仓库。


内容的提问来源于stack exchange,提问作者First Person

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:29:49