「MIT 6.828」MIT 6.828 Fall 2018 Tools

MIT OS学习中……

Posted by 许大仙 on May 6, 2019

测试编译链

环境:ubuntu desktop虚拟机(32-bit)

objdump -i

–info 显示对于 -b 或者 -m 选项可用的架构和目标格式列表

应当支持:elf32-i386 (header little endian, data little endian)

gcc -m32 -print-libgcc-file-name

-print-file-name= library:输出指定的库的全路径名。除此之外编译程序不执行其他动作。

-print-libgcc-file-name:输出库 libgcc.a 的全路径名。该选项与 -print-file-name=libgcc.a 相同。

应当回显: /usr/lib/gcc/i486-linux-gnu/*version*/libgcc.a or /usr/lib/gcc/x86_64-linux-gnu/*version*/32/libgcc.a

在将内核与编译器链接时,可以通过传递-lgcc来链接libgcc

libgcc是什么?

libgcc是GCC提供的一个低层运行时库,当一些操作/运算在特定平台上不支持时,GCC会自动生成对这些库函数的调用,使用这些库函数来模拟实现。从概念上和源码实现中,又可以分为libgcc1和libgcc2,虽然它们最终会被编译合并为libgcc.a。

  • libgcc1中包含了一套基础操作/运算,这些无法使用其它操作来实现,通常会使用一系列的汇编代码来模拟完成。
  • libgcc2,正好相反,这些可以通过已有的一些操作/运算来简单的组合完成。通常是使用C代码来编写。

注:也可以自己构建编译链,参考building your own compiler toolchain

安装补丁版QEMU

QEMU可以简单看成没有GUI的虚拟机。当作为模拟器时,可以在一种架构(如x86 PC)下运行另一种架构(如ARM)下的操作系统和程序【也就是说支持跨平台虚拟化的虚拟机】。同时具备很好IO设备模拟。

题中说,QEMU debugging facilities虽然很强大,但是不成熟,因此需要下载的补丁版的QEMU:

To build your own patched version of QEMU:

  1. Clone QEMU git repository:git clone https://github.com/mit-pdos/6.828-qemu.git qemu
  2. 在linux上要安装一些库.
    • 在Debian/Ubuntu 16.04上搭建6.828 QEMU,需要安装the following packages:libsdl1.2-dev, libtool-bin, libglib2.0-dev, libz-dev, and libpixman-1-dev。其他版本相应修改。
  3. Configure the source code (可选参数在方括号中; replace PFX with a path of your choice)
  4. Linux: ./configure --disable-kvm --disable-werror [--prefix=PFX] [--target-list="i386-softmmu x86_64-softmmu"]
  5. 选项 prefix 设置安装QEMU的位置【绝对路径】,否则默认安装在 /usr/local
  6. The target-list argument simply slims down the architectures QEMU will build support for.
  7. target-list参数简化了QEMU将构建的支持体系结构
  8. 加上–disable-werror以保证不会因出现编译警告而终止编译
  9. Run make && make install

编译工具使用简述

Use the qemu-gdb target (or its qemu-gdb-nox variant) to make QEMU wait for GDB to attach.

如果遇到unexpected interrupts, exceptions, or triple faults,QEMU通过 -d 参数生成详细的log。

汇编参考文档

x86 Assembly Language