操作系统-熟悉实验环境(1)

本文最后更新于:Wednesday, September 30th 2020, 8:09 pm

熟悉实验环境

1、x86模拟器Bochs1

Bochs is a highly portable open source IA-32 (x86) PC emulator written in C++, that runs on most popular platforms. It includes emulation of the Intel x86 CPU, common I/O devices, and a custom BIOS. Bochs can be compiled to emulate many different x86 CPUs, from early 386 to the most recent x86-64 Intel and AMD processors which may even not reached the market yet.

可以看到Boch可以模拟intel x86 CPU

在它模拟出的环境中可以运行 Linux、DOS 和各种版本的 Windows 等多种操作系统

2、操作系统Ubuntu

因为有些实验内容涉及到在自己改进的 Linux 0.11下,运行自己编的应用程序。被改进的功能都是高 版本 Linux 内核已经具有的,在其上确认自己编写的应用程序无误后,再用之测试自己改进的 Linux 0.11,可以更有信心些。

3、实验压缩包hit-oslab

文件结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.
..
└── bocks
| ├── BIOS-bochs-latest
| ├── bochs-dbg
| ├── bochs-gdb
| ├── bochsrc.bxrc
| ├── bochsrc-gdb.bxrc
| └── vgabios.bin
|
└── hdc
| └── umounted
└── Linux-0.11
| └── boot
| ├── kernel
| ├── fs
| ├── lib
| ├── init
| ├── mm
| ├── tools
| ├── include
| ├── tags
| └── Makefile
├── dbg-asm
├── dbg-c
├── gdb
├── gdb-cmd.txt
├── run
├── rungdb
└── mount-hdc
  1. Image文件

    我们在宿主操作系统也就是ubuntu上对Linux 0.11进行开发,修改和编译。

    之后在Linux-0.11目录会生成一个Image的文件。(编译后的目标文件)


    该文件包含引导和所以内核的二进制代码。

    oslab 采用 bochs 模拟器加载这个 Image 文件,模拟执行 Linux 0.11,这样省却了重新启动计算机的麻烦。

  2. bochs目录

    bochs目录是与bochs相关的执行文件、数据文件和配置文件

  3. run 脚本

    run 是 运行bochs的脚本命令

    运行后bochs会自动在他的

    虚拟软驱——linux-0.11/Image

    虚拟硬盘——hdc-0.11.img

    在 0.11 下访问文件系统,访问的就是 hdc-0.11.img 文件内虚拟的文件系统。
    退出bochs之前现存盘,运行sync命令

  4. hdc-0.11.img 文件

    文件的格式是 Minix 文件系统的镜像。Linux 所有版本都支持这种格式的文件系统

    所以可以在宿主系统上挂载该文件系统。达到宿主系统和Linux 0.11之间文件交换的效果

    其中包含的文件有:

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

    make all(make 命令会自动跳过未被修改的文件 )

    如果重新编译没有效果可以试试删除中间文件: make clean && make all

  6. 运行

    ./run

4、调试

  1. 汇编级调试

    ./dbg-asm

  2. C语言调试

    1. ./dbg-c

    2. ./rungdb(新开一个窗口)

      注意:启动的顺序不能交换,否则 gdb 无法连接。

5、文件交换

1
2
3
4
5
6
7
8
9
10
11
# 启动挂载脚本
$ cd ~/oslab
$ sudo ./mount-hdc

# 进入文件系统
$ cd ./mount-hdc/

# 读写完毕,卸载文件系统
$ cd ~/oslab
$ sudo umount hdc

Reference

[1] 哈尔滨工业大学.操作系统


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!