从开机加电到Main函数执行前笔记内内容.doc

从开机加电到Main函数执行前笔记内内容.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从开机加电到Main函数执行前笔记内内容课案

Linux内核设计的艺术 1 ( 1 基础知识 1 ( 2 1 BIOS启动 2 2 建立中断向量表和中断服务程序 2 (二)加载bootsect---(int19中断,启动加载服务程序) 2 (三)运行bootsect,加载setup--(int13中断)和系统模块(调用read_it) 2 1 规划内存 2 2 复制bootsect 3 3 将setup加载到内存 3 4 加载系统模块 3 (四)执行setup程序 4 1提取机器系统数据 4 2 开始向32位模式转变(保护模式下) 4 (2.1)关中断cli,将内核移动到内存地址的起始位置0x00000 4 (2.2)设置中断描述符表和全局描述符表 5 (2.3)打开A20,实现32位寻址 5 (2.4)为在保护模式下执行Head.s做准备 5 ( 6 1 head执行整体策略 6 2 建立页目录表 6 3 创建分页机制 7 Linux内核设计的艺术 硬件设计-加电进入实模式,加电瞬间指向BIOS入口 基础知识 1. Intel 80X86系列的CPU可以分别在16位实模式和32位保护模式下运行,但为了兼容,解决最开始的启动问题,Intel将所有 80X86系列的CPU的硬件都设计为加电进入16位实模式状态运行。 2. 还有一个硬件逻辑设计为加电瞬间强行设置CS和IP的值,使得执行BIOS入口0xFFFF0。BIOS固化在计算机主机板上的ROM芯片,只有8KB,所占地址段为0xFE000---0xFFFFF。 3. LINUX 0.11 在实模式状态下,寻址的最大范围是2^20=1M(1048576). 4.各个寄存器详解 1 CS 代码段寄存器,指向CPU当前执行代码在内存中的区域 2 IP 指令指针寄存器,记录要执行的指令在代码段内的便宜地址。 3 4 5 6 加载BIOS,建立中断向量表和中断服务程序 1 BIOS启动 BIOS启动,会检测显卡,内存...,有一项工作是 会在内存中建立中断向量表及中断服务程序,对启动boot也就是之后的操作系统至关重要。 2 建立中断向量表和中断服务程序 首先,在内存最开的位置0x00000--0x003FF,1KB(256个中断向量表,每个占4字节),构建中断向量表。 然后,紧挨着的256字节,构建BIOS数据区0x00400--0x004FF. 其次,大约56KB之后,0x0E2CE,加载8KB的中断服务程序。 之后会用这些中断服务程序将软盘中的操作系统加载到内存中。 (二)加载bootsect---(int19中断,启动加载服务程序) 计算机硬件与BIOS联手操作,让CPU收到int0x19中断,CPU会在中断向量表中找到该中断向量,然后中断向量把CPU指向对应的中断服务程序0x0E6F2。该服务程序的作用是将软盘第一扇区的程序(bootsect.s )512B加载到内存中指定的位置0x07C00。 (三)运行bootsect,加载setup--(int13中断)和系统模块(调用read_it) 执行bootsect.s,然后将软盘中的其他代码载入内存。 1 规划内存 SYSSIZE = 0x3000 (120K) SETUPLEN = 4! 要加载的setup程序的扇区数 BOOTSEG = 0x07c0 ! bootsect原始的位置 INITSEG = 0x9000 ! bootsect将要移动的新位置 SETUPSEG = 0x9020! setup 程序加载的位置 SYSSEG = 0x1000! 内核被加载的位置 ENDSEG = SYSSEG + SYSSIZE ! 内核的末尾位置 ROOT_DEV = 0x306 !根文件系统设备设置为第二个硬盘第一个分区 2 复制bootsect 执行指令的过程是CS和IP不断变化的过程。复制完代码后直接跳到新的位置接着执行之后的代码。0x90000---0x90200 复制完之后 设置ds,es,ss,sp的值。sp的值设置为0xFF00,则cs:sp=0x9ff00.是栈的起始位置。数据压栈是由高到底的方向。 3 将setup加载到内存 计算机硬件与BIOS联手操作,让CPU收到int0x13中断,CPU会在中断向量表中找到该中断向量,然后中断向量把CPU指向对应的中断服务程序0x0E3FE。该服务程序的作用是将指定扇区的代码加载到内存中指定的位置。因此要事先给服务程序传递扇区数及加载到的内存位置0x90200--0x90A00。 4 加载系统模块 加载的扇区数是240个,时间比较长,因此会打印一些信息,主要是bootsect调用read_it实现,加载到0x10000,120KB。 5 再次确定一下根设备

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档