本文将介绍如何在macOS下配置MIT6.828 JOS实验的环境。

写JOS之前,在网上搜寻JOS的开发环境,很多博客和文章都提到“不是32位linux就不好配置,会浪费大量时间在配置环境”上之类的论调。故前期开发直接使用了32位ubuntu系统,并做了共享文件系统,背景开一个ubuntu虚拟机进行编译。

最近实在无法忍受背景开虚拟机那恐怖的耗电量和发热量,尝试将开发环境移到macOS下,竟发现非常的简单。

Tools we need

在搭建环境之前,首先macOS上需要有以下两个工具:

运行JOS

  • QEMU

    有了Homebrew,直接利用brew安装即可安装(自动安装依赖库)

    $brew install qemu
  • kernel.imgfs.img放在目标目录下 (也可以在其他位置,为了下面的Makefile好写)

    .
    ├── Makefile
    ├── fs.img
    └── kernel.img
  • 书写Makefile

    QEMU=/usr/local/Cellar/qemu/2.10.0/bin/qemu-system-i386 # path to qemu
    run:
    $(QEMU) -drive file=./kernel.img,index=0,media=disk,format=raw -serial mon:stdio -vga std -smp 1 -drive file=./fs.img,index=1,media=disk,format=raw

编译JOS

  • i386-elf-gcc

    利用Macports来安装i386-elf-gcc

    $ sudo port -v selfupdate
    $ sudo port install i386-elf-gcc

    Macports会帮你下载源码,编译(非常漫长)

  • 修改Makefile中的一些内容

    diff --git a/GNUmakefile b/GNUmakefile
    index adc693e..60fe010 100644
    --- a/GNUmakefile
    +++ b/GNUmakefile
    @@ -33,15 +33,15 @@ TOP = . # try to infer the correct GCCPREFIX
    ifndef GCCPREFIX
    -GCCPREFIX := $(shell if i386-jos-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \
    - then echo 'i386-jos-elf-'; \
    +GCCPREFIX := $(shell if i386-elf-objdump -i 2>&1 | grep '^elf32-i386$$' >/dev/null 2>&1; \
    + then echo 'i386-elf-'; \
    elif objdump -i 2>&1 | grep 'elf32-i386' >/dev/null 2>&1; \
    then echo ''; \
    else echo "***" 1>&2; \
    echo "*** Error: Couldn't find an i386-*-elf version of GCC/binutils." 1>&2; \
    - echo "*** Is the directory with i386-jos-elf-gcc in your PATH?" 1>&2; \
    + echo "*** Is the directory with i386-elf-gcc in your PATH?" 1>&2; \
    echo "*** If your i386-*-elf toolchain is installed with a command" 1>&2; \
    - echo "*** prefix other than 'i386-jos-elf-', set your GCCPREFIX" 1>&2; \
    + echo "*** prefix other than 'i386-elf-', set your GCCPREFIX" 1>&2; \
    echo "*** environment variable to that prefix and run 'make' again." 1>&2; \
    echo "*** To turn off this error, run 'gmake GCCPREFIX= ...'." 1>&2; \
    echo "***" 1>&2; exit 1; fi)
  • 修改.deps中一些内容

    删除fsformat的依赖检查

    obj/fs/: fs/fsformat.c
  • 修改配置文件中的qemu参数

    QEMU=/usr/local/Cellar/qemu/2.10.0/bin/qemu-system-i386

编译运行JOS

MIT6.828课程JOS在macOS下的环境配置的更多相关文章

  1. Linux课程---14、linux下lamp环境如何安装

    Linux课程---14.linux下lamp环境如何安装 一.总结 一句话总结: 要按顺序安装,比如apache需要在php之前安装, 一.安装 gcc 编译器 二.卸载 rpm 安装的 http ...

  2. 【转存】阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3

    阿里云服务器下 LAMP 环境配置 —— 基于 CentOS 6.3  Posted on 2016年2月10日 by  学院君 1.Apache 配置 —————————————————– vi / ...

  3. Windows 下 MSYS2 环境配置和 MinGW-w64 C++ 环境配置

    Windows 下 MSYS2 环境配置和 MinGW-w64 C++ 环境配置 1.简介 本文主要是 Windows 下 MSYS2 环境配置和 MinGW-w64 C++编译环境配置方法 2.下载 ...

  4. MIT JOS学习笔记01:环境配置、Boot Loader(2016.10.22)

    未经许可谢绝以任何形式对本文内容进行转载! 一.环境配置 关于MIT课程中使用的JOS的配置教程网上已经有很多了,在这里就不做介绍,个人使用的是Ubuntu 16.04 + qemu.另注,本文章中贴 ...

  5. MAC下 JDK环境配置、版本切换以及ADB环境配置

    网上方法,自己总结:亲测可行! 一.JDK环境配置.版本切换: 通过命令’jdk6′, ‘jdk7′,’jdk8’轻松切换到对应的Java版本: 1.首先安装所有的JDk:* Mac自带了的JDK6, ...

  6. CentOS 下 LNMP 环境配置

    安装配置 Nginx 安装配置 MySQL 安装配置 PHP Nginx 与 PHP-FPM 集成 环境配置验证   LNMP 环境代表 Linux 系统下 Nginx + MySQL + PHP 网 ...

  7. java入门---windows和Linux,UNIX,Solaris,FreeBSD下开发环境配置

        首先来看Windows下的操作.我们需要下载java开发工具包JDK.下载地址:http://www.oracle.com/technetwork/java/javase/downloads/ ...

  8. linux下go环境配置

    环境申明: centos 7.4 1.go下载最新的版本(linux) 下载本地后rz到服务器,然后tar -zxvf  go1.9.2.linux-amd64.tar.gz   解压出go文件放在 ...

  9. Python在Windows下开发环境配置汇总

    最近比较关注学习Python方面的资料和课程,由于Python本身基本都是在Linux下开发,本人windows用习惯了初用Linux各种别扭啊. 下面将我在配置Windows环境下的禁言写出来,与大 ...

随机推荐

  1. 图解虚数 - A Visual, Intuitive Gudie to Imaginary Numbers

    这是一篇发表在 betterexplained 上的文章.它通过类比.图解的方式简明地介绍了虚数的意义. 作者:Kalid 原文:A Visual, Intuitive Gudie to Imagin ...

  2. IMPEX

    1.Impex是基于java Model的一种面向对象的数据操作手段,因此写impex代码前需要理清java Model之间的依赖关系. 2.基本语法:mode type[modifier=value ...

  3. python几种常见语法

    NO1.type自动匹配类型 name="zhangsan"age=18 print (type(name))#type自动匹配类型 print ("name:%s,ag ...

  4. 微信小程序(有始有终,全部代码)开发--- 新增模块: 图片选取以及拍照功能

    开篇语 前几天发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本: 简年18: 微信小程序(有始有终,全部代码)开发 ...

  5. Unity 继承MonoBehaviour脚本 执行顺序 详解

    先看结果 Awake ->OnEnable-> Start ->-> FixedUpdate-> Update  -> LateUpdate ->OnGUI ...

  6. Canvas 旋转风车绘制

    写在前面:   亲爱的朋友们大家好,鄙人自学前端,第一次写博客,写的不好的地方,烦请同学们谅解,如果本文对你有一丁点帮助,还请劳驾您给我点个赞,您的认可将是我坚持下去的强大动力!谢谢! 在进行教学之前 ...

  7. db2 表关联查询

    今天在MapReduce的练习中看到了一个题目: file: CHILD PARENT ---------- ---------- tom lucy tom jack jone lucy jone j ...

  8. Linux Oracle服务启动&停止脚本与开机自启动[转]

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...

  9. js面试题知识点全解(一变量类型和计算)

    1.js中使用typeof能得到哪些类型 2.何时使用===和== 3.js中的内置函数 4.js变量按存储方式区分为哪些类型,并描述其特点 5.如何理解json 以下对这些问题的知识点做一些总结: ...

  10. js 小数计算为啥和想象中不一样!

    今天遇到了一个比较有趣的事,如果要你计算0.1+0.2等于多少你会怎么回答? "0.3啊!"你可能都不会考虑.我也一样,当a=0.1,b=0.2时 if(a+b === 0.3){ ...