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


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

我们的测试流程如下:

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. 【离线数仓】Day02-用户行为数据仓库:分层介绍、环境搭建(hive、tez)、LZO压缩、建表查询导入加索引、编写脚本

    一.数仓分层概念 1.为什么要分层 ODS:原始数据层 DWD层:明细数据层 DWS:服务数据层 ADS:数据应用层 2.数仓分层 3.数据集市与数据仓库概念 4.数仓命名规范 ODS层命名为odsD ...

  2. 18V转5V,15V转5V的LDO和DC芯片方案

    18V 转 5V, 15V 转 5V 的 LDO:芯片的选择,特别是输入电压,在低电平 5V 以下的,基本上都是接近也可以.但是 5V 以上,如现在的 18V 和 15 的话,就不一样了.我们需要在选 ...

  3. new的函数如果有return

    1 function FnA() { return { a: 1 } } 2 function FnB() { return false } 3 function FnC() { return tru ...

  4. STM32外部中断(EXTI)控制LED亮灭的代码

    led.c #include "led.h" void LED_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2P ...

  5. CH579-Lwip-2.12移植

    代码可以参考以下链接:https://gitee.com/maji19971221/lwip-routine Lwip可以在以下链接下载:http://download.savannah.gnu.or ...

  6. Redis-01 常用命令

    创建和获取 key 命令 说明 例子 set 创建一个名为 key 值为 value 键值对 set views 10 get 获取名为 key 的值,存在返回值,不存在返回 nil get view ...

  7. 为什么 java 容器推荐使用 ExitOnOutOfMemoryError 而非 HeapDumpOnOutOfMemoryError ?

    前言 好久没写文章了, 今天之所以突然心血来潮, 是因为昨天出现了这样一个情况: 我们公司的某个手机APP后端的用户(customer)微服务出现内存泄露, 导致OutOfMemoryError, 但 ...

  8. 聊聊MongoDB中连接池、索引、事务

    大家好,我是哪吒. 三分钟你将学会: MongoDB连接池的使用方式与常用参数 查询五步走,能活九十九? MongoDB索引与MySQL索引有何异同? MongoDB事务与ACID 什么是聚合框架? ...

  9. 《STL源码剖析》traits技法分析

    在完成一个迭代器的时候,我们可能会暴露太多的细节在外面,为了将这些细节给隐藏,我们需要封装,这也是为什么每一种STL容器都提供了一种专属的迭代器. 为了解决以"迭代器所指对象的型别" ...

  10. 分布式协议与算法-Raft算法

    本文总结自:极客时间韩健老师的分布式协议与算法实战课程. 大家都知道,Raft算法属于Multi-Paxos算法,它是在Multi-Paxos思想的基础上,做了一些简化和限制.关于Paxos算法,博主 ...