mirror of
https://github.com/MintCN/linux-insides-zh.git
synced 2026-04-25 11:11:20 +08:00
Update Booting/linux-bootstrap-2md.md
This commit is contained in:
@@ -163,4 +163,18 @@ lgdt gdt
|
||||
* CPU根据`段选择子`从GDT中找到一个匹配的段描述符,然后将段描述符放入段寄存器的隐藏部分
|
||||
* 在没有使用向下扩展段的时候,那么内存段的基地址就是`段描述符中的基地址`,段描述符的`limit + 1`就是内存段的长度。如果你知道一个内存地址的`偏移`,那么在没有开启分页机制的情况下,这个内存的物理地址就是`基地址+偏移`
|
||||
|
||||

|
||||

|
||||
|
||||
当代码要从实模式进入保护模式的时候,需要执行下面的操作: 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"
|
||||
--------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user