Hello, OS world!

本文详细介绍了从零开始,利用VirtualBox、Ubuntu、NASM和Bochs等工具,生成虚拟软盘并将其写入引导扇区的过程,最终实现运行一个简易的‘Hello, OS world!’操作系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从0开始到”Hello, OS world!”

这篇文章主要涉及:

  • 如何安装VirtualBox 、Ubuntu、NASM 、Bochs
  • 如何生成虚拟软盘
  • 如何将引导扇区写入软盘,即运行一个超超超超小的“操作系统”

这一系列过程以及其中遇到的一些bug。废话不多说,开始吧!

安装工具

工欲善其事,必先利其器。先介绍NASM和Bochs:

NASM,全称Netwide Assembler,是一款基于英特尔x86架构的汇编与反汇编工具。它可以用来编写16位、32位(IA-32)和64位(x86-64)的程序。 NASM被认为是Linux平台上最受欢迎的汇编工具之一。Bochs,主要用于操作系统开发(当一个模拟操作系统崩溃,它不崩溃主机操作系统,所以可以调试仿真操作系统)和在主机操作系统运行其他来宾操作系统。(来自维基百科)

1. 在Mac上使用VirtualBox虚拟机安装Ubuntu

我完全参照了在Mac上使用virtualbox虚拟机安装ubuntu

其中第三点主机与虚拟机文件夹共享在后来的操作中也非常有用

2. 在Ubuntu上安装Bochs

不要用命令行直接安装,要去官网下载之后才能调试。

  1. 在Ubuntu中进入Boths官网,首页中有关于最新版的信息,点击SourceForge Project Page

  2. 然后就出现了一大堆东西,该下载哪个呢?从书上之后的代码来看,应该是下载boths-版本号.tar.gz,我的是nasm-2.6.9.tar.gz

  3. 下载完毕后打开终端,总共只有5条命令,第一条是:

    tar vxzf boths-2.6.9.tar.gz的绝对地址

    绝对地址可以直接拖那个文件进终端,我的是

    tar vxzf /home/chenyulei/下载/bochs-2.6.9.tar.gz

  4. 继续在终端输入第二条命令:

    cd bochs-2.6.9

    在主目录新建一个名为bochs-2.6.9的文件夹并打开

  5. 继续输入第三条命令:(记得以后重新输入的时候一定要在bochs-2.6.9目录下,就是要cd bochs-2.6.9一下

    ./configure --enable-debugger --enable-disasm

    这一步是为了打开调试功能的开关,但会出现一些bug:

    • Bug1:configure: error: no acceptable C compiler found in $PATH

      解决方法:首先输入cd回到主目录(不知道是否必然但是最好这样做一下,之后的bug也是,就不再提醒了),然后输入sudo apt-get install gcc

    • Bug2:configure: error: C++ preprocessor "/lib/cpp" fails sanity check

      解决方法:sudo apt-get install build-essential

    • Bug3:ERROR: X windows gui was selected, but X windows libraries were not found.

      解决方法:sudo apt-get install xorg-dev

    • Bug4:

      fatal error: X11/Xlib.h: No such file or directory
      fatal error: X11/extensions/Xrandr.h: No such file or directory

      解决方法:sudo apt-get install libx11-dev libxrandr-dev

  6. 直到没有error后,输入第四条和第五条命令:

    make
    sudo make install

3. 在Ubuntu上安装NASM

  1. 在Ubuntu中进入NASM官网,在首页的Latest Version中选择The latest stable version,我的是2.13.03

  2. 然后又出现了一大堆东西,依然下载nasm-版本号.tar.gz,我的是nasm-2.13.03.tar.gz

  3. 下载完毕后打开终端,总共只有5条命令,分别是

    tar vxzf nasm-2.13.03.tar.gz的绝对地址
    cd nasm-2.13.03
    /.configure
    make
    sudo make install

将源程序编译成可执行文件制作启动盘

该部分参考了https://blog.youkuaiyun.com/friendley/article/details/51398336

1. 使用NASM编译源文件

  • 在安装ubuntu时准备的共享文件夹这时候派上用场了,在mac os上把下载好的书上的代码复制到共享文件夹中,在ubuntu中的共享文件夹中打开终端,输入nasm boot.asm -o boot.bin
  • 将boot.bin和bootsrc移动到bochs-2.6.9目录下

2. 生成虚拟软盘

  • 依次在终端输入cd bochs-2.6.9bximage
  • 依次操作:
    • 输入1,回车
    • 输入fd,回车
    • 接下来都回车(默认输入方括号中的内容)

3. 将引导扇区写进软盘中

  • 此时软盘和编译好的源码都准备好了,并且都放在了bochs目录下,在终端输入:

    dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

  • 在bochs-2.6.9目录中找到bothscr并打开,修改其中内容为:

    特别注意:第9、10、13行的地址要修改为你的文件的绝对地址,在文件上右键属性可以查看父文件夹地址。

    
    ###################################################################
    
    
    # Configuration file for Bochs
    
    
    ###################################################################
    
    
    
    # how much memory the emulated machine will have
    
    megs: 32
    
    
    # filename of ROM images
    
    romimage: file=/home/chenyulei/bochs-2.6.9/bios/BIOS-bochs-latest, address=0xfffe0000
    vgaromimage: file=/home/chenyulei/bochs-2.6.9/bios/VGABIOS-elpin-2.40
    
    
    # what disk images will be used
    
    floppya: 1_44=/home/chenyulei/bochs-2.6.9/a.img, status=inserted
    
    
    # choose the boot disk
    
    boot: floppy
    
    
    # where do we send log message?
    
    log: bochsout.txt
    
    
    # disable the mouse
    
    mouse: enabled=0
    
    
    # enable key mapping, using US layout as default
    
    keyboard: type=mf, serial_delay=200, paste_delay=100000
    
  • 在终端输入bochs -f bochsrc

  • 依次操作:

    • 回车
    • 输入b 0x7c00,回车(在内存0x7c00处设置断点)
    • 输入c,回车(继续执行,直到遇上断点)
    • 输入c,回车

如果bochs中出现了红色的Hello, OS world!那么恭喜你成功了。

附:部分Bochs调试指令

行为指令
在某物理地址设置断点b addr
显示当前所有断点信息info break
继续执行,直到遇上断点c
单步执行s
单步执行(遇到函数则跳过)n
查看寄存器的信息info cpu 或 r 或 fp 或 sreg 或 creg
查看堆栈print-stack
查看内存物理地址内容xp /nuf addr
查看线性地址内容x /nuf addr
反汇编一段内存u start end
反汇编执行的每一条指令trace-on
每执行一条指令就打印CPU信息trace-reg
1. 用户与权限管理模块 角色管理: 学生:查看实验室信息、预约设备、提交耗材申请、参与安全考核 教师:管理课题组预约、审批学生耗材申请、查看本课题组使用记录 管理员:设备全生命周期管理、审核预约、耗材采购与分发、安全检查 用户操作: 登录认证:统一身份认证(对接学号 / 工号系统,模拟实现),支持密码重置 信息管理:学生 / 教师维护个人信息(联系方式、所属院系),管理员管理所有用户 权限控制:不同角色仅可见对应功能(如学生不可删除设备信息) 2. 实验室与设备管理模块 实验室信息管理: 基础信息:实验室编号、名称、位置、容纳人数、开放时间、负责人 功能分类:按学科(计算机实验室 / 电子实验室 / 化学实验室)标记,关联可开展实验类型 状态展示:实时显示当前使用人数、设备运行状态(正常 / 故障) 设备管理: 设备档案:名称、型号、规格、购置日期、单价、生产厂家、存放位置、责任人 全生命周期管理: 入库登记:管理员录入新设备信息,生成唯一资产编号 维护记录:记录维修、校准、保养信息(时间、内容、执行人) 报废处理:登记报废原因、时间,更新设备状态为 "已报废" 设备查询:支持按名称、型号、状态多条件检索,显示设备当前可用情况 3. 预约与使用模块 预约管理: 预约规则:学生可预约未来 7 天内的设备 / 实验室,单次最长 4 小时(可设置) 预约流程:选择实验室→选择设备→选择时间段→提交申请(需填写实验目的) 审核机制:普通实验自动通过,高危实验(如化学实验)需教师审核 使用记录: 签到 / 签退:到达实验室后扫码签到,离开时签退,系统自动记录实际使用时长 使用登记:填写实验内容、设备运行情况(正常 / 异常),异常情况需详细描述 违规管理:迟到 15 分钟自动取消预约,多次违规限制预约权限 4. 耗材与安全管理模块 耗材管理: 耗材档案:名称、规格、数量、存放位置、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值