从开机开始

1. 开机之后,计算机干了什么?

  • 加载BIOS:计算机通电后,基本输入/输出系统(BIOS)会首先运行。BIOS是一个固件程序,它位于计算机主板上的芯片中,并负责初始化硬件设备、检测和解决问题以及执行其他预启动任务。
  • 加载引导程序:BIOS会加载引导程序,引导程序是操作系统的一部分,负责启动操作系统。引导程序通常被存储在硬盘驱动器的引导扇区中,并根据系统配置进行加载。
  • 加载操作系统:引导程序会加载操作系统内核并将控制权交给操作系统。操作系统内核是操作系统的核心部分,它负责管理计算机的硬件、软件和资源,并提供各种系统服务。
  • 初始化硬件设备:操作系统内核会初始化计算机的硬件设备,包括CPU、内存、硬盘驱动器、键盘、鼠标等。
  • 启动系统服务:操作系统内核会启动各种系统服务,如网络服务、文件系统服务、安全服务等。
  • 启动用户界面:操作系统内核会启动用户界面,如登录屏幕或桌面环境,以便用户可以使用计算机。
    关键词:引导程序

2. BIOS是如何得知引导程序位置并加载引导程序的?引导程序是什么,它是如何工作的?

  • 在计算机启动之后,bios会按照顺序检查计算机中的硬件设备,直到找到包含MBR的硬件设备。MBR 叫做主引导记录,它通常位于磁盘的一个物理扇区(并不是绝对的)。MBR 的大小为512个字节,它最后两个字节为0x55AA,bios会通过结尾字节来判断它的有效性。引导程序在MBR的代码段,即MBR的前446个字节。bios找到MBR后会将MBR的代码段加载到内存中,并且运行引导程序。
  • 引导程序是用来加载系统内核到内存中,并将控制权交给内核的一段MBR中的程序。引导程序会加载同在MBR上的分区表,从而确定内核文件所在的分区和具体位置。找到内核文件后,引导程序会将内核加载到内存中并且将控制权交给内核。至此,引导程序的工作完成。

3. GPT分区是如何加载引导程序的?

GPT分区表中的UEFI系统引导程序与MBR分区表中的传统引导程序不同,UEFI引导程序市存储在磁盘上的EFI系统分区中的,而不是存储在磁盘的MBR中的。
从开机开始_第1张图片
使用DiskGenius可以看到在磁盘中有一个ESP系统分区,该分区中的一个Boot文件夹中有引导程序文件 bootx64.efi。

4. linux中的MBR和引导程序

Linux-0.11 中使用的引导程序就是位于boot文件夹下的bootsect.s文件。该文件是一个汇编语言源代码文件。通过编译,这个文件会被编译成二进制文件,存放在启动区的第一扇区。bootsect.s包含了引导程序代码、硬件配置代码和错误处理代码。

5. linux 0.11版本的引导程序

在Linux-0.11版本中,引导程序位于boot目录下的bootsect.s。
从开机开始_第2张图片
下面看一下bootsect.s:

SETUPLEN = 4				; nr of setup-sectors
BOOTSEG  = 0x07c0			; original address of boot-sector
INITSEG  = 0x9000			; we move boot here - out of the way
SETUPSEG = 0x9020			; setup starts here
SYSSEG   = 0x1000			; system loaded at 0x10000 (65536).
ENDSEG   = SYSSEG + SYSSIZE		; where to stop loading

entry start
start:
	mov	ax,#BOOTSEG
	mov	ds,ax
	mov	ax,#INITSEG
	mov	es,ax
	mov	cx,#256
	sub	si,si
	sub	di,di
	rep
	movw
	jmpi	go,INITSEG
go:	mov	ax,cs
	mov	ds,ax
	mov	es,ax
; put stack at 0x9ff00.
	mov	ss,ax
	mov	sp,#0xFF00		; arbitrary value >>512

你可能感兴趣的:(编译过程,linux)