`
jackchen0227
  • 浏览: 147264 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

[zz]linux启动过程(1)-bootsect.S文件分析

阅读更多

bootsect.S是执行的第一个文件

bootsect-loader在内和源码中对应的程序是 /Arch/i386/boot/bootsect.S 。下面将主要是针对此文件进行的分析。

  1. 几个相关文件:

    <1> /Arch/i386/boot/bootsect.S

    <2> /include/linux/config.h

    <3> /include/asm/boot.h

    <4> /include/linux/autoconf.h
  2. 引导过程分析:

    对于Intel x86 PC , 开启电源后, 机器就会开始执行ROM BIOS的一系列系统测试动作,包括检查RAM,keyboard,显示器,软硬磁盘等等。执行完bios的系统测试之后,紧接着控制权会转移给ROM中 的启动程序(ROM bootstrap routine);这个程序会将磁盘上的第0轨第0扇区(叫boot sector或MBR , 系统的引导程序就放在此处)读入内存中,并放到自0x07C0:0x0000开始的512个字节处;然后处理机将跳到此处开始执行这一引导程序;也即装入 MBR中的引导程序后, CS:IP = 0x07C0:0x0000 。加电后处理机运行在与8086相兼容的实模式下。

    如果要用 bootsect-loader进行系统引导,则必须把bootsect.S编译连接后对应的二进制代码置于MBR ; 当ROM BIOS 把bootsect.S编译连接后对应的二进制代码装入内存后,机器的控制权就完全转交给bootsect ; 也就是说,bootsect将是第一个被读入内存中并执行的程序。

    Bootsect接管机器控制权后,将依次进行以下一些动作:


    1. 首先,bootsect将它"自己"(自位置0x07C0:0x0000开始的512个字节)从被ROM BIOS载入的地址0x07C0:0x0000处搬到0x9000:0000处; 这一任务由bootsect.S的前十条指令完成;第十一条指令“jmpi go,INITSEG”则把机器跳转到“新”的bootsect的“jmpi go,INITSEG”后的那条指令“go: mov di,#0x4000-12”;之后,继续执行bootsect的剩下的代码;在bootsect.S中定义了几个常量:

    BOOTSEG = 0x07C0 bios 载入 MBR的约定位置的段址;

    INITSEG = 0x9000 bootsect.S的前十条指令将自己搬到此处(段址)

    SETUPSEG =0x9020 装入Setup.S的段址

    SYSSEG =0x1000 系统区段址

    对于这些常量可参见/include/asm/boot.h中的定义;这些常量在下面的分析中将会经常用到;

    2.以0x9000:0x4000-12为栈底,建立自己的栈区;其中0x9000:0x4000-12到0x9000:0x4000的一十二个字节预留作磁盘参数表区;

    3. 在0x9000:0x4000-12到0x9000:0x4000的一十二个预留字节中建立新的磁盘参数表,之所以叫“新”的磁盘参数表,是相对于 bios建立的磁盘参数表而言的。由于设计者考虑到有些老的bios不能准确地识别磁盘“每个磁道的扇区数”,从而导致bios建立的磁盘参数表妨碍磁盘 的最高性能发挥,所以,设计者就在bios建立的磁盘参数表的基础上通过枚举法测试,试图建立准确的“新”的磁盘参数表(这是在后继步骤中完成的);并把 参数表的位置由原来的0x0000:0x0078搬到0x9000:0x4000-12;且修改老的磁盘参数表区使之指向新的磁盘参数表;

    4. 接下来就到了load_setup子过程;它调用0x13中断的第2号服务;把第0道第2扇区开始的连续的setup_sects (为常量4)个扇区读到紧邻bootsect的内存区;,即0x9000:0x0200开始的2048个字节;而这四个扇区的内容即是/arch /i386/boot/setup.S编译连接后对应的二进制代码; 也就是说,如果要用bootsect-loader进行系统引导,不仅必须把bootsect.S编译连接后对应的二进制代码置于MBR,而且还得把 setup.S编译连接后对应的二进制代码置于紧跟MBR后的连续的四个扇区中;当然,由于setup.S对应的可执行码是由bootsect装载的,所 以,在我们的这个项目中可以通过修改bootsect来根据需要随意地放置setup.S对应的可执行码;

    5.load_setup子过程的唯一出口是probe_loop子过程;该过程通过枚举法测试磁盘“每个磁道的扇区数”;

    6. 接下来几个子过程比较清晰易懂:打印我们熟悉的“Loading”;读入系统到0x1000:0x0000; 关掉软驱马达;根据的5步测出的“每个磁道的扇区数”确定磁盘类型;最后跳转到0x9000:0x0200,即setup.S对应的可执行码的入口,将机 器控制权转交setup.S;整个bootsect代码运行完毕;
  3. 引导过程执行完后的内存印象图:


完成了系统的引导后,系统将进入到初始化处理阶段。系统的初始化分为实模式和保护模式两部分。

http://hi.baidu.com/sunblackshine/blog/item/a4a9130f7e87ecc27acbe16d.html

分享到:
评论

相关推荐

    Linux开机过程的分析(关于bootsect.S).txt

    ### Linux开机过程的分析(关于bootsect.S) #### 引言 在深入解析Linux开机启动过程中,特别是关于`bootsect.S`文件的关键作用时,我们需要理解计算机系统如何从硬件层面逐步过渡到操作系统层面。本文将重点介绍...

    读bootsct.S、setup.S、head.S心得

    -bootsect.S源码分析: 1.在boot.h中设置4个DEF_参数,分别为:DEF_INITSEG 0x9000(将bootsect程序移至0x9000段处);DEF_SYSSEG 0x1000(系统加载至0x1000(65536)(64k)段处);DEF_SETUPSEG 0x9020(设置程序...

    引导程序的设计以及进程环境的建立.rar_boot16_bootsect.bin_nasm_nasm-0.98_引导程序

    1、BOOTSECT.BIN 功能:1.44M软盘的引导扇区中的文件 ... 使用方法:将OS.PCS拷贝到引导扇区为BOOTSECT.BIN的软盘上,设定从软驱启动计算机,重新启动计算机,电脑启动成功后可运行OS.PCS文件以显示任务切换。

    学习bootsect.s中经常会问到的问题

    在深入探讨《学习bootsect.s中经常会问到的问题》这一主题之前,我们首先需要了解bootsect.s文件的基本概念以及它在操作系统启动过程中所扮演的角色。`bootsect.s` 是一个汇编语言源代码文件,主要负责操作系统的...

    bootsect.exe下载官方版.zip

    在下载"bootsect.exe官方版.zip"文件后,你将获得适用于32位和64位系统的Bootsect.exe工具。根据你的系统需求,选择对应的版本运行。使用时,你需要在命令提示符窗口中输入特定的参数,例如`bootsect /nt60 C:`,这...

    win7 32 bootsect.exe

    【压缩包子文件的文件名称列表】中的 "bootsect.exe" 是Windows 7系统恢复或安装过程中使用的重要工具。它主要用于设置或更新引导扇区代码,这些代码控制着系统启动过程。以下是一些与Bootsect.exe相关的知识点: 1...

    Linux011-Mem-YuanYi.pdf

    通过对Linux 0.11内核中的目标文件生成过程及其内存管理方法的分析,我们可以深入了解操作系统内核构建的基本流程和关键概念。此外,这也为我们理解现代操作系统内核的设计和实现提供了基础。尽管Linux 0.11已经是较...

    bootsect.exe

    《bootsect.exe:Windows操作系统的启动扇区工具》 在Windows操作系统中,`bootsect.exe`是一个至关重要的命令行工具,主要用于更新系统启动扇区(Boot Sector)的信息。该工具有两个版本,分别是针对64位(x64)...

    LINUX系统第三章--启动系统.pdf

    在深入了解Linux系统启动的过程之前,我们需要对几个关键概念有所了解:首先是8086汇编语言的基础知识,这对于我们理解bootsect.s、setup.s以及head.s这三个核心启动文件至关重要。此外,我们还需要了解80x86架构的...

    bootsect.exe(支持32位WIN7).rar

    1. **恢复MBR**:当MBR被病毒或恶意软件篡改,或者因为误操作导致损坏时,可以使用`bootsect.exe`来恢复MBR,使其重新指向正确的操作系统分区。 2. **安装多系统**:如果你的电脑上安装了多个操作系统,并且需要在...

    bootsect.exe(64位&amp;32位)

    `Bootsect.exe` 在系统安装、修复和恢复过程中扮演着关键角色,特别是当用户使用U盘来创建可启动的Windows安装媒体时。 **1. 32位与64位的区别** `Bootsect.exe` 提供了32位和64位两个版本,以对应不同的操作系统...

    Win Vista x64 bootsect.exe

    很难找到bootsect.exe文件

    bootsect.exe WIN7用的

    1. **bootsect.exe的定义和功能** bootsect.exe是Windows内建的命令行工具,主要负责将NT类操作系统(如Windows NT, 2000, XP, Vista, 7, 8等)的启动信息写入到主引导记录(MBR)或者GUID分区表(GPT)的引导扇区...

    Linux内核启动过程分析.pdf

    ### Linux内核启动过程分析 #### 一、引言 随着技术的发展,Linux作为一个免费开源的Unix类操作系统,因其强大的功能、高效的性能以及良好的可移植性,在嵌入式系统乃至高性能服务器领域获得了广泛应用。理解Linux...

    bootsect.exe for win7 32bit

    1. **启动扇区(Boot Sector)**:是硬盘或可启动设备的第一个扇区,通常包含引导加载器,是操作系统启动过程的关键部分。 2. **引导加载器(Boot Loader)**:引导加载器负责在计算机启动时加载操作系统内核,并...

    linux内核注释.pdf

    - **第3章 引导启动程序(BOOT)**: 这一章详细分析了Linux系统的启动过程,包括: - BOOTSECT.S程序:解释了引导扇区的工作原理。 - SETUP.S程序:描述了设置系统环境的过程。 - HEAD.S程序:介绍了内核加载和...

    bootsect.zip

    标题“bootsect.zip”指的是一个包含了“bootsect”工具的压缩文件。Bootsect是一个非常重要的命令行工具,主要在Windows操作系统中使用,特别是在系统安装和修复过程中。它用于更新或恢复系统的引导扇区(boot ...

    实验楼-操作系统的引导-代码.zip_ZFU_操作系统实验二 内核代码修改

    在这个“实验楼-操作系统的引导-代码.zip”中,我们关注的是如何修改内核代码,特别是bootsect.s和setup.s两个关键文件,以实现启动时的自定义输出和内存信息的打印。 bootsect.s通常是引导扇区程序,它位于磁盘的0...

Global site tag (gtag.js) - Google Analytics