《操作系统真象还原》第一章 从零搭建OS开发环境:虚拟机、编译器与Bochs实战
2026/7/14 9:05:41 网站建设 项目流程

1. 环境准备:虚拟机与Linux发行版选择

第一次尝试自己搭建操作系统开发环境时,我踩了不少坑。最头疼的就是开发环境的选择——到底该用物理机直接装Linux,还是用虚拟机?实测下来,虚拟机方案对新手友好太多。我用的是VMware Workstation Player(免费版完全够用),安装过程就像装普通软件一样简单。

Linux发行版的选择也有讲究。书里推荐的是Deepin,但我实测Ubuntu 22.04 LTS更稳定。这两个发行版都自带图形界面,操作起来跟Windows差不多。安装时记得勾选"安装第三方软件"选项,这样连WiFi驱动都能自动装好,省去后续麻烦。

提示:虚拟机磁盘空间建议分配至少40GB,内存给4GB以上。编译Bochs时会占用大量资源,配置太低容易卡死。

安装完系统后第一件事是更新软件源。我在公司网络下死活装不上依赖包,后来发现是默认源速度太慢。换成阿里云镜像源后,下载速度直接从10KB/s飙升到10MB/s:

sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list sudo apt update

2. 开发工具链安装:从GCC到NASM

操作系统开发离不开三大神器:GCC编译器NASM汇编器Make构建工具。在Ubuntu上一条命令就能搞定:

sudo apt install build-essential nasm make

这里有个坑要注意:书上说需要安装libghc-x11-dev,其实新版Ubuntu已经改名为libx11-dev。我第一次照着书敲命令报错时还以为自己输错了,查了半天才发现是包名变更。正确的安装命令是:

sudo apt install libx11-dev xorg-dev

验证GCC是否安装成功时,我习惯用个小技巧:

gcc -v

如果看到类似"gcc version 11.3.0"的输出,说明工具链就绪。千万别小看这个检查,我有次虚拟机异常导致gcc没装全,后面编译Bochs时各种诡异报错,浪费了两小时才发现是gcc的问题。

3. Bochs安装与配置:x86模拟器的坑点实录

Bochs是本书的核心工具,它能模拟完整的x86环境。但官网下载速度感人,我试了三次都中途断连。后来找到的替代方案是用国内镜像:

wget https://mirrors.ustc.edu.cn/sourceforge/bochs/bochs/2.6.8/bochs-2.6.8.tar.gz

解压后别急着编译,先创建安装目录。我建议放在用户目录下,避免权限问题:

mkdir ~/bochs

配置阶段最考验耐心。我第一次直接复制书上的配置命令,结果报了一屏错误。后来发现是漏装了依赖库。完整的配置命令应该是:

./configure --prefix=/home/你的用户名/bochs \ --enable-debugger \ --enable-disasm \ --enable-iodebug \ --enable-x86-debugger \ --with-x \ --with-x11 \ LDFLAGS='-pthread'

编译过程可能持续20-30分钟。如果遇到"fatal error: X11/Xlib.h: No such file or directory",说明xorg-dev没装对,需要重新安装前文提到的依赖。

4. 第一个MBR程序:从汇编到运行

当看到Bochs终于安装成功时,我激动地马上开始写MBR引导程序。这个16位汇编程序要完成三件事:

  1. 初始化寄存器
  2. 调用BIOS中断清屏
  3. 打印"Hello World"

书上的代码直接复制可能会出问题,特别是vstart=0x7c00这个地址声明。我调试时发现如果漏掉这行,变量地址全都会错位。正确的代码结构应该是:

SECTION MBR vstart=0x7c00 mov ax, cs mov ds, ax ; 数据段与代码段同址 ; 清屏功能实现 mov ax, 0x600 mov bx, 0x700 mov cx, 0 mov dx, 0x184f int 0x10 ; 打印字符串 mov ax, message mov bp, ax mov cx, 12 ; "Hello World!"长度 mov ax, 0x1301 mov bx, 0x0007 ; 黑底白字 int 0x10 jmp $ ; 无限循环 message db "Hello World!" times 510-($-$$) db 0 db 0x55, 0xaa ; 引导签名

编译和写入磁盘的命令也有讲究。nasm生成二进制文件后,要用dd写入镜像文件,注意conv=notrunc参数绝对不能少,否则会截断整个镜像文件:

nasm -f bin -o mbr.bin mbr.s dd if=mbr.bin of=hd60M.img bs=512 count=1 conv=notrunc

最后启动Bochs时,如果直接运行可能会报"ROM: couldn't open ROM image file"错误。这是因为配置文件里的路径需要修改成你的实际安装路径。我的bochsrc.disk配置如下:

megs: 32 romimage: file=/home/你的用户名/bochs/share/bochs/BIOS-bochs-latest vgaromimage: file=/home/你的用户名/bochs/share/bochs/VGABIOS-lgpl-latest boot: disk log: bochs.out mouse: enabled=0 keyboard: keymap=/home/你的用户名/bochs/share/bochs/keymaps/x11-pc-us.map ata0-master: type=disk, path="hd60M.img", mode=flat

当黑屏窗口终于显示出"Hello World!"时,那种成就感简直无法形容。这个过程我反复折腾了五六次,从环境配置到代码调试,每个环节都可能出错。建议新手一定要耐心看报错信息,大部分问题都能通过错误提示找到解决方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询