操作系統GeekOS安裝、編譯、運行


1.配置環境

實驗環境:Ubuntu 18.04

需要的文件:GeekOS[http://geekos.sourceforge.net/]、nasm-2.00(低版本的,高版本的會報錯)[https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D]

2.編譯

安裝編譯環境

通過sudo apt-get install 來分別安裝build-essentialbochsbochs-x

安裝低版本的gcc

通過gcc -v可以查看當前的gcc版本。需要編譯的geekos-0.3版本非常古老,直接編譯會出現一堆錯誤,所以使用同樣比較古老的gcc-4.8來進行編譯。通過以下命令配置gcc

#安裝低版本的gcc
$sudo apt-get install gcc-4.8
#查看已安裝的版本
$ls /usr/bin/gcc* -l

#分別為新舊版本設置優先級
$ 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版本

image-20200718165339083

修改后的gcc版本

image-20200718165425114

安裝nasm

下載nasm-2.00.tar.gz壓縮包並解壓之后,在nasm-2.00目錄中打開終端,輸入以下指令安裝:

$ ./configure
$ make
$ sudo make install

正式編譯

進入geekos-0.3.0/src/project0/build/目錄,直接開始編譯:

$ make depend
$ make

但是當然不會這么順利,除了上面提到的gcc版本問題,還有一堆可能碰到的問題,順便附上我的解決方法。每次嘗試解決問題之后,可能需要make clean之后再次重新編譯。

可能遇到的問題:

warnings being treated as errors

這是因為Makefile中默認的編譯選項過於嚴格,把警告都當成錯誤來看待,我們可以修改一下Makefile將這個過於嚴格的編譯選項去掉(該文件位於build目錄下):
Makefile的第149行刪除-Werror

配置Makefile

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

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

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

X86-64與i386輸出不兼容

# Target C compiler.  gcc 2.95.2 or later should work. 100行
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. 106行
HOST_CC := gcc -m32

# Target linker.  GNU ld is probably to only one that will work.109行
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
// 修改前:148行
GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS)
// 修改后:
GENERAL_OPTS := -O -Wall -fno-stack-protector $(EXTRA_C_OPTS)

最終編譯成功之后,會在build目錄下生成一個鏡像文件fd.img和bochs模擬器的配置文件.bochsrc

image-20200718193356994

3.運行

通過bochs命令運行:

bochs第一次啟動會出現>>PANIC<< .bochsrc:4: vgaromimage directive malformed.錯誤,打開.bochsrc

修改

#第4行注釋
# vgaromimage: /export/home/daveho/linux/bochs-2.0.2/share/bochs/VGABIOS-lgpl-latest

#第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 

#第16、18、22行注釋
# floppy_command_delay: 500 
# ips:  1000000 
# newharddrivesupport: enabled=1

如果新彈出的bochs窗口黑屏,可能是進入了調試模式,在終端中輸入c回車,就可以了。

運行結果

image-20200718194105997

配置完成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM