linux内核bootsect.S和setup.S流程

bootsect.S和setup.S两个文件是为了完成将内核加载到内存,并跳转到内核执行而写的。bootsect.S是由BIOS加载到内存的,只有512个字节,无法完成跳转到内核执行的任务,所以写了setup.S文件,该文件有2KB大小,当然该文件可以更加的大。该文件完成进入32位模式并跳转到内核执行的任务,且该文件实现了通过BIOS中断获取硬件信息的任务,当然该任务也可以有内核完成。

bootsect.s流程

  1. 将0x07c00的代码移动到0x90000处并跳转到0x90000处继续执行。
    (0x07c00的代码BOIS加载的引导扇区)
  2. 跳转后重新设置寄存器(设置段寄存器为0x9000,sp为0x4000-12,代码段,数据段,堆栈段都设置完毕)
  3. 从内存0x00078复制原软驱参数表到0x94000-12处,然后修改表中的每磁道最大扇区数为18.
  4. 加载setuo模块(后面的4个扇区)到内存0x90200处。如果出错显示提示,重试。
  5. 加载system模块至0x10000处
  6. 确定根设备系统号

setup.s流程

  1. 使用中断获取所需信息
  2. 将0x100000处程序移动到0x01000处
  3. 加载暂时使用的ldt和gdt,gdt基地址为0x00000000
  4. 开始32为地址线
  5. 初始化中断控制器
  6. 开启32位保护模式并跳转到0x00001000处

你可能感兴趣的:(linux内核)