想写一个OS很久了,今天开始正式动工了!!

大家都知道操作系统是计算机科学中十分重要的一门基础学科。但是以前在学习这门课时,仅仅只是把目光停留在课本上一些关于操作系统概念上的叙述,并不能对操作系统有着深层次的理解。毕竟实践出真理。 MIT的操作系统课程6.828是一门被广泛好评的入门课程。它最重要的特点就是它实践第一的教学原则。在这门课程中会涉及到非常丰富的实验,也会有非常多的动手机会。而且授课者更是亲自构建了一个简化的基于Unix内核的操作系统xv6。所有的实验都是在这个操作系统上完成。虽然它功能很简单,但是它能够帮助我们真正的了解操作系统在做什么。 这一系列博文就是用来记录我学习JOS的过程的!

废话不多说。

在开始做lab之前的第一件事当然是搭建开发环境了。

本文就来简单说明一下开发环境的搭建过程。

我是采用Parallels Desktop来运行linux ubuntu 12.04。开发环境也都是在这个上面搭建的。

首先我们需要安装git和QEMU,用以下命令就可以安装QEMU

 $ sudo apt-get install git
$ git clone git://git.qemu-project.org/qemu.git
Cloning into 'qemu'...
remote: Counting objects: 131834, done.
remote: Compressing objects: 100% (29320/29320), done.
remote: Total 131834 (delta 104345), reused 129302 (delta 102090)
Receiving objects: 100% (131834/131834), 45.42 MiB | 300 KiB/s, done.
Resolving deltas: 100% (104345/104345), done.
Checking out files: 100% (2849/2849), done.
$ cd qemu/
$ ./configure
$ make
$ sudo make install

这中间会出现很多问题,下面大致说一下

在运行./configure时,会出现缺少一些程序的问题,显示如下

Error: zlib check failed

Make sure to have the zlib libs and headers installed.

其实需要安装的远不止上面的显示信息。

下面大致罗列一些需要安装的软件和相应解决的命令

  c++ compiler: sudo apt-get install g++

  libtool : sudo apt-get install libtool

  glib: sudo apt-get install libglib2.0-dev

  pixman: sudo apt-get install libpixman-1-dev  

  zlib: sudo apt-get intall zlib1g-dev

  

dtc:

git submodule update --init dtc

cd dtc

git fetch origin #

git rebase origin/master

make

这中间有一个先后顺序,记得不要搞混

到这里运行./configure就可以成功显示一些配置信息,接下来,make一下就可以了。虽然这个过程有点点长、

编译完成后运行sudo make install ,此时qemu就已经安装上了。

接下来就是将xv6在qemu上运行起来了。

git clone https://github.com/fatsheepzzq/6.828mit.git

cd lab

make

这样xv6就开始编译了。我们可以看一下它生成的最后一个信息 mk obj/kern/kernel.img,这个kernel.img就是内核映像文件,另外obj目录在make之前是没有的,它是make指令生成的,它里面将会有许多的文件我们之后会重点观察。

最后运行make qemu,此时qemu就开始自动加载我们的操作系统内核映像文件了。

本章完结

JOS环境搭建的更多相关文章

  1. 自学php的几个例子(包含AMP(Apache、MySQL、PHP)环境搭建链接)

    学习PHP之前需要先搭建PHP运行的环境(即服务器+PHP+数据库)来使PHP成功运行,具体环境搭建教程可参考pharen(http://www.cnblogs.com/pharen/archive/ ...

  2. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  3. Azure Service Fabric 开发环境搭建

    微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...

  4. rnandroid环境搭建

    react-native 环境搭建具体步骤这个大家已经玩烂了,这个主要是记录下来自己做win7系统遇到的坑 1.com.android.ddmlib.installexception 遇到这个问题,在 ...

  5. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  6. springMVC初探--环境搭建和第一个HelloWorld简单项目

    注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...

  7. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  8. Nexus(一)环境搭建

    昨天,成功搭建了自己的 Maven 环境(详见:Maven(一)环境搭建),今天就来研究和探讨下 Nexus 的搭建! 使用背景: 安装环境:Windows 10 -64位 JDK版本:1.7 Mav ...

  9. 「译」JUnit 5 系列:环境搭建

    原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...

随机推荐

  1. ffmpeg处理rtmp/文件/rtsp的推流和拉流

    ffmpeg处理rtmp/文件/rtsp的推流和拉流   本demo演示了利用ffmpeg从服务器拉流或本地文件读取流,更改流url或文件类型名称发送回服务器或存到本地的作用. 由于本程序只写了3个小 ...

  2. [转]unity3d中创建双面材质

    在其它三维软件中设置好的双面材质导入到unity3d中就失去了效果,不过我们可以通过自定义材质来在unity3d中实现双面材质的效果.步骤如下:1.在资源库中新建一新shader:代码如下: Shad ...

  3. HDOJ1022(模拟栈)

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. JVM插庄之一:JVM字节码增强技术介绍及入门示例

    字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术. 目的:在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修 ...

  5. js右击事件

    先贴代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...

  6. 记录对定时任务调度器的小小改进 - API调度计划

    之前记录过一篇 [开源一个定时任务调度器 webscheduler],这是一个看似简单的小工具,昨天部署到服务器上开始试用下,听听反馈. 项目经理看过后,立马反馈说这个使用 Cron表达式 的计划太难 ...

  7. storm操作zookeeper源码分析-cluster.clj

    storm操作zookeeper的主要函数都定义在命名空间backtype.storm.cluster中(即cluster.clj文件中).backtype.storm.cluster定义了两个重要p ...

  8. C#的递归函数

    我的理解:函数内部把自己当另一个函数来调用 其实还是调用的他自己 递归函数必须有结束条件,否则就是死循环

  9. rest framework 权限

    一.权限示例 需求:不同的用户类型有不同的权限 普通用户:只能查看个人信息相关,序号:1 VIP 用户:只能查看个人信息相关,序号:2 SVIP 用户:查看订单相关信息,序号:3 1.新建 app/u ...

  10. Go:json包的坑

    import encoding/json func test() { m := make(map[string]string) a := `{"xiaoming":"男& ...