GeekOS(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-essentialnasmbochsbochs-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测试没有问题:

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100

然后通过以下指令选择不同的gcc版本:
$ sudo update-alternatives --config gcc

选择gcc版本

选择完成之后,通过gcc -v来查看是否切换成功:

正式编译

进入geekos-0.3.0/src/project0/build/目录,直接开始编译:

$ make depend
$ make

但是当然不会这么顺利,除了上面提到的gcc版本问题,还有一堆可能碰到的问题,顺便附上我的解决方法。每次尝试解决问题之后,可能需要make clean之后再次重新编译。

warnings being treated as errors

这是因为Makefile中默认的编译选项过于严格,把警告都当成错误来看待,我们可以修改一下Makefile将这个过于严格的编译选项去掉(该文件位于build目录下):
Makefile的第149行删除-Werror

// 修改前:
CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror 
// 修改后:
CC_GENERAL_OPTS := $(GENERAL_OPTS)

或者,打开src/project0/include/geekos/segment.h,在第43行加上:8

//修改前:
uchar_t baseHigh        PACKED ;
// 修改后:
uchar_t baseHigh   : 8  PACKED ;

x86-64与i386输出不兼容


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

# Target C compiler.  gcc 2.95.2 or later should work.
TARGET_CC := $(TARGET_CC_PREFIX)gcc -m32

# Host C compiler.  This is used to compile programs to execute on
# the host platform, not the target (x86) platform.  On x86/ELF
# systems, such as Linux and FreeBSD, it can generally be the same
# as the target C compiler.
HOST_CC := gcc -m32

# Target linker.  GNU ld is probably to only one that will work.
TARGET_LD := $(TARGET_CC_PREFIX)ld -m elf_i386

bits目录下缺失文件

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

$ sudo apt-get install gcc-multilib

__stack_chk_fail未定义


这是因为gcc在编译时开启了栈保护,打开Makefile,在第148行关闭栈保护:

# Flags used for all C source files
// 修改前:
GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS)
// 修改后:
GENERAL_OPTS := -O -Wall -fno-stack-protector $(EXTRA_C_OPTS)

最终编译成功之后,会在build目录下生成一个镜像文件fd.img和bochs模拟器的配置文件.bochsrc

四、运行

通过bochs命令运行:

运行当然也没有那么顺利:

>>PANIC<<

bochs第一次启动会出现>>PANIC<< .bochsrc:4: vgaromimage directive malformed.错误,打开.bochsrc

  1. 把第4行注释掉
# vgaromimage: /export/home/daveho/linux/bochs-2.0.2/share/bochs/VGABIOS-lgpl-latest
  1. 在第5、6行修改:
// 修改前:
romimage: file=/export/home/daveho/linux/bochs-2.0.2/share/bochs/BIOS-bochs-latest, address=0xf0000
// 修改后:
romimage: file=$BXSHARE/BIOS-bochs-latest 
  1. 把第16、18、22行注释掉
# floppy_command_delay: 500 
# ips:  1000000 
# newharddrivesupport: enabled=1

黑屏

如果新弹出的bochs窗口黑屏,可能是进入了调试模式,在终端中输入c回车,就可以了。

failed assertion in init_idt

输入c回车之后,虽然窗口出现文字,但是仍然报错。这里可以尝试使用较低版本的nasm重新编译运行,记得要make clean

首先去nasm官网下载低版本,这里我尝试的是2.00版本,测试成功。下载nasm-2.00.tar.gz压缩包并解压之后,在nasm-2.00目录中打开终端,输入以下指令安装:

$ ./configure
$ make
$ sudo make install

然后通过nasm -v指令查看当前版本,并在geekos相关目录中make clean之后重新编译运行即可。

nasm版本

成功运行界面:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容