Ubuntu18/20安装配置Bochs2.6.9与编译运行GeekOS_良辰吉日943的博客-程序员宝宝

技术标签: Ubuntu  ubuntu  操作系统  bochs  GeekOS  

Ubuntu20.04/18.04安装Bochs2.6.9编译运行GeekOS

请注意:博主仅测试在Ubuntu18和Ubuntu20上成功安装Bochs-2.6.9、nasm-2.08.02、geekos-0.3.0,其它版本可能会出现不兼容的情况。若安装调试过程中出现各种奇奇怪怪的错误,请百度报错信息,或给我留言。博主也是在多次失败的情况下,总结各位大佬的解决方案,才成功的。

1.在电脑上安装Linux操作系统

安装过程就不多介绍了,放个Ubuntu的种子,需要的自行下载

  • Ubuntu 18.04 Desktop (amd64)

magnet:?xt=urn:btih:286D2E5B4F8369855328336AC1263AE02A7A60D5&dn=ubuntu-18.04.4-desktop-amd64.iso

  • Ubuntu 20.04 Desktop (amd64)

magnet:?xt=urn:btih:9FC20B9E98EA98B4A35E6223041A5EF94EA27809&dn=ubuntu-20.04-desktop-amd64.iso&xl=2715254784

Ubuntu20安装成功如下图
Ubuntu20图

2.编译安装Bochs需要准备好安装环境

安装Bochs之前需要联网安装下面这些软件:

sudo apt-get install build-essential
sudo apt-get install xorg-dev
sudo apt-get install bison
sudo apt-get install libgtk2.0-dev
sudo apt-get install gcc-multilib

下载安装速度可能较慢,需要点耐心,如果下载中出现失败,用手机开个热点给电脑试下

3.安装Bochs2.6.9

  1. 下载Bochs2.6.9
    进入链接: 下载地址.
    找到bochs-2.6.9.tar.gz并下载保存

  2. 解压bochs-2.6.9.tar.gz
    可以直接鼠标右键选择“提取到此处”

  3. 安装Bochs
    进入bochs-2.6.9目录
    在终端输入下列命令

sudo ./configure --enable-debugger --enable-disasm
sudo make
sudo make install
  1. 启动Bochs
    直接在终端输入bochs启动,这里可能会报错,不用着急,百度可以解决。
    若没有报错,则会出现Bochs的菜单
    但是建议选项为[2],没有找到配置文件
    1

  2. 配置Bochs
    当我们在终端输入bochs后,
    Bochs会自己在当前目录顺序寻找以下文件作为默认配置文件:
    .bochsrc
    bochsrc
    bochsrc.txt
    bochsrc.bxrc(仅对Windows有效)
    我们可以自己创建一个名为.bochsrc的文件,来指定Bochs配置我们想要的虚拟机
    (请将.bochsrc文件放在 geekos-0.3.0/src/project0/build 目录下。没有geekos?请看第4步!在此目录下会有一个自带的.bochsrc文件,但它是隐藏文件)
    在终端输入

sudo gedit .bochsrc

粘贴以下内容(注意这里要确保romimage和vgaromimage这两项的路径是正确的,不然虚拟机启动时会提示“couldn’t open ROM image file”的错误,还有Bochs的版本不一样的话,键盘设置的方式也不太一样):

#################################################################
# Bochs的配置文件
# Configuration file for Bochs
#################################################################

# how much memory the emulated machine will have
megs: 32

# filenameof ROM images
romimage:file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest

# which disk image will be used 这个是启动软盘
floppya:1_44=fd.img, status=inserted

# choose the boot disk 确定启动方式
boot: floppy

# where do we send log messages?
log: bochsout.txt

# disable the mouse
mouse: enabled=0

# enable key mapping ,using US layout as default
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map

保存退出

4.安装nasm和下载GeekOS

  1. 下载安装nasm
    进入链接: 下载地址.
    选择nasm-2.08.02.tar.gz,下载保存
    解压后进入nasm-2.08.02目录
    依次输入以下命令:
./configure
sudo make
sudo make install

再在终端输入nasm -version
出现2.08.02,OK继续!

  1. 下载GeekOS
    直接去GeekOS下载
    下载完成后解压

5.编译GeekOS

进入目录 geekos-0.3.0/src/project0/build
终端输入

sudo make depend
sudo make

会报错,因为Makefile在make时将warnings全部视为了errors
于是我们打开当前目录下的Makefile
3

sudo gedit Makefile

找到第149行的-Werror:

CC_GENERAL_OPTS := $(GENERAL_OPTS) -Werror 

修改为:

CC_GENERAL_OPTS := $(GENERAL_OPTS)

在Makefile文件的第148行 GENERAL_OPTS := -O -Wall $(EXTRA_C_OPTS) 后面添加编译选项:
(高版本的Ubuntu会有优化问题,导致project运行时线程报错,所以此处可以把-O改成-O0,取消优化)

-fno-stack-protector

然后把Makefile文件中的100行至109行修改为如下内容:

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

然后输入命令:

sudo make clean
sudo make depend
sudo make

会出现

cat geekos/fd_boot.bin geekos/setup.bin geekos/kernel.bin > fd.img

3

即为编译成功
注意:这里的fd.img是软盘文件,和.bochsrc文件相关,非常重要!如果启动Bochs出现黑色界面,但是有弹窗报错,多半和它有关。

6.运行GeekOS

进入目录 geekos-0.3.0/src/project0/build
终端输入:bochs
会出现Bochs菜单,且建议选项为[6]意思是开始模拟
输入"6"弹出黑色页面,然后再在命令行输入"c"
4

如果出现错误提示,可能是因为软盘映像中没有找到编译好的可执行程序,所以需要我们导入程序。
可以自己编写一段程序,也可以使用自带的示例程序,将编译好的引导扇区写进软盘。

Linux下自带了dd命令可以很方便地进行软盘读写:

sudo dd if=main.o of=fd.img bs=512 count=1 conv=notrunc

("main.o"是要写入软盘的程序文件,“fd.img"是目的软盘,可以用自己建的软盘"a.img”,也可以用自动生成的)

重新运行GeekOS,看到Bochs界面上出现的“Welcome to GeekOS!”,恭喜你成功了!

感谢观看

如果文章对你有用,点个赞再走吧,有问题的可以评论区讨论。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Java_c110/article/details/115737121

智能推荐

python学习笔记_枯藤丶老树的博客-程序员宝宝

python学习笔记(一)前段时间把《python基础教程》看完了,对书中python的基础语法知识有了大致的了解,记得老师说过,学习一门编程语言,不要死磕一个点,而是要掌握这门语言的大概,然后在一个一个的项目实践中去掌握这门语言的具体用法。 就像书已经看完了,但是只留了一个大致的印象,现在最重要的就是通过大量的实践来巩固强化所学的理论知识。在实践中会遇到许多问题,在解决这些问题提的同时,把重要的且

看懂这些帮你轻松解决就业问题年薪50万不是梦!隔壁都馋哭了_安卓小希的博客-程序员宝宝

开头经常会有人问:“现在学习Android开发还有前景?”我的看法是现在只是市场趋于平稳了,对开发人员的要求越来越好了,这并不代表没有前景了。移动开发不等于App开发,所有新的技术浪潮其实都可以融入到移动开发的体系里,比如IOT、音视频、边缘计算、VR/AR,我们要做的,只是打好基础,随时准备战斗。其次,从心态上,我觉得我们千万不要把时间浪费在纠结问题上,而是应该放在解决问题上。“王者荣耀”“吃鸡”并不能解决我们的焦虑,拥抱变化,才能拥有未来,让我们共勉。移动端的招聘中高端的职位还是很多的,看了下拉勾

Ubuntu14.04双系统安装_一条sin的博客-程序员宝宝_ubuntu14.04双系统

Ubuntu14.04双系统安装一、Ubuntu下载Ubuntu14.04 下载,打开Ubuntu官网,找到下载页面,选择要下载版本,单击“下载”。http://www.ubuntukylin.com/downloads/download.php?id=38...

程序员,你到底懂不懂公司的业务?_接地气的陈老师的博客-程序员宝宝

总是听人说:数据分析师要懂业务,懂业务。懂业务确实很重要,可到底要懂到啥程度?很少有认真讨论的。更难搞的是,不管你懂多少,总会有人冒出来说你:“不懂业务呀”到底这事啥时候是个头?今天我们系统讲解一下。一、什么是业务之所以有“业务”的说法,是和“技术”相对的。传统的说法里,业务泛指非技术类所有工作,是企业销售、营销、风控、运营工作的笼统称呼,这些都是直面B端/C端用户,为企业挣钱的活。技术,则对应着财务、IT、法务、人力、研发等支撑性专业,这些不直面客户,在背后支持业务运作。在咨询公司、第三方数据公司、

JavaGUI——AWT_xu_chenyang的博客-程序员宝宝_进行java基本的gui设计需要用到的包是

GUI ——Graphical User Interface 图形用户界面。简介:       AWT是Java语言的第一个GUI类库包。Java是一种独立于平台的程序设计语言,但GUI往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观(不一定完全一致)。思维导图:

pcre函数详解_笨小鸟的博客-程序员宝宝_pcre_copy_substring

PCRE是一个NFA正则引擎,不然不能提供完全与Perl一致的正则语法功能。但它同时也实现了DFA,只是满足数学意义上的正则。 PCRE提供了19个接口函数,为了简单介绍,使用PCRE内带的测试程序(pcretest.c)示例用法。1. pcre_compile       原型:         #include pcre *pcre_compile(const cha

随便推点

[OpenJ_Bailian - 4124 海贼王之伟大航路] DFS+二进制状态压缩 / 状压DP_Xingw-Xiong的博客-程序员宝宝

[OpenJudge4124 海贼王之伟大航路] 二进制状态压缩+记忆化DFS/ 状压DP题目链接:[OpenJ_Bailian - 4124 海贼王之伟大航路]题意:N个顶点之间构成无向图。求遍历所有顶点一次的情况下,从1~N的最短路长度。(2 < N ≤ 16)分析:思路一 记忆化DFS:直接暴力DFS肯定不行,时间复杂度是(N - 2)! 。然后就想利用状态剪...

OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()_Leon_Chan0的博客-程序员宝宝

1、convexHull()函数计算出图像点集的凸包,根据图像的轮廓点,通过函数convexhull转化成凸包的点坐标,从而画出图像的凸包。void convexHull(InputArray points, // 输入的点集,一般是用图像轮廓函数求得的轮廓点OutputArray hull, // 输出的是凸包的二维xy点的坐标值,针对每一个轮廓形成的。bool clockwise...

网易2017内推笔试2:幸运的袋子 [python]_ChrisMinions的博客-程序员宝宝

'''[编程题] 幸运的袋子时间限制:1秒空间限制:32768K一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球

有关Hardirq ,Softirq,Tasklet和Workqueue的一些探讨;作用、意思、区别、意义等_Tasdily的博客-程序员宝宝

中断是一个繁杂的话题,由中断引发的问题很容易引发争论。除我之前有讲过中断睡眠的问题,还有关于tasklet 和workqueue。 这里有必要重新整理总结一下了。教课书或者intel手册上是这样划分中断的:中断可分为同步(synchronous)中断和异步(asynchronous)中断:1. 同步中断是当指令执行时由 CPU 控制单元产生,之所以称为同步,是因为只有在一条指令执行完毕...

【转载,必须】可变长参数列表误区与陷阱——va_end是必须的吗?_beMyBest的博客-程序员宝宝

可变长参数列表误区与陷阱——va_end是必须的吗?这本应是一个无须争论的问题——当然必须调用。stdarg(或varargs,下略)中提供的功能就是一种契约:“你按我的约定方式使用这些宏——即必须调用va_end——我就给你提供实现可变长参数列表所需要的功能。”使用stdarg本来是很简单的事情——按照一个简单的契约(另见相关链接)办事就可以了——

Daily#058 听听晚报|开发者指控苹果iOS 13调整隐私保护策略、史上最大芯片问世_Lenzetech的博客-程序员宝宝

标题开发者指控苹果iOS 13调整隐私保护策略涉嫌垄断多名应用开发者近期致信苹果CEO蒂姆·库克,称苹果iOS 13某些与隐私保护相关的调整将会影响他们的业务。The Information报道称,关于iOS应用如何访问用户的位置数据,这些开发者指控苹果存在垄断行为。美国司法部正考虑对苹果的垄断行为展开调查。苹果对此表示,正在与某些受影响的开发者合作,提供替代的解决方案。标题史上最大芯片问世:...

推荐文章

热门文章

相关标签