从零开始写一个操作系统 —— 4.qemu

1.qemu的作用

qemu属于虚拟机模拟器。操作系统属于软件,软件需要依托于硬件(正如你所见到的实体电脑)运行。qemu使用软件模拟出一种硬件环境,让我们编写的操作系统认为它被运行到了硬件中。

2.qemu的安装

这里我们使用的是Linux环境,使用apt工具安装:

bash 复制代码
sudo apt install qemu-system-x86

安装完成后,我们即可在/usr/bin目录下发现

bash 复制代码
user@pc:/usr/bin$ ls|grep qemu
...
qemu-system-i386
qemu-system-x86_64
...

其中qemu-system-i386就是我们需要用到的intel i386架构虚拟机程序。

3.qemu的使用

正如我们使用普通的Linux命令行工具一样,qemu的使用也是在命令行中输入该命令加上参数并运行,最简单的使用方法为:

bash 复制代码
qemu-system-i386 -drive file=system,format=raw -nographic

其中-drive file=system,format=raw参数的意义为选择当前目录下的system文件作为操作系统来驱动我们的i386虚拟机,并且format=raw视该文件为原始的操作系统文件。-nographic不使用可视化窗口,将输出引导至终端。

3.1一个有意思的最小交互操作系统

以下为一个小操作系统system.s的示例代码:

asm 复制代码
org 0x7c00
    
    mov dx, 0x3f8
scant:
    in  al, dx
    out dx, al
    
    jmp scant
    
times 510 - ($ - $$) db 0
dw 0xaa55

使用nasm工具编译之:

bash 复制代码
nasm system.s -o system

我们就可以得到一个可交互的非常小的操作系统system。 使用前面提到的命令:

bash 复制代码
qemu-system-i386 -drive file=system,format=raw -nographic

运行后即可观察到:

bash 复制代码
SeaBIOS (version 1.13.0-1ubuntu1.1)


iPXE (http://ipxe.org) 00:03.0 CA00 PCI2.10 PnP PMM+07F8CA10+07ECCA10 CA00



Booting from Hard Disk...

按下键盘,开始与"操作系统"交互吧!

相关推荐
LUCIAZZZ16 小时前
JVM之内存管理(二)
java·jvm·后端·spring·操作系统·springboot
尸僵打怪兽19 小时前
软考错题集
java·python·计算机网络·操作系统·c·软考·计算机组成原理
望获linux3 天前
工业软件自主化突围:RTOS 如何打破 “协议栈 - 控制器” 生态垄断
linux·人工智能·操作系统·开源软件·嵌入式软件·工业软件
LUCIAZZZ4 天前
ElasticSearch基本概念
java·大数据·elasticsearch·搜索引擎·中间件·操作系统
望获linux4 天前
实时操作系统:航空电子系统的安全基石还是创新枷锁?
人工智能·安全·机器人·操作系统·开源软件·rtos·飞行器
LUCIAZZZ4 天前
简单介绍分布式定时任务XXL-JOB
java·spring boot·分布式·spring·操作系统·定时任务
LUCIAZZZ5 天前
Caffeine快速入门
java·后端·spring·缓存·操作系统·springboot
ssslar5 天前
MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - user/_sleep 是什么?做什么?
操作系统·xv6·risic-v
ssslar6 天前
MIT XV6 - 1.2 Lab: Xv6 and Unix utilities - pingpong
操作系统·risc-v·xv6
羑悻的小杀马特7 天前
【Linux篇章】Linux 进程信号1:解锁系统高效运作的 “隐藏指令”,开启性能飞跃新征程(精讲信号产生和保存)
linux·运维·服务器·学习·操作系统·进程信号