xv6实验1-启动计算机(文档)

PC Bootstrap

第一个练习的目的是介绍x86汇编语言和PC bootstrap程序,使用QEMU和QEMU/GDB进行调试。这部分你不用写任何代码,但是不管怎样,你最好过一遍,并且回答文章后面的问题

x86汇编

如果你对x86汇编语言不熟悉,通过这个课程,你将很快熟悉它。PC Assembly Language Book是一个非常好的入门书籍,这本书混杂了最新和旧版本的信息

警告:不幸的是,这本书是用NASM汇编语言来编写的,然而,我们将使用GNU汇编。NASM使用所谓的Intel语法,然而GNU使用的是AT&T语法。两者的差异非常大,所幸的是,使用这个工具Brenman’s Guide to Inline Assembly,能够快速的转换

进行Exercise 1

当然,x86汇编语言编程的参考是Intel的白皮书,你可以在6.828的参考页找到两个版本:一个是老的80386 Programemer’s Reference Manual, 这个版本简短,也比较简单,但是描述了所有x86处理器的特征,6.828课程也是使用这个作为参考;另一个是最新版本的IA-32 Intel Architecture Soft Developer’s Manuals,最新版包含了最新处理器的所有特征,但是这个课程用不上,如果你感兴趣,可以阅读。还有一个关于AMD的手册相对来说更加友好,但是仅针对AMD的处理器

仿真x86

不是在真正的物理机上开发一个操作系统,而是使用模拟器模拟一个完整的PC。适用于模拟器的代码当然也可以在实际物理机器上跑。使用模拟器可以简化调试。例如,你可以设置在模拟的x86中设置断点,但是这个在实际的x86系统中却很难做到

在6.828课程中,我们将使用QEMU,QEMU可以配合GDB一起使用,进行调试。

lab目录输入make,可以看到下面的输出

+ as kern/entry.S
+ cc kern/entrypgdir.c
+ cc kern/init.c
+ cc kern/console.c
+ cc kern/monitor.c
+ cc kern/printf.c
+ cc kern/kdebug.c
+ cc lib/printfmt.c
+ cc lib/readline.c
+ cc lib/string.c
+ ld obj/kern/kernel
ld: warning: section `.bss' type changed to PROGBITS
+ as boot/boot.S
+ cc -Os boot/main.c
+ ld boot/boot
boot block is 390 bytes (max 510)
+ mk obj/kern/kernel.img

如果你有类似于"undefined reference to __udivdi3"这种错误,你可能没有32位gcc编译包,如果你运行在Ubuntu或Debian,尝试安装gcc-multilib包。使用我的Dockerfile,不会出现这个问题

现在,你准备运行QEMU,装载obj/kern/kernel.img文件,这个文件包含引导加载程序(obj/boot/boot)和内核(obj/kernel)

运行make qemu(有界面)或者make qemu-nox(无界面)。将会启动QEMU并且加载硬盘,成功进入系统。具体显示如下

6828 decimal is XXX octal!
entering test_backtrace 5
entering test_backtrace 4
entering test_backtrace 3
entering test_backtrace 2
entering test_backtrace 1
entering test_backtrace 0
leaving test_backtrace 0
leaving test_backtrace 1
leaving test_backtrace 2
leaving test_backtrace 3
leaving test_backtrace 4
leaving test_backtrace 5
Welcome to the JOS kernel monitor!
Type 'help' for a list of commands.
K> 

PC物理地址空间

一个计算机的物理内存地址通常是下面的结构

+------------------+  <- 0xFFFFFFFF (4GB)
|      32-bit      |
|  memory mapped   |
|     devices      |
|                  |
/\/\/\/\/\/\/\/\/\/\

/\/\/\/\/\/\/\/\/\/\
|                  |
|      Unused      |
|                  |
+------------------+  <- depends on amount of RAM
|                  |
|                  |
| Extended Memory  |
|                  |
|                  |
+------------------+  <- 0x00100000 (1MB)
|     BIOS ROM     |
+------------------+  <- 0x000F0000 (960KB)
|  16-bit devices, |
|  expansion ROMs  |
+------------------+  <- 0x000C0000 (768KB)
|   VGA Display    |
+------------------+  <- 0x000A0000 (640KB)
|                  |
|    Low Memory    |
|                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值