操作原理课设《CPU进入保护模式研究和编程实现》环境配置及编译示例程序

题目

仔细阅读《自己动手写操作系统》的前三章,作者于渊,电子工业出版社。前三章,熟悉初启过程的程序开发环境,编程过程。熟悉实模式,保护模式的概念。

  1. 理解保护模式、特权级、页式内存概念。
  2. 逐个编译和测试第三章的全部9个示例程序(编号pmtest1.asm ~ pmtest9.asm)
  3. 在完全读懂程序的基础上,给pmtest5.asm~pmtest9.asm中的任意一个程序的源代码中写上详细的注释。注释要求:
    1)每个变量,每个宏,每个函数都要有注释
    2)每个函数或每段都要介绍起作用,介绍其进入和返回的参数或机制
    3)每个语句设置的位或域的含义或作用
    4)流程的介绍:循环,分支,跳转的条件等
    5)变量、宏、函数的引用处要说明声明和定义的出处,指明文件名和行号。
    说明:因为作者这本书出了第二版《ORANGE’S:一个操作系统的实现》,内容大致相同,且可读性更好,所以这里是依照第二版完成的环境配置
    个人环境说明:在VMware安装Ubuntu18.04

第一阶段:在虚拟机Ubuntu中安装bochs虚拟机

1.安装bochs所需环境:

i. Sudo apt-get install build-essential>
ii. Sudo apt-get install g++
iii. Sudo apt-get install xorg-dev
iv. Sudo apr-get install libgtk2.0-dev

2.进入 bochs 官网

下载地址:https://sourceforge.net/projects/bochs/files/下载bochs-2.6.11.tar.gz
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3.解压该压缩包:tar vxzf bochs-2.6.11.tar.gz
4.执行configure脚本

进入解压后的文件夹bochs-2.6.11,执行configure脚本,来开启调试和反汇编功能。

sudo ./configure --enable-debugger --enable-disasm

在这里插入图片描述

5.安装bochs

在文件夹bochs-2.6.11内打开终端,执行

sudo make 2>>log.txt
	2>>log.txt是一个错误输出重定向,将报错输出到log.txt中)	

执行完检查一下log.txt 如果没有问题进行下一步

sudo make install 2>>log.txt

(我记得我在make install时有一个报错,但是我忘了是啥了,他没有在终端显示,但是确实(maybe)会影响后面的实验,百度一下吧应该不难…)

6.使用bochs创建一个软盘映象

在bochs-2.6.11文件夹内有一个文件bximage,在终端打开它:
输入./bximage
在这里插入图片描述

我们可以把生成的lalala.img拿出来,放到一个文件夹里(博主这里是MyOS)

7.将引导扇区写入软盘

还记得第一章的那个boot.asm文件吗?编译他生成boot.bin
在这里插入图片描述

在这里插入图片描述
将生成的boot.bin与lalala.img放在同一个文件夹下,如下
在这里插入图片描述
在这个文件夹里打开终端,输入命令写入软盘映像:
dd if=boot.bin of=lalala.img bs=512 count=1 conv=notrunc
在这里插入图片描述
boot.bin就是你刚刚编译boot.asm得到的,
lalala.img就是之前bximage生成的软盘映像。

8.编写配置文件bochsrc😊

(这一步很关键,不弄好的话错误很多)

###############################################################
#  Configuration file for Bochs
###############################################################

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

# filename of ROM images
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-elpin-2.40  
 
# what disk images will be used
floppya: 1_44=lalala.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

在这里插入图片描述
我的bochsrc会和网上的大部分教程的不一样,但是检验标准就是你报不报错,以及你的这个文件目录是否有这个文件

①:教材上给的是romimage:
file=/usr/share/bochs/BIOS-bochs-lates,但是你可以打开自己的/usr/share/文件夹,发现并没有bochs文件夹更别说BIOS-bochs-lates了,而你打开/usr/local/share/bochs/就可以找到BIOS-bochs-latest。

②:这个值其实我也不太懂为什么是这个,但是一个教程里(https://www.iteye.com/blog/sy198704-1025037)写,他在官方给出的示例中看到是这个路径,于是我就这样子写了。(usr/local/share/bochs/文件夹里我尝试了其他两个文件,发现不能输出Hello
,OS world)

③:你上面生成的lalala.img

④:同①,你可以在该地址找到这个键盘文件

9.运行bochs -f bochsrc

在这里插入图片描述

输入6选择功能,会弹出一个窗口:
Hello,OS world!
在这里插入图片描述

另外,一些同学可能输入6后,出现bochs:1 这是处于bochs调试模式:
需要输入c,继续运行就可以了在这里插入图片描述
附指令大全:
在这里插入图片描述

此外我们还可以:
nasm pmtest1.asm -o pmtest1.bin(先检查一下第8行地址应为07c00h)
dd if=pmtest1.bin of=lalala.img bs=512 count=1 conv=notrunc
bochs -f bochsrc
看到pmtest1.asm的效果,一个红色的P。
在这里插入图片描述

第二阶段:在虚拟机上安装freedos

但是作者并不喜欢上面那个方法,因为可能有个隐患,就是引导扇区空间有限,只有512个字节,如果我们的程序越来越大超过了512个字节这方法 就不灵了,所以我们得想个更好的方法。

1.安装freedos

从网站:http://bochs.sourceforge.net/diskimages.html下载freedos-img(需要挂梯子)
在解压之后,文件内有一个a.img,将他重命名为freedos.img,然后复制到我们的文件夹中(MyOS)

2.使用bximage重新生成一个软盘映像

自由命名,记住就可,这里我生成的是pm.img(移动到MyOS)
在这里插入图片描述

3.修改bochsrc(下面标红的地方修改了)
###############################################################
# Configuration file for Bochs
###############################################################

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

# filename of ROM images
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-elpin-2.40  
 
# what disk images will be used
floppya: 1_44=freedos.img, status=inserted
floppyb: 1_44=pm.img, status=inserted

# choose the boot disk.
boot: a

# 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.启动Bochs,待FreeDos启动完毕后格式化B:盘

输入:bochs -f bochsrc
输入:6
输入:c
在弹出的窗口上输入:format b:
在这里插入图片描述
关闭窗口

5.编译pmtest1.asm生成pmtest1.com

(先将第8行中的07c00h改为0100h)

nasm pmtest1.asm -o pmtest1.com

6.将pmtest1.com复制到虚拟软盘pm.img上:

(如果执行成功,什么也不会显示)

①sudo mount -o loop pm.img /mnt/floppy/
大概率报错mount point /mnt/floppy does not exist 就是说那个地方没有这个文件夹,创建一个就好: 进入mnt目录:sudo mkdir floppy

②sudo cp pmtest1.com /mnt/floppy/

③sudo umount /mnt/floppy

7.运行bochs

输入:bochs -f bochsrc
输入:6
输入:c
在弹出的窗口上输入:b:\pmtest1.com
可以看到窗口左侧出现了一个红色的P
在这里插入图片描述

8.之后运行建议

只需要编译pmtest2,3…9.asm---->pmtest2,3…9.com后

①sudo mount -o loop pm.img /mnt/floppy/ (执行一次)

②sudo cp pmtest2.com /mnt/floppy/
sudo cp pmtest3.com /mnt/floppy/
……
sudo cp pmtest9.com /mnt/floppy/

③sudo umount /mnt/floppy (执行一次)

在这里插入图片描述
运行结果:
在这里插入图片描述

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值