Lab1 : bootloader 启动 ucore os

一、内容提要

  • x86启动顺序

  • C函数调用

  • gcc内联汇编(inline assembly)

  • x86-32下的中断处理

  • 小结

二、x86启动顺序

  • 寄存器初始值

  • 第一条指令(CS=F000H, EIP=0000FFF0H)

    • 实际地址是: Base + EIP

    • 当CS被新值加载,则地址转换规则则将开始起作用

    • 通常第一条指令是一条长跳转指令(这样CS和EIP都会跳转到BIOS代码中执行)

  • 处于实模式的段

    • 段选择子(segment selector):CS,DS,SS,........

    • 偏移量(offset): EIP

  • 从BIOS到Bootloader

    • BIOS 加载 存储设备(比如软盘、硬盘、光盘,USB)上的第一个扇区( 主引导扇区 , Master Boot Record, or MBR)的 512字节 到内存的0x7c00.....[注: 扇区里的代码会完成后续的加载工作,这个扇区成为BootLoader]

    • 然后跳转到 @0x7c00的第一条指令开始执行

    • bootloader做的事:

      • (从实模式切换到保护模式) 使能保护模式(protection mode) & 段机制(segment level protector)

      • 从硬盘上读取 kernel in ELF 格式ucore kernel(跟在MBR后面的扇区) 并放到内存中固定位置

      • 跳转到 ucore OS 的入口点(entry point ) 执行, 这时控制权到了ucore OS中

  • 段机制

    • 段寄存器起指针作用, 指向 段描述符(存放段的起始地址和大小)

      • 如:根据CS里面Index的值来找到uCore的起始地址和大小

    • 段机制的(近似对等)映射关系简单, 限制是4G,段的起始地址从0开始, 分段机制弱化。(页机制实现)

    • 页机制在段机制的基础上.

    • 在段寄存器里会保存一块区域叫做段选择址(Index: 会查找在段描述符中的项.)

    • 起始地址(基址) + EIP = 物理地址(没有页机制时,线性地址等同于物理地址)

    • 段机制其实是一种映射关系

    • 通过一个大数组(把各个段描述符装进去), 数组由操作系统建立的(全局描述符表(简称段表),GDT)(描述好段描述符表的一个大致的空间, 给出他的位置和大小)

    • 内部寄存器GDTR保存相应地址,使得寄存器和GDT表建立关系,从而可以指向GDT大数组里面所对应的描述符.

    基址(Base) 在什么地方(0), 段的Limit多大(4G) -- 实现简单的映射

    段选择址

    全局描述表

    段描述符

    指向全局描述符表起始地址GDTR的一个寄存器

  • 使能保护模式(Enable)

    • 使能保护模式, bootloader/OS 要设置 CR0(系统寄存器) 的bit 0 (PE)

    • 段机制 (Segment-level protection ) 在保护模式下是自动使能的.

    • GDT里面每一项是一个段描述符,把相应的段的段寄存器设置为对应的Index,能够指向全局描述表GDT对应的 项(段描述符--指出了映射关系), 从而在使能的保护机制,使段机制正常工作.

  • 加载ELF格式的ucore OS kernel

(五)bootloader 启动 ucore os的更多相关文章

  1. lab_1 清华大学ucore bootload启动ucore os(预备基础知识+实验过程)

    实验1 :bootload启动ucore os 1.0实验内容: lab1中包含一个bootloader和一个OS.这个bootloader可以切换到X86保护模式,能够读磁盘并加载ELF执行文件格式 ...

  2. 操作系统(3)实验相关原理——bootloader启动uCore

    x86启动顺序 CS+EIP决定启动地址. CS部分后面又4个0,相当于是左移了4位.总之就是要让CS左移4位之后加上EIP来得到要跳转的地址. 0x7c00地方开始的512字节的内容就是bootlo ...

  3. u-boot(五)内核启动

    目录 u-boot(五)内核启动 概述 分区空间 内核文件格式 内核复制跳转 内核启动 机器ID 启动参数 (起始tag)setup_start_tag 内存设置 根文件系统,启动程序,串口设备 (结 ...

  4. ubuntu16.04下Hyperledger之搭建Fabric环境简单操作(五步启动e2e_cli)

    如果你已经安装好go等工具.git及checkout相关代及下载相关镜像,您只需下面5步就能up e2e_cli~/go/src/github.com/hyperledger/fabric$ sudo ...

  5. bootloader启动代码init.s解析----IRQ中断处理函数

    bootloader启动代码init.s解析----IRQ中断处理函数 init.s源代码如下: ;///////////////////////////////////////////// ;opt ...

  6. 【Bootloader】bootloader启动过程分析

    Boot Loader启动过程分析 一.    Boot Loader的概念和功能 1.嵌入式Linux软件结构与分布在一般情况下嵌入式Linux系统中的软件主要分为以下及部分: (1)引导加载程序: ...

  7. 嵌入式Linux驱动学习之路(五)u-boot启动流程分析

    这里说的u-boot启动流程,值得是从上电开机执行u-boot,到u-boot,到u-boot加载操作系统的过程.这一过程可以分为两个过程,各个阶段的功能如下. 第一阶段的功能: 硬件设备初始化. 加 ...

  8. 嵌入式Linux系统Bootloader启动调试技术(回想)

    嵌入式系统搭建过程中,对于系统平台搭建project师最初的一步一般是移植Bootloader ,当然移植有几个级别,通常最常见的是參考的EVM 的硬件有了改动(如更改了FLASH ,更改了SDRAM ...

  9. 启动apache (OS 10022)提供了一个无效的參数。解决方式

    今天 apache 突然启动不起来了,查看了一下错误日志发现了例如以下错误: [Tue Mar 17 11:27:32 2015] [crit] Parent: child process exite ...

随机推荐

  1. 解决vmware与主机无法连通的问题

    我们选择NAT方式,来实现Ubuntu的静态IP地址配置. 打开VMware,在顶部依次选择:编辑 > 虚拟网路编辑器,打开虚拟网路编辑器:去掉VMnet0和VMnet1,只保留VMnet8.然 ...

  2. python decimal.quantize()参数rounding的各参数解释与行为

    我最开始其实是由于疑惑ROUND_FLOOR和 ROUND_DOWN的表现区别才看了一波文档,但是感觉拉出一票以前没有留意过的东西. 贴一个decimal文档里面的解释: ROUND_CEILING ...

  3. 记一次配置oh my zsh的坑

    oh-my-zsh:https://github.com/robbyrussell/oh-my-zsh prezto:https://github.com/sorin-ionescu/prezto 我 ...

  4. SpringBoot(十五)_springboot实现预览pdf

    最近,项目上要做个打印的东西,还要预览.我想就直接生成pdf预览,然后用户选择打印 于是,昨天找了找资料.一般用itext 进行转pdf.于是我就用springboot试了试,代码比较简单,现在只是简 ...

  5. loadrunner基础学习笔记四

    在loadrunner中,通过将一系列操作标记为事务,可以将它们指定为要评测的操作. loadrunner收集关于事务执行时间长度的信息,并将结果显示在用不同单色标识的图和报告中. 可以这些信息了解应 ...

  6. C# 枚举值 (二) 多属性 操作

    很多时候,我们的枚举值可能需要中英文, 那么可以使用下面的方法: 下面这个类,包含2部分. 1 BaseDescriptionAttribute特性的重载 2 枚举的操作类 EnumOperate n ...

  7. lightoj1038(数学期望dp)

    题意:输入一个数N,N每次被它的任意一个因数所除 变成新的N 这样一直除下去 直到 N变为1 求变成1所期望的次数 解析: d[i] 代表从i除到1的期望步数:那么假设i一共有c个因子(包括1和本身) ...

  8. 【ZOJ2277】The Gate to Freedom

    BUPT2017 wintertraining(16) #4 E ZOJ - 2277 题意 输出\(n^n\)的首位的数字. 题解 用科学计数法表示\(n^n=k\cdot 10^b\),那么\(n ...

  9. 【BZOJ4815】[CQOI2017]小Q的表格(莫比乌斯反演,分块)

    [BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演,分块) 题面 BZOJ 洛谷 题解 神仙题啊. 首先\(f(a,b)=f(b,a)\)告诉我们矩阵只要算一半就好了. 接下来是\(b* ...

  10. 【Luogu4512】多项式除法(FFT)

    题面 洛谷 题解 模板题... 我直接蒯我写的东西... 这个除法是带余除法,所以并不能直接求逆解决. 要求的就是给定两个多项式\(A(x),B(x)\),其项数为\(n,m\) 求解一个\(n-m\ ...