学习操作系统原理最好的方法是自己写一个简单的操作系统。


在上一讲中我们已经安装配置了开发环境,在本讲中我们来测试一下开发环境是否正常。

我们的测试流程如下:

1.在Visual Studio Code中编写GrapeOS代码;

2.在CentOS中编译GrapeOS代码;

3.在QEMU中运行GrapeOS。

注意:在本讲中涉及到的代码或操作如有不懂的地方暂时不用管,后面会讲。本讲只是为了测试开发环境是否正常,只要你能跟着做下来就行。

下面我们来依次测试这3步流程。


1. 在Visual Studio Code中编写GrapeOS代码

1.1 在我们上讲中建立的共享文件夹中新建一个名为“grapeos-course”的文件夹:

1.2 打开Visual Studio Code,在欢迎页面中点击“打开文件夹”:

1.3 选中我们刚才新建的文件夹“grapeos-course”:

1.4 在Visual Studio Code左侧的资源管理器中点击“新建文件夹”图标:

1.5 输入新文件夹名“Lesson5”:

1.6 选中新建的文件夹“Lesson5”,然后点击“新建文件”图标:

1.7 输入新文件名“boot.asm”:

1.8 在boot.asm中输入如下代码:

org 0x7c00
mov ax,cs
mov ds,ax
mov ax,0xb800
mov gs,ax mov ah,0x07
mov al,'G'
mov [gs:0x0],ax
mov al,'r'
mov [gs:0x2],ax
mov al,'a'
mov [gs:0x4],ax
mov al,'p'
mov [gs:0x6],ax
mov al,'e'
mov [gs:0x8],ax
mov al,'O'
mov [gs:0xa],ax
mov al,'S'
mov [gs:0xc],ax stop:
hlt
jmp stop times 510-($-$$) db 0
db 0x55,0xaa


2. 在CentOS中编译GrapeOS代码

2.1 打开VirtualBox

选中上讲中安装好的CentOS,点击绿色的“启动”图标:

2.2 CentOS启动后的界面如下:

2.3 打开PowerShell

Windows键+R键打开运行窗口,输入“powershell”:

2.4 SSH登录CentOS

在PowerShell中通过SSH登录CentOS,并进入共享文件夹“/media/VMShare/”中,可以看到我们刚才新建的文件夹“grapeos-course”:

2.5 创建虚拟硬盘。

在命令行中输入下面这行命令:

dd if=/dev/zero of=/media/VMShare/GrapeOS.img bs=1M count=4

可以看到生成了一个新文件“GrapeOS.img”:



“GrapeOS.img”就是我们创建的虚拟硬盘,虽然只有4MB,但对GrapeOS来说足够了。

2.6 编译程序。

进入本讲文件夹“Lesson5”,并输入下面这行命令:

nasm boot.asm -o boot.bin

可以看到新生成了一个"boot.bin"文件:



如果提示没有“nasm”这个命令,通过yum安装即可:

yum install nasm

2.7 将boot.bin写入虚拟硬盘。

在命令行中输入下面这行命令:

dd conv=notrunc if=boot.bin of=/media/VMShare/GrapeOS.img

截图如下:


3. 在QEMU中运行GrapeOS

3.1 启动QEMU

打开Windows的cmd命令行窗口,输入下面这行命令:

qemu-system-i386 d:\GrapeOS\VMShare\GrapeOS.img

截图如下:

3.2 查看QEMU

此时弹出了QEMU的窗口:



如果在QEMU窗口第一行中看到前7个字符是“GrapeOS”就说明开发环境正常。


如果需要可以观看本讲的视频版:https://www.bilibili.com/video/BV1p84y1V71A/

GrapeOS操作系统交流QQ群:643474045

自己动手从零写桌面操作系统GrapeOS系列教程——5.GrapeOS开发环境测试的更多相关文章

  1. 使用U盘安装Linux最美桌面发行版Elementary OS 及常用开发环境配置(JDK,Redis,MySQL,Docker,IDEA,STS)

    前言 假期在家无聊,刚好把六年前的一台笔记本电脑利用起来,原来电脑虽然说配置说不上古董机器,但是运行win系统感觉还是不流畅,所幸给换成Linux桌面版系统,在网上查阅了很多,Linux桌面系统要么推 ...

  2. 别人写的一个Bootstrap系列教程

    http://www.cnblogs.com/lansy/category/659061.html

  3. 基于SpringBoot从零构建博客网站 - 技术选型和整合开发环境

    技术选型和整合开发环境 1.技术选型 博客网站是基于SpringBoot整合其它模块而开发的,那么每个模块选择的技术如下: SpringBoot版本选择目前较新的2.1.1.RELEASE版本 持久化 ...

  4. 从零到一创建ionic移动app:基础开发环境搭建

    myAPP项目是在Ubuntu14.04下创建   本项目开发node 4.5/cordova 6/ionic 2   第一步 安装nodejs npm install -g n n v4.5.0 使 ...

  5. Android零基础入门第65节:RecyclerView分割线开发技巧

    在上一期通过简单学习,已经领略到了RecyclerView的灵活性,当然都是一些最基础的用法,那么本期一起来学习RecyclerView的分割线使用. 相信有的比较细心的同学已经发现了,使用Recyc ...

  6. 一个人写的操作系统 - Sparrow OS

    一个人写的操作系统 - Sparrow OS 自己写一个操作系统,这是在过去的几年里我一直为之努力的目标,现在终于完成了. 缘起 自己动手写操作系统的动机最初来自于学习Linux遇到的困难. 我是一个 ...

  7. 自制 os 极简教程1:写一个操作系统有多难

    为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ...

  8. 【操作系统】关于Linux桌面操作系统

    以前是Win+Ubuntu+黑苹果,周末想体验一下deepin,于是简单安装了一下,安装过程很简单,这里不再描述.安装之后,第一次打开系统,确实很惊艳,赏心悦目的操作系统. 之前用Ubuntu时候,C ...

  9. 盘点|2021年最受欢迎Linux桌面操作系统前十名

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 阿里云开源镜像站利用云服务上的优势,提供快速.稳定的镜像分发服务.和免费的CDN加速服务.更新频率高,基本上一天一更新,对于Centos/Ubun ...

  10. 手把手教你从零写一个简单的 VUE

    本系列是一个教程,下面贴下目录~1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 今天给大家带来的是实现一个简单的类似 VUE 一样的前端框架,VUE 框架现在应 ...

随机推荐

  1. 4.3:flume+Kafka日志采集实验

    〇.目标 使用kafka和flume组合进行日志采集 拓扑结构 一.重启SSH和zk服务 打开终端,首先输入:sudo service ssh restart 重启ssh服务.之后输入下述命令开启zo ...

  2. 【每日一题】【第n个 n-->0】19./NC53 【删除】链表的倒数第 N 个结点-211123/220127

    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 答案: import java.util.*; /* * public class ListNode { * int val; * ...

  3. 【Hadoop面试】基础概念、HDFS、MapReduce、Yarn、实战

    一.Hadoop概念及架构 1.是否看过Hadoop源码 2.正常工作的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用分别是什么 3.hadoop和spark中的文件缓存方式 4.h ...

  4. 盘点JAVA中基于CAS实现的原子类, 你知道哪些?

    前言 JDK中提供了一系列的基于CAS实现的原子类,CAS 的全称是Compare-And-Swap,底层是lock cmpxchg指令,可以在单核和多核 CPU 下都能够保证比较交换的原子性.所以说 ...

  5. 前端内容(HTML CSS javaScript)

    前端内容 前端基础之HTML 前端基础之HTML HTML标签使用 HTML之form表单 前端基础之CSS 前端基础之CSS CSS字体颜色 背景 盒子模型 CSS浮动 溢出 头像框 CSS定位 i ...

  6. DOM(原生js事件绑定)

    一:原生js事件绑定 1.开关灯案例 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  7. 使用docker中的MySQL

    简言 好久没写文章了,今天分享一篇将mysql移到docker容器.大家都是程序员,如何安装docker我就不说了.  1. 安装.启动mysql镜像 首先使用 docker search mysql ...

  8. 周结之json补充、正则re模块、hashlib模块、logging模块

    周结 目录 周结 json补充 正则表达式 re模块 第三方模块的下载 request模块 办公自动化openpyxl模块 hashlib加密模块 subprocess模块 logging日志模块 j ...

  9. java中的instanceof方法

    本文主要讲述java中的instanceof()方法. 示例代码如下: public class InstanceTest { public static void main(String[] arg ...

  10. uniapp小程序使用高德地图api实现路线规划

    路线规划 简介 路线规划常用于出行路线的提前预览,我们提供4种类型的路线规划,分别为:驾车.步行.公交和骑行,满足各种的出行场景. 高德开放平台 本例是驾车路线规划功能和位置选择地图api:choos ...