操作系统课设--熟悉实验环境

环境准备(64bit)

  • gcc3.4,参考我之前写的教程
  • bin86,只有安装了bin86包才可以正常的make项目
  • gcc-multilib
  • build-essential
  • bochs bochs-x bochs-sdl
    安装步骤如下
sudo apt-get install bin86

操作系统课设--熟悉实验环境_第1张图片

sudo apt-get install gcc-multilib

操作系统课设--熟悉实验环境_第2张图片

sudo apt-get install build-essential

操作系统课设--熟悉实验环境_第3张图片

sudo apt-get install bochs bochs-x bochs-sdl

操作系统课设--熟悉实验环境_第4张图片

文件准备

我整理后的源文件链接后续会放在git上,届时将提供链接,有急用的可以先联系我,看到会回复。现在先提供一份链接,此链接内是哈工大操作系统的源文件,我的就是根据这个来整理的,具体整理过程直接参考哈工大提供的源文件中的setup.sh文件,分析一下里面的命令就知道怎么结合自己的宿主系统环境操作了,因为这个sh不一定适合每个人的环境,所以谨慎使用(尤其是那些gcc版本都不知道怎么控制的小白们)
我整理文件后的文件目录如下(适用于64bit操作系统):

操作系统课设--熟悉实验环境_第5张图片

相关文件、工具介绍

1.Bochs软件介绍(摘录于实验楼)

Bochs 是一个免费且开放源代码的 IA-32(x86)架构 PC 机模拟器。在它模拟出的环境中可以运行 Linux、DOS 和各种版本的 Windows 等多种操作系统。而 Bochs 本身具有很高的移植性,可以运行在多种软硬件平台之上,这也是我们选择它做为本书的指定模拟器的主要原因。

如果您想拥抱自由的 Linux,那么 Bochs 几乎是您的不二选择。如果您想继续把自己绑定在 Windows 平台上,那么除了 Bochs,您还可以选用 VMware 或者 Microsoft Virtual PC。它们是最著名虚拟机软件,而且都可以免费使用。因为 Bochs 的是模拟器,其原理决定了它的运行效率会低于虚拟机。

总的来说,在对Linux系统进行更改后,需要使用Bochs模拟一定的硬件环境才可以运行修改后的Linux系统。

2.GCC编译器

实验过程中必须选择gcc3.4作为编译环境,否则make阶段将不会通过,具体配置过程参考我之前的随笔:“GCC3.4与7.5如何共存”
gcc肯定知道是啥吧,要不然就别学了。。。

3.GDB调试器

简单点说就是用来调试程序的,下述文字摘录于实验楼。
GDB 调试器是 GCC 编译器的兄弟。做为自由软件领域几乎是唯一的调试器,它秉承了 Unix 类操作系统的一贯风格,采用纯命令行操作,有点儿类似 dos 下的 debug。

4.Ubuntu (GNU/Linux)

Ubuntu 也许不是目前最好用的 Linux 桌面发行版,但它一定是最流行的。主要特点是易用,非常的易用。现在,已经有越来越多的人开始用 Ubuntu 完全代替 Windows,享受更加自由、安全、守法的感觉。
此后的操作系统实验均在Ubuntu18.04下进行。

5.Image文件

操作系统课设--熟悉实验环境_第6张图片
实验环境的宿主操作系统是Ubuntu18.04,在宿主操作系统上完成对Linux 0.11 的开发、修改和编译之后,在 linux-0.11 目录下会生产一个名为 Image 的文件,它就是编译之后的目标文件。

该文件内已经包含引导和所有内核的二进制代码。如果拿来一张软盘,从它的0扇区开始,逐字节写入 Image 文件的内容,就可以用这张软盘启动一台真正的计算机,并进入 Linux 0.11 内核(俗称开机哈哈哈)。 在此后的实验过程中,Bochs就是做这项模拟工作的

6.bochs目录

操作系统课设--熟悉实验环境_第7张图片
bochs 目录下是与 bochs 相关的执行文件、数据文件和配置文件。

7.run脚本

操作系统课设--熟悉实验环境_第8张图片

run 是运行 bochs 的脚本命令。运行后 bochs 会自动在它的虚拟软驱 A 和虚拟硬盘上各挂载一个镜像文件,软驱上挂载是 linux-0.11/Image,硬盘上挂载的是 hdc-0.11.img。
因为 bochs 配置文件中的设置是从软驱 A 启动,所以 Linux 0.11 会被自动加载。而 Linux 0.11 会驱动硬盘,并 mount 硬盘上的文件系统,也就是将 hdc-0.11.img 内镜像的文件系统挂载到 0.11 系统内的根目录 /。在 Linux 0.11 下访问文件系统,访问的就是 hdc-0.11.img 文件内虚拟的文件系统。具体如何访问和修改hdc-0.11.img内的文件在后续会介绍。

8.hdc-0.11.img文件

操作系统课设--熟悉实验环境_第9张图片

hdc-0.11.img 文件的格式是 Minix 文件系统的镜像。
Linux 所有版本都支持这种格式的文件系统,所以可以直接在宿主 Linux 上通过 mount 命令访问此文件内的文件,达到宿主系统和 bochs 内运行的 Linux 0.11 之间交换文件的效果。这个后续还会在本篇后面有更详细的说明...
hdc-0.11.img文件内部包含的内容具体如下:

  • Bash shell;
  • 一些基本的 Linux 命令、工具,比如 cp、rm、mv、tar;
  • vi 编辑器;
  • gcc 1.4 编译器,可用来编译标准 C 程序;
  • as86 和 ld86;
  • Linux 0.11 的源代码,可在 0.11 下编译,然后覆盖现有的二进制内核。

编译并运行第一个Linux内核

1.make编译内核

操作系统课设--熟悉实验环境_第10张图片

进入linux-0.11目录,可以看到里面有一个Makefile文件,对其编译之后就会生成目标文件Image
编译的时候使用的命令如下:

make

操作系统课设--熟悉实验环境_第11张图片

只要编译的过程中在最后几行没有出现error提示就是编译成功了,如果在修改了内核代码后需要重新编译,这个时候需要先清理上一次编译过程中生成的目标文件和中间文件,清理代码如下:

make clean

操作系统课设--熟悉实验环境_第12张图片

清理后直接重新make即可,编译之后Image就是目标文件(Image实际上会被写到第一个扇区,用于引导系统开机)。

2.运行编译后的内核

在oslab内调用bochs模拟硬件环境加载对应的Image目标文件

./run

输入 ./run 的过程中,Bochs首先将Image目标文件写入0扇区,这样才可以引导系统启动,系统启动后linux 0.1.1便驱动加载了hdc-0.11.img文件系统。这个时候看到的Bochs是黑屏,刚开始我也吓了一跳,后来发现这只是debug模式,只需要在终端输入c并回车即可(输入大写的C不行,我试了),如下:

操作系统课设--熟悉实验环境_第13张图片

红色矩形框可以看到只有输入c才行,输入C提示非法符号。系统在Bochs内加载完成后可以使用一些比较基本的命令,如ls -l,这可以直接列出linux 0.1.1系统内的文件,这些文件就是来自于hdc-0.11.img,只要更改了hdc-0.11.img里面的文件,你在模拟启动linux 0.1.1的时候就会看到你做的改动。
Ctrl Z可以退出Bochs。

3.调试

调试过程暂不探讨了,实验楼给的环境是32bit,调试的工具也是32bit,我就只是为了完成个作业。。。不探讨了哈哈哈,如果以后的实验遇到了再继续更新。

4.文件交互

如果需要更改Linux 0.1.1内挂载的文件系统内部文件,这个时候需要在宿主系统Ubuntu下挂载hdc-0.11.img,然后就可以用Ubuntu操作其内部的文件了。
首先进入hdc这个文件夹,然后看看里面都有什么:

操作系统课设--熟悉实验环境_第14张图片

可以看到里面显示“未挂载”状态。这是回到oslab目录,挂载hdc-0.11.img,命令如下(oslab下执行):

sudo ./mount-hdc

然后再来到hdc里面观察一下有什么东西。

操作系统课设--熟悉实验环境_第15张图片

可以看到hdc里面多了一个最小的Linux目录,而且桌面也成功挂载了一个64MB的硬盘,这个硬盘就是hdc-0.11.img文件系统,现在可以在里面放一些东西,我直接在hdc-0.11.img的root目录里面新建了一个xmc.c文件

操作系统课设--熟悉实验环境_第16张图片

然后回到oslab目录卸载这个驱动器,和你拔插U盘一样的原理,你用过了人家的系统盘总得还给人家,要不然怎么启动系统。。。(ˉ▽ˉ;)...卸载命令如下:

sudo umount hdc

然后重新启动刚刚编译的Linux0.1.1,观察一下它的root目录里是否含有xmc.c这个文件即可。

操作系统课设--熟悉实验环境_第17张图片

一切正常,Ctrl Z退出即可,实现环境准备完成

你可能感兴趣的:(操作系统课设--熟悉实验环境)