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


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

我们的测试流程如下:

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. 【Shell案例】【awk map计数&sort按指定列排序】9、统计每个单词出现的个数

    描述写一个 bash脚本以统计一个文本文件 nowcoder.txt 中每个单词出现的个数. 为了简单起见,你可以假设:nowcoder.txt只包括小写字母和空格.每个单词只由小写字母组成.单词间由 ...

  2. 多进程TCP服务端并发- 进程join方法 - IPC机制

    目录 同步与异步 阻塞与非阻塞 综合使用 创建进程的多种方式 进程间数据隔离 进程join方法 IPC机制 生产者消费者模型 进程对象的多种方法 僵尸进程与孤儿进程 守护进程 多线程实现TCP服务端并 ...

  3. angr_ctf——从0学习angr(三):Hook与路径爆炸

    路径爆炸 之前说过,angr在处理分支时,采取统统收集的策略,因此每当遇见一个分支,angr的路径数量就会乘2,这是一种指数增长,也就是所说的路径爆炸. 以下是路径爆炸的一个例子: char buff ...

  4. python语法之注释

    引言 注释的最大作用是提高程序的可读性,在开发过程中非常有必要加上注释.Python 支持两种类型的注释,分别是单行注释和多行注释. 1 单行注释 Python 使用井号#作为单行注释的符号,语法格式 ...

  5. 如何自定义调整bootstrap的模态框大小

    背景 项目遇到一个需求,一个大表格放到模态框中,总是会出现撑开的效果,换了文档最大的modal-lg样式还不能解决,原因就是官方不支持更大号的模态框,需要自定义. 经过尝试理解,总结出调整模态框大小通 ...

  6. Proxmark3 Easy 如何流畅的在Linux中操作?

    前言 Proxmark3 Easy可谓是国内能买到的比较便宜的RFID卡防设备了,曾在部分hv中出现. Proxmark3 Easy是国内简化的一种设备,利用的是较早的Proxmark3的开源,基础的 ...

  7. 浅谈LCA问题(最近公共祖先)(四种做法)

    [模板]最近公共祖先(LCA) \(update \ 2023.1.3\) 新增了树链剖分 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入格式 第一行包含三个正整数 \ ...

  8. angular--连接服务获取数据并展示到页面加载结束禁用按钮-分页加载-管道使用

  9. BUG日记之-----Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway.

    在使用swagger进行测试的时候调用弹窗  解决办法: 在启动类添加@EnableSwagger2注解

  10. Quartz.Net 官方教程 Tutorial 3/3

    Schedule 相关属性设置 扩展属性方式 var host = Host.CreateDefaultBuilder() .ConfigureServices(services => { se ...