【完整代码已经归档到 https://github.com/linzhanglong/mini_bootloader 】
现在我们完成我们第一个主要的功能:引导Linux内核。
首先我们要准备一个Linux内核文件 bzImag。如何引导Linux内核呢?需要做几件事情:
1. 设置GDT,设置访问内存权限;
2. 开启A20地址线(原因:http://blog.csdn.net/ruyanhai/article/details/7181842,是为了兼容历史CPU产生的坑)
3. 进入保护模式
4.把内核加载到内存去;
5.设置启动参数,然后调到内核代码执行。
首先我们先设置CPU进入保护模式,需要做两件事情,第一件事情就是设置GDT。我们看GDT的格式:
GDT用来做什么呢?第一,就是设置我们代码的权限;第二就是设置代码处于CPU哪个级别。其中Type字段决定了类型(数据段还是代码段)以及权限,而DPL决定了属于哪个CPU级别(ring0,还是ring3)。而Base address和Liminit决定了我们这条GDT描述符限制的地址范围。具体各个字段的意思可以参考:https://www.kancloud.cn/digest/protectedmode/121466