linux0.11护模式初始化程序阅读注释笔记

    xiaoxiao2025-04-13  38

    [ 1] linux0.11引导程序阅读注释。 [ 2] linux0.11由实模式进入保护模式程序阅读注释 。

    篇幅较长,可通过浏览器的搜索功能(Ctrl + f)搜索函数名了解相应函数的实现机制,如 setup_gdt。

    [3] linux0.11护模式初始化程序阅读注释
    在head.s即[0x0, …]内存中重新设置IDT和GDT。将操作系统数据段加载到各数据段寄存器, 设置ss:esp所维护的栈内存。设置页表目录、页表并开启页机制, 随后跳转执行init/main.c中的main函数。

    回想从bootsect.s开始到head.s结束, 在这个过程中所学到的隐藏在其背后的计算机基础知识, 还是有些振奋。


    head.s
    /* * linux/boot/head.s * * (C) 1991 Linus Torvalds */ /* * head.s contains the 32-bit startup code. * * NOTE!!! Startup happens at absolute address 0x00000000, which is also where * the page directory will exist. The startup code will be overwritten by * the page directory. */ /* head.s包含了32位启动代码。 * 注,启动代码从物理地址0x00000000处开始。从0x00000000开始的部分启动代码将会被页目录覆盖。*/ # head.s中包含了32位初始化程序. # # 注: 32位启动程序head.s始于物理内存地址0x00000000处, # 随着head.s的执行, 页目录相关数据结构将覆盖head.s中的部分代码。# .text # 声明head.s中的以下标号为全局符号, 供后续C程序使用。 .globl _idt,_gdt,_pg_dir,_tmp_floppy_area # # 页表目录(数据结构)起始处。 _pg_dir: # startup_32: # 进入保护模式后, 首先需将段描述符选择符加载给各段寄存器。 # 在给各数据段寄存器赋值时, 若合法的话, # CPU会将段描述符选择符10h对应的段描述符的内容隐式加载到 # 数据段寄存器的隐藏部分。 movl $0x10,
    转载请注明原文地址: https://yun.8miu.com/read-137144.html
    最新回复(0)