返回

Linux0.11内核源码分析之main函数运行前的准备工作

Android

Linux0.11是Linux内核的早期版本之一,它为我们提供了窥探Linux内核启动过程的窗口。在本文中,我们将深入剖析Linux0.11内核源码,重点关注main函数运行前的准备工作。这些准备工作包括加载bootsect、读取磁盘加载setup和system、获取关键数据、关闭中断、启用分页以及从实模式切换到保护模式等。通过对这些步骤的细致解析,读者将对Linux内核启动过程有更深入的理解。

加载bootsect

bootsect是Linux内核启动过程中的第一个程序,它位于磁盘的第一个扇区。bootsect负责将内核从磁盘加载到内存中。加载过程如下:

  1. 计算机启动时,BIOS会将bootsect从磁盘的第一个扇区加载到内存中。
  2. bootsect会将磁盘上的内核镜像加载到内存中。
  3. bootsect会跳转到内核镜像的起始地址,开始执行内核代码。

读取磁盘加载setup和system

内核镜像加载到内存后,需要加载setup和system这两个文件。setup文件负责设置系统硬件,而system文件负责初始化内核数据结构。加载过程如下:

  1. 内核代码会调用read_disk()函数读取磁盘上的setup文件。
  2. 内核代码会调用read_disk()函数读取磁盘上的system文件。
  3. 内核代码会跳转到setup文件的起始地址,开始执行setup代码。

获取关键数据

setup代码会执行一系列操作来获取系统关键数据,这些数据包括:

  • 内存大小
  • 磁盘大小
  • 根文件系统的位置
  • 启动参数

这些数据对于内核的正常运行至关重要。

关闭中断

在内核启动过程中,需要关闭中断。中断是一种硬件机制,允许硬件设备在需要时通知CPU。在内核启动过程中,关闭中断可以防止硬件设备干扰内核的执行。

启用分页

分页是一种内存管理机制,它将物理内存划分为大小相等的页面。分页可以提高内存的利用率,并简化内存管理。在内核启动过程中,需要启用分页。

从实模式切换到保护模式

实模式是x86处理器的初始模式,它只允许访问1MB的内存空间。保护模式是x86处理器的另一种模式,它允许访问更大的内存空间,并提供内存保护功能。在内核启动过程中,需要从实模式切换到保护模式。

总结

Linux内核启动过程是一个复杂的过程,涉及到一系列操作。在本文中,我们详细分析了Linux0.11内核启动过程中的准备工作,包括加载bootsect、读取磁盘加载setup和system、获取关键数据、关闭中断、启用分页以及从实模式切换到保护模式等。通过对这些步骤的细致解析,读者对Linux内核启动过程有了更深入的理解。