6.828lab1
准备内核
1 | git clone https://pdos.csail.mit.edu/6.828/2017/jos.git |
make命令详解
make
等价于 make all.
它是一个解释makefile中指令的命令工具
执行make时,默认会去(当前文件夹下),找名为Makefile的文件
根据Makefile文件来编译源代码,生成目标文件及可执行文件
在每次使用make时,都会重新生成objects,新产生的object会覆盖旧的objects
make clean
清除以前的make命令编译后所产生的object文件(即后缀为“.o”的文件)及其生成的可执行文件
一般来说,在每次使用make时,都会重新生成objects,新产生的object会覆盖旧的objects
但是实际用时,经过多次编译后,必须使用make clean(直接make,以前留下来的错误不能清除干净)
make install
将编译成功的可执行文件移动到make编译时填写的目录,依据生成的makefile文件
一般默认系统目录/usr/local/bin
make distclean
类似于make clean
清除以前的make命令编译后所产生的object文件(即后缀为“.o”的文件)及其生成的可执行文件,并将configure生成的文件全部删除掉
通常在使用make clean后使用,清理的更干净,避免影响再次编译
ROM BIOS启动过程
PC的物理结构
该地址空间是物理空间,全部都是通过电路硬编码组成的。
本实验仿真的是80386处理器,该处理器32位,寻址空间2^32=4G。第一代 PC 基于16位 Intel 8088处理器,只能寻址1 MB 的物理内存。因此,早期 PC 的物理地址空间将以0x00000000开始,但以0x000FFFFF 而不是0xFFFFFFFF 结束。
Low Memory:早期个人电脑可以使用的唯一随机存取存储器(RAM,Random Access Memory,随机存取存储器,也称主存),为了兼容早期计算机而保存下来。00000H~003FFH: 1KB 中断向量区。
从0x000A0000到0x000FFFF 的384kB 区域是 ROM(Read-Only Memory,只读存储器) 部分,为特殊用途的硬件留下来的物理地址空间。
- VGA Display:显存,向其写入数据,便可以被显示卡显示到显示屏上。外设。
- expansion Roms:ROM 扩展。外设。
- BIOS:基本输入/输出系统(Basic Input/Output System),占用从0x000F0000到0x000FFFFF 的64KB 区域。CPU 用于获取操作系统的一段程序,位于集成在PC内部的一个EPROM芯片(flash)中负责执行基本的系统初始化。
- 建立中断描述符表(Interrupt Descriptor Table,IDT)。
- 初始化各种设备,比如VGA PCI bus。
- 寻找可启动的设备。
- BIOS结束,进入磁盘(disk)中的内核引导器(boot loader)。
Extended Memory:另一部分的 RAM。
memory mapped devices:32位PCI设备(Program Control Interrupt,接收外部中断的设备,并行同步的总线)
由于JOS
设计的限制, 在之后所有关于JOS
的lab
中只使用前256M的物理内存。
ROM BIOS
1 | The target architecture is assumed to be i8086 |
[CS:IP]:[代码段:指令指针]
实模式(Real Mode,程序中用到的地址都是真实的物理地址)下地址的计算方式:
1 | 地址 = 16 * CS + IP |
该指令在BIOS区域的最后---倒数第16个字节,16字节做不了什么,于是跳到开头。
gdb 利用 si
(Step Instruction) 进行单步追踪。
ljmp,跳到 CS=f000, IP=e05b 的地址。
The Boot Loader
软盘(Floppy),硬盘都可以被划分为一个个大小为512字节的区域(Magnetic Disk),叫做扇区(sector)。一个扇区是一次磁盘操作的最小单位。
如果一个磁盘是可以被用来启动操作系统的,就把这个磁盘的第一个扇区叫做启动扇区。
当BIOS找到一个可以启动的软盘或硬盘后,它就会把这512字节的启动扇区加载到内存地址0x7c00~0x7dff这个区域内。使用 ljmp 指令跳到 [0000,7c00] 后,控制权从 BIOS 交给了 Boot Loader,早期为一个扇区大小。
整个boot loader是由一个汇编文件,boot/boot.S,以及一个C语言文件,boot/main.c组成,其功能是:
- 把 CPU 从实模式转换为32bit的保护模式,原来的地址空间只能够得到1MB(20 bits),现在可以到4GB(32 bits)。此时段偏移量从 16位变成了32位。
- 通过使用x86特定的IO指令,直接访问IDE磁盘设备寄存器,从磁盘中读取内核。
1 |