《操作系统真象还原》——1.4 配置bochs

1.4 配置bochs

安装完成后该配置bochs了,它是通过配置文件完成的。

要说这个配置文件,它有点类似BIOS。我们在开机时按下的del、esc,或者F2键,各个机型进入BIOS方式有所不同,但差不多就那几种方式。BIOS中会显示各种硬件的信息,还有启动顺序等。Bochs既然是模拟硬件的,它就得知道,您需要它模拟的计算机是什么样的,换句话说,在这个虚拟机中有哪些硬件,启动顺序是什么,是从软盘开始,还是从硬盘开始?人家也得像模像样地跟BIOS差不多才行。给bochs配置硬件的方法,就是写一个配置文件给它,bochs启动时会找到此文件,根据文件内容创建自己,这样咱们的虚拟机就健全了。

在安装目录下有样本文件:share/doc/bochs/bochsrc-sample.txt。由于此文件有1130行,确实有些长,就不贴出来了,摘点重点内容,关于启动顺序,可参见该文件的以下几行(左列的数字是行号)。

…
…
 531 #================================================
 532 # BOOT:
 533 # This defines the boot sequence. Now you can specify up to 3 boot drives,
 534 # which can be 'floppy', 'disk', 'cdrom' or 'network' (boot ROM).
 535 # Legacy 'a' and 'c' are also supported.
 536 # Examples:
 537 #  boot: floppy
 538 #  boot: cdrom, disk
 539 #  boot: network, disk
 540 #  boot: cdrom, floppy, disk
 541 #===============================================
 542 #boot: floppy
 543 boot: disk

下面是能够支持gdb的bochs配置文件,给大家当作参考。
[work@localhost bochs]$ cat bochsrc.disk  用cat命令显示bochsrc.disk
###############################################
# Configuration file for Bochs
###############################################

# 第一步,首先设置Bochs在运行过程中能够使用的内存,本例为32MB。
# 关键字为:megs

megs: 32

# 第二步,设置对应真实机器的BIOS和VGA BIOS。
# 对应两个关键字为:romimage 和 vgaromimage

romimage: file=/实际路径/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/实际路径/bochs/share/bochs/VGABIOS-lgpl-latest

# 第三步,设置Bochs所使用的磁盘,软盘的关键字为floppy。
# 若只有一个软盘,则使用floppya即可,若有多个,则为floppya,floppyb…
#floppya: 1_44=a.img, status=inserted

# 第四步,选择启动盘符。
#boot: floppy  #默认从软盘启动,将其注释
boot: disk    #改为从硬盘启动。我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。

# 第五步,设置日志文件的输出。
log: bochs.out

# 第六步,开启或关闭某些功能。
# 下面是关闭鼠标,并打开键盘。
mouse: enabled=0
keyboard_mapping: enabled=1,
map=/实际路径/bochs/share/bochs/keymaps/x11-pc-us.map

# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

# 下面的是增加的bochs对gdb的支持,这样gdb便可以远程连接到此机器的1234端口调试了
gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0

################### 配置文件结束 #####################

好了,现在将上面的配置文件存为bochsrc.disk放在bochs安装目录下。(bochs配置文件位置不固定,名字也不要求固定),后缀.disk是我人为加的,为了表示此配置文件配置的内容是从硬盘启动,这样较明确。

时间: 2024-08-25 18:00:39

《操作系统真象还原》——1.4 配置bochs的相关文章

《操作系统真象还原》——导读

**前言**想象一下,如果是爱因斯坦那样的天才给我们讲物理知识,我们会觉得物理更容易理解吗?肯定是不会的,因为在爱因斯坦眼中比较容易的内容也许对我们来说非常深奥,他用B解释A的时候也许会让我们更迷惑,因为B我们也不懂,这就是基础的问题了.幸运的是阅读本书时读者只要有C语言和部分汇编语言的基础就行了,涉及的其他方面的知识我都会详细介绍,并以更易懂的方式去解释技术难点,读者不必担心看不懂本书. 回忆一下学车的经历:教练让学员先踩离合器再挂档,然后再踩油门,车子就开动啦.如果学员总是学不会这些,有可能

《操作系统真象还原》——1.5 运行bochs

1.5 运行bochs 终于安装完成了,虽然这过程中有可能会出现各种各样的问题,但还是值得庆祝的,对Linux不熟的朋友第一次就搞定了这么个硬货,我理解您此时的喜大普奔之情,哈哈,给大家点赞.顺便说一句,其实平时我们的运维人员为开发环境付出了远比这更多的努力,所有奋战在一线的系统工程师和运维工程师,您们辛苦了. 不过好奇心让我们按捺不住想一探bochs容貌,说实在的,我现在就想先运行一下看看,失败又能怎样,无非是报错退出呗,又不会造成实质性的损失.我非常理解大家的心情,虽然现在还差点东西没完成,

《操作系统真象还原》——2.3 让MBR先飞一会儿

2.3 让MBR先飞一会儿 虽说主引导记录mbr是咱们能够掌控的第一个程序,但这并不是让我们为之激动的理由.我们平时所写的程序都要依赖于操作系统,而我们即将实现的这个程序是独立于操作系统的,能够直接在裸机上运行,这才是让我们激动的理由,对咱们来说这无疑是历史性的一刻.还记得当初我的MBR跑起来时,那可真是发自内心的高兴呀. 好了,不再抒情了,说正事要紧.MBR的大小必须是512字节,这是为了保证0x55和0xaa这两个魔数恰好出现在该扇区的最后两个字节处,即第510字节处和第511字节处,这是按

《操作系统真象还原》——0.25 指令集、体系结构、微架构、编程语言

0.25 指令集.体系结构.微架构.编程语言 指令集是什么?表面上看它是一套指令的集合.集合的意思显而易见,那咱们说说什么是指令. 在计算机中,CPU只能识别0.1这两个数,甚至它都不知道数是什么,它只知道要么"是",要么"不是",恰好用0.1来表示这两种状态而已. 人发明的东西逃不出人的思维,所以,先看看我们人类的语言是怎么回事. 不同的语言对同一种事物有不同的名字,这个名字其实就是代码.比如说人类的好朋友:狗,咱们在中文里称之为狗,但在英文中它被称为dog,虽然

《操作系统真象还原》——0.19 什么是大端字节序、小端字节序

0.19 什么是大端字节序.小端字节序 先说一下为什么会产生字节序的问题. 内存是以字节为单位读写的,其最小的读写单位就是字节.故如果在内存中只写入一个字节,一个内存的存储单元便可将其容纳了,只要访问这一内存地址就能够完整取出这1字节.可是1字节要能够表示的范围只有0-255(先只考虑无符号数),超过这个范围的数,只好用多个字节连在一起来表示.因此,在我们的32位程序中,定义的数据类型很多.1字节的数据类型只有char型,像int型要占4字节,double型要占用8字节.正如解决了一个问题又抛出

《操作系统真象还原》——0.8 代码中为什么分为代码段、数据段?这和内存访问机制中的段是一回事吗

0.8 代码中为什么分为代码段.数据段?这和内存访问机制中的段是一回事吗 首先,程序不是一定要分段才能运行的,分段只是为了使程序更加优美.就像用饭盒装饭菜一样,完全可以将很多菜和米饭混合在一起,或者搅拌成一体,哈哈,但这样可能就没什么胃口啦.如果饭盒中有好多小格子,方便将不同的菜和饭区分存放,这样会让我们胃口大开增加食欲. x86平台的处理器是必须要用分段机制访问内存的,正因为如此,处理器才提供了段寄存器,用来指定待访问的内存段起始地址.我们这里讨论的程序代码中的段(用section或segme

《操作系统真象还原》——1.2 我们需要哪些编译器

1.2 我们需要哪些编译器 C语言虽然不是为设计大型软件而生的,但其却被用来开发大型软件. 现代操作系统基本上是用C语言再结合汇编语言开发的,所以C语言编译器,我们选择的是gcc.而汇编语言编译器,我们选择的是nasm.为什么选择这两个,首先因为它们都是开源软件,其次其强大的功能不亚于同类的商业软件. 1.2.1 世界顶级编译器GCC 秉着简单至上的原则,我们在开发过程中,能用简单的工具就不用复杂的.所以我们的系统,绝大部分是C语言实现的,而且并不需要多么高深的算法及数据结构功底. 另外我们在L

《操作系统真象还原》——0.17 先有的语言,还是先有的编译器,第1个编译器是怎么产生的

0.17 先有的语言,还是先有的编译器,第1个编译器是怎么产生的 首先肯定的是先有的编程语言,哪怕这个语言简单到只有一个符号.先是设计好语言的规则,然后编写能够识别这套规则的编译器,否则若没有语言规则作为指导方向,编译器编写将无从下笔. 第1个编译器是怎么产生的?这个问题我并没有求证,不过可以谈下自己的理解,请大伙儿辩证地看. 这个问题属于哲学中鸡生蛋.蛋生鸡的问题,这种思维回旋性质的本源问题经常让人产生迷惑.可是现实生活中这样的例子太多了. (1)英语老师教学生英语,学生成了英语老师后又可以教

《操作系统真象还原》——0.21 Section和Segment的区别

0.21 Section和Segment的区别 C程序大体上分为预处理.编译.汇编和链接4个阶段.预处理阶段是预处理器将高级语言中的宏展开,去掉代码注释,为调试器添加行号等.编译阶段是将预处理后的高级语言进行词法分析.语法分析.语义分析.优化,最后生成汇编代码.汇编阶段是将汇编代码编译成目标文件,也就是转换成了目标机器平台上的机器指令.链接阶段是将目标文件连接成可执行文件.这里我们只关注汇编和链接这两个阶段. 在汇编源码中,通常用语法关键字section或segment来表示一段区域,它们是编译