GeekOS(project-1)编译、安装、运行
status
category
date
summary
slug
icon
tags
password
应操作系统原理大作业要求,需要完成GeekOS的6个project,本文是第-1个,介绍了如何编译、安装、运行。
安装Ubuntu环境
本文实验环境:Ubuntu 18.04
下载GeekOS
进入很久没有维护了的官方网站,点击左侧的Downloads,或How do I get it?下方的downloads section,然后点击Download Latest Version下载并解压。当前版本为
geekos-0.3.0
,最后修改日期为2005-04-12
。
编译
安装编译环境
通过
sudo apt-get install ***
来分别安装build-essential
、nasm
、bochs
、bochs-x
安装低版本gcc
通过
gcc -v
可以查看当前的gcc
版本,目前我的版本是7.3.0
。而需要编译的geekos-0.3
版本非常古老,直接编译会出现一堆错误,所以使用同样比较古老的gcc-4.8
来进行编译。首先通过
sudo apt-get install gcc-4.8
安装,然后输入ls /usr/bin/gcc* -l
来查看已安装版本:
然后分别为新旧版本设置优先级,自己设置100测试没有问题:
然后通过以下指令选择不同的gcc版本:

选择gcc版本
选择完成之后,通过
gcc -v
来查看是否切换成功:
正式编译
进入
geekos-0.3.0/src/project0/build/
目录,直接开始编译:但是当然不会这么顺利,除了上面提到的gcc版本问题,还有一堆可能碰到的问题,顺便附上我的解决方法。每次尝试解决问题之后,可能需要
make clean
之后再次重新编译。warnings being treated as errors

这是因为
Makefile
中默认的编译选项过于严格,把警告都当成错误来看待,我们可以修改一下Makefile
将这个过于严格的编译选项去掉(该文件位于build
目录下):在
Makefile
的第149行删除-Werror
:或者,打开
src/project0/include/geekos/segment.h
,在第43行加上:8
:x86-64与i386输出不兼容

这是在64位机器的默认配置下导致的,我们可以强制增加编译选项
-m32
和链接选项-m elf_i386
,打开Makefile
,将第100、106、109行修改如下:bits目录下缺失文件

这是gcc环境没有安装完善导致的,安装命令:
__stack_chk_fail未定义

这是因为gcc在编译时开启了栈保护,打开
Makefile
,在第148行关闭栈保护:最终编译成功之后,会在
build
目录下生成一个镜像文件fd.img
和bochs模拟器的配置文件.bochsrc
:
运行
通过
bochs
命令运行:
运行当然也没有那么顺利:
>>PANIC<<
bochs第一次启动会出现
>>PANIC<< .bochsrc:4: vgaromimage directive malformed.
错误,打开.bochsrc
:- 把第4行注释掉
- 在第5、6行修改:
- 把第16、18、22行注释掉
黑屏
如果新弹出的bochs窗口黑屏,可能是进入了调试模式,在终端中输入
c
回车,就可以了。
failed assertion in init_idt

输入
c
回车之后,虽然窗口出现文字,但是仍然报错。这里可以尝试使用较低版本的nasm重新编译运行,记得要make clean
!然后通过
nasm -v
指令查看当前版本,并在geekos
相关目录中make clean
之后重新编译运行即可。
nasm版本
成功运行界面:

Loading...