常见错误

1. 屏幕空白,C内核没有执行

原因A: 链接地址与加载地址不匹配

解决: 确保 linker.ld 中的 . = 0x1000 与 boot.asm 中的 KERNEL_OFFSET equ 0x1000 一致。

原因B: kernel_entry 不在二进制文件的开头

解决: 链接时 kernel_entry.o 必须在 kernel.o 之前:

ld -m elf_i386 -T linker.ld -o kernel.bin kernel_entry.o kernel.o
# 顺序很重要!

原因C: 编译不是32位模式

解决: 确保使用 -m32 编译C代码,-f elf32 汇编内核入口。

2. 链接器报错 “undefined reference to kernel_main”

原因: kernel.o 没有包含在链接命令中

解决: 检查 Makefile,确保 kernel.o 参与链接。

3. GCC 报错 “cannot find -lgcc”

原因: 缺少32位库

解决:

sudo apt install gcc-multilib

4. 运行时三重错误(Triple Fault)

原因: 内核代码被加载到了错误的地址

调试: 用GDB检查内核加载位置:

(gdb) x/10i 0x1000
# 应该看到 kernel_entry 的代码

5. C代码中的全局变量值不正确

原因: BSS段没有被清零

解决: 在 kernel_entry.asm 中添加BSS清零代码,或在C中显式初始化所有变量。