zoukankan      html  css  js  c++  java
  • Linux0.12引导启动程序

    1.从系统加电起所执行程序的顺序

    ROM BIOS -----> bootsect.S -----> setup.S -----> head.s -----> main.c

    其中,head.s和main.c都属于system模块

    main属于初始化程序,这里不讲


    2.几个程序的比较

    程序名 位置 语言
    ROM BIOS ROM  
    bootsect.S boot/bootsect.S as86汇编语言
    setup.S boot/setup.S as86汇编语言
    head.s boot/head.s GNU汇编语言
    main.c init/main.c C语言

    3.ROM BIOS的功能

    (1)执行某些系统检测

    (2)在物理地址0处开始初始化中断向量

    (3)将启动设备的第一个扇区读入到绝对地址0x7c00处

    (4)跳转到绝对地址0x7c00处


    4.bootsect.S的功能

    (1)把自己移到0x90000处(本来在0x7c00)

    (2)从磁盘把第2-4个扇区的setup模块读入到0x90200处(紧接着bootsect)

    (3)取磁盘参数表中当前启动引导磁盘的参数

    (4)显示“Loading system”字符串

    (5)system模块加载到0x10000处

    (6)确定要文件系统的设备号

    (7)跳转到setup程序开始处(0x90200)


    5. setup.S的功能

    (1)读取机器系统数据,并保存到0x90000开始的位置

    (2)将system模块从0x10000-0x8ffff移到0x00000-0x7ffff处

    (3)加载idtr和gdtr

    (4)开启A20,重新设置两个中断控制芯片8259A,将硬件中断号重新设置为0x20-0x2f

    (5)设置CR0(从而进入保护模式)

    (6)跳转到system模块最前面部分的head.s(0x0000)


    6.head.s的功能

    (1)加载各个数据段的寄存器

    (2)重新设置idt

    (3)重新设置gdt

    (4)检测A20是否已真的开启

    (5)测试PC是否含有数学协处理器芯片

    (6)设置管理内存的分布处理机制

    (7)将预先入围在堆栈中的/init/main.c程序的入口地址弹出,运行maina()


  • 相关阅读:
    领域驱动设计概览
    淘宝大秒系统设计详解
    如何设计测试用例
    MySQL性能优化
    Nginx 负载均衡
    智慧园区该怎么建设
    Docker容器完整使用教程
    C#框架结构分层
    项目验收PPT
    这么少的字,也能做出这么好看的PPT
  • 原文地址:https://www.cnblogs.com/windmissing/p/2559851.html
Copyright © 2011-2022 走看看