简介
本平台的基本信息为:
首先确保安装了包管理器Homebrew
。主要是安装qemu
和编译JOS
两部分,其中编译JOS
的时候需要交叉编译器。
安装qemu
qemu
在OSX
上可以直接用brew
安装,即
brew install qemu
根据brew
的镜像和网络情况,安装时间长短不一,如果很慢,建议更换brew
镜像。
编译JOS
安装i386-jos-elf-gcc
#- 拷贝资源,由于github访问困难,因此这里指定了gitee仓库,username随便起一个名字,对应的是下载目录/usr/local/Homebrew/Library/Taps/username/文件夹名字。
brew tap username/i386-jos-elf-gcc https://gitee.com/westtide/homebrew-i386-jos-elf-gcc.git
#- 编译安装
brew install i386-jos-elf-gcc i386-jos-elf-gdb
编译安装时间可能会有点长,大概十分钟左右。在这个过程中可能会提示A newer Command Line Tools release is available
,即命令行工具太老了。如果没有报error
就不用管,否则可以参考它的提示进行更新:
#- 先删除旧的
sudo rm -rf /Library/Developer/CommandLineTools
#- 安装新的,会弹出一个窗口,点击安装更新即可
sudo xcode-select --install
编译安装完成之后,应该就能搜索到交叉编译工具i386-jos-elf-gcc
:
(base) xiaomingdeMacBook-Pro:Homebrew xiaoming$ which i386-jos-elf-gcc
/usr/local/bin/i386-jos-elf-gcc
编译JOS
#- 克隆代码仓库(可能有多个版本,我这里暂时选择这个版本)
git clone https://pdos.csail.mit.edu/6.828/2018/jos.git
#- 源代码的文件结构
(base) xiaomingdeMacBook-Pro:OS xiaoming$ ls jos/
CODING GNUmakefile boot conf fs grade-lab1 gradelib.py inc kern lib mergedep.pl user
#- 到JOS目录下编译系统
(base) xiaomingdeMacBook-Pro:OS xiaoming$ cd jos/
(base) xiaomingdeMacBook-Pro:jos xiaoming$ make
+ as kern/entry.S
+ cc kern/entrypgdir.c
+ cc kern/init.c
+ cc kern/console.c
+ cc kern/monitor.c
+ cc kern/printf.c
+ cc kern/kdebug.c
+ cc lib/printfmt.c
+ cc lib/readline.c
+ cc lib/string.c
+ ld obj/kern/kernel
i386-jos-elf-ld: warning: section `.bss' type changed to PROGBITS
+ as boot/boot.S
+ cc -Os boot/main.c
+ ld boot/boot
boot block is 382 bytes (max 510)
+ mk obj/kern/kernel.img
(base) xiaomingdeMacBook-Pro:jos xiaoming$
#- 编译好的img在jos/obj/kern/kernel.img
启动JOS
#- 直接在JOS目录下用make qemu启动内核,它会自动找到img并加载
(base) xiaomingdeMacBook-Pro:jos xiaoming$ make qemu
sed "s/localhost:1234/localhost:25501/" < .gdbinit.tmpl > .gdbinit
qemu-system-i386 -drive file=obj/kern/kernel.img,index=0,media=disk,format=raw -serial mon:stdio -gdb tcp::25501 -D qemu.log
6828 decimal is XXX octal!
entering test_backtrace 5
entering test_backtrace 4
entering test_backtrace 3
entering test_backtrace 2
entering test_backtrace 1
entering test_backtrace 0
leaving test_backtrace 0
leaving test_backtrace 1
leaving test_backtrace 2
leaving test_backtrace 3
leaving test_backtrace 4
leaving test_backtrace 5
Welcome to the JOS kernel monitor!
Type 'help' for a list of commands.
K>
至此JOS
已经正常运行在qemu
虚拟机上。