Update Booting/linux-bootstrap-2md.md

This commit is contained in:
hailin cai
2016-02-05 12:31:54 -05:00
parent 2ce839e0d0
commit 42653b366b

View File

@@ -163,4 +163,18 @@ lgdt gdt
* CPU根据`段选择子`从GDT中找到一个匹配的段描述符然后将段描述符放入段寄存器的隐藏部分
* 在没有使用向下扩展段的时候,那么内存段的基地址就是`段描述符中的基地址`,段描述符的`limit + 1`就是内存段的长度。如果你知道一个内存地址的`偏移`,那么在没有开启分页机制的情况下,这个内存的物理地址就是`基地址+偏移`
![linear address](http://oi62.tinypic.com/2yo369v.jpg)
![linear address](http://oi62.tinypic.com/2yo369v.jpg)
当代码要从实模式进入保护模式的时候,需要执行下面的操作: is:
* 禁止中断发生
* 使用命令`lgdt`将GDT表装入内存
* 设置CR0寄存器的PE位为1是CPU进入保护模式
* 跳转开始执行保护模式代码
在后面的章节中我们将看到Linux 内核中完整的转换代码。不过在系统进入保护模式之前,还有很多准备工作需要完成。
让我们代开C文件 [arch/x86/boot/main.c](https://github.com/torvalds/linux/blob/master/arch/x86/boot/main.c)。这个文件包含了很多的函数,这些函数分别会执行键盘初始化,内存堆初始化等等操作...,下面让我们来具体看一些重要的函数。
将启动参数拷贝到"zeropage"
--------------------------------------------------------------------------------