常见问题

安装相关

Q: sudo apt install 报错 “Unable to locate package”

原因: 包管理器缓存过期。

解决:

sudo apt update
# 然后重新安装

Q: macOS 上 gcc 实际上是 Clang

原因: macOS 的 gcc 命令默认指向 Clang。

解决: 使用交叉编译器 i686-elf-gcc:

brew install i686-elf-gcc

后续 Makefile 中将 gcc 替换为 i686-elf-gcc。

Q: WSL 中 QEMU 窗口不显示

原因: 缺少图形界面支持。

解决:

  • Windows 11: 确保 WSL2 已更新到最新版(自带 WSLg)
  • Windows 10: 安装 VcXsrv 并设置 DISPLAY 环境变量:
    export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

Q: QEMU 启动报错 “Could not initialize SDL”

解决: 安装 SDL 库:

sudo apt install libsdl2-dev

或使用无窗口模式测试:

qemu-system-x86_64 -drive format=raw,file=test.img -nographic

编译相关

Q: gcc -m32 报错 “cannot find -lgcc”

原因: 缺少32位库支持。

解决:

sudo apt install gcc-multilib

Q: NASM 报错 “unrecognized option”

原因: NASM 版本过低。

解决:

# 检查版本
nasm --version
 
# 如果版本低于 2.14,手动安装新版
sudo apt install nasm

调试相关

Q: GDB 连接 QEMU 失败

解决: 启动 QEMU 时添加调试选项:

# 启动 QEMU 并等待 GDB 连接
qemu-system-x86_64 -drive format=raw,file=os.img -s -S
 
# 在另一个终端启动 GDB
gdb
(gdb) target remote localhost:1234

Q: GDB 没有源码信息

解决: 编译时添加调试信息:

gcc -m32 -g -ffreestanding -c kernel.c -o kernel.o
nasm -f elf32 -g boot.asm -o boot.o