setup.s

原创 2012年03月26日 01:20:18
  1. 获取硬件的参数,保存在9000:0000开始的位置。包括:扩展内存的大小(KB),检查显示方式并取参数,光标位置,显卡显示模式,硬盘信息
  2. 将system模块由0x10000搬到0x0000处
  3. 进入保护模式
  • 加载idt
  • 加载gdt
    • 空描述符
    • 代码段描述符。特权值0,存在,可读非一致性代码段,段长度(段限长+1)8M,颗粒度G=1(4kb),D=1(32位地址,32位或8位数据)
    • 数据段描述符。特权值0,存在,非下扩段,可读可写,未访问,B=1使用32位esp,G=1(4kb),段长度(8M)
  • 打开A20地址线
  • 设置8259
  • 设置初始化命令字ICW1,0x11 (00010001b)  ,位5至位7在8086中无用,位4恒为1。ICW1表示8259工作在边沿触发方式,多片连接,需要设置ICW4。       
7 6 5 4 3 2 1 0
0 0 0 1

1-电平触发方式

0-边沿触发方式

设置为0

8086无用

1-单片8259

0-多片8259

1-需要设置ICW4

0-不需要设置ICW4

  • 设置初始化命令字ICW2,高5位表示中断号的起始位置,因为每个8259可以提供8个中断号,所以只有高5位有效。256个中断,分为32个段,每个段长8。0.12中主8259中断号始于0x20,从片中断号始于0x28.
  • ICW3用于设置主片于从片的关系。主片ICW3每位表示是否接有从片,1表示有,0表示无。而从片通过低3位来表示连接到主片哪个优先级,因为其是通过CAS2~CAS0管脚来判断的,所以只有3位。从2^从片的命令字=主片命令字,当只有一个从片时。
  • ICW4表示8259工作的方式,0.12中0x01,表示:普通全嵌套方式,非缓冲方式,非自动结束方式,8086系统
    7 6 5 4 3 2 1 0
    0 0 0 1-选择特殊全嵌套方式
    0-普通全嵌套方式
    1-缓冲方式
    0-非缓冲方式
    1-缓冲方式下主片
    0-缓冲方式下从片
    1-自动结束中断方式
    0-非自动结束方式
    1-8086/88系统
    0-MCS80/85系统
  • 打开cr0的PE位,进入保护模式,并用一个跳转jmpi 0,8,刷新指令队列,并转到head.s中执行。此处加载使用lmsw指令,改指令只改变cr0的低四位,只有PE,MP,EM和TS被改写。

linux kernel Setup.S代码完全注释(累死了。。。)

//注释不一定全对,希望高手斧正啊。。#include #include #include #include #include #include  /* Signature words to ensu...
  • YUAN1125
  • YUAN1125
  • 2010年05月11日 21:50
  • 4317

Linux启动分析(2)— bootsect.S、setup.S、head.S分析

bootsect.S,系统引导程序,一般不超过512字节。在PC系统结构中,线性地址0xA0000以上,即640K以上用于图形接口卡和BIOS自身,640K以下为系统的基本内存。如果配置更多的内存,则...
  • cxylaf
  • cxylaf
  • 2007年05月26日 10:14
  • 6339

Linux0.11内核--启动引导代码分析setup.s

setup的整体作用: 首先利用BIOS中断读取机器的数据,将其保存在地址0x9000:0x0000处,覆盖了原来bootsect.s代码所在的位置,由于bootsetc模块的代 码运行完毕,已经...
  • bfboys
  • bfboys
  • 2016年09月04日 23:27
  • 192

linux内核bootsect.S和setup.S流程

bootsect.s流程 将0x07c00的代码移动到0x90000处并跳转到0x90000处继续执行。 (0x07c00的代码BOIS加载的引导扇区) 跳转后重新设置寄存器(设置段寄存器为0x90...
  • pk_20140716
  • pk_20140716
  • 2015年07月26日 19:13
  • 572

很好的linux启动说明( bootsect.S、setup.S、head.S)

bootsect.S,系统引导程序,一般不超过512字节。 在PC系统结构中,线性地址0xA0000以上,即640K以上用于图形接口卡和BIOS自身,640K以下为系统的基本内存。如果配置更多的内存...
  • xljiulong
  • xljiulong
  • 2012年03月23日 09:33
  • 2215

setup.s

1 !  2 ! setup.s (C) 1991 Linus Torvalds  3 !  4 ! setup.s is responsible for getting the system ...
  • qq308845474
  • qq308845474
  • 2015年09月25日 20:23
  • 395

setup.s代码注释

1 !2 ! setup.s (C) 1991 Linus Torvalds3 !4 ! setup.s is responsible for getting the system data from...
  • zdwzzu2006
  • zdwzzu2006
  • 2009年05月26日 22:50
  • 754

读setup.s

原文出处 《linux内核0.11完全注释》! bootsect.s 2011-04-10! setup.s负责从BIOS中获取系统数据,并将这些数据放到系统内存的适当位置。! 此时setup.s和s...
  • robbie1314
  • robbie1314
  • 2011年04月12日 00:40
  • 974

Linux 0.1 版本内核 setup.s 代码解析

! ! setup.s (C) 1991 Linus Torvalds ! ! setup.s is responsible for getting the system data from the ...
  • u013583243
  • u013583243
  • 2014年01月31日 16:20
  • 721

setup.s源码分析

1 !   2 !   setup.s     (C) 1991 Linus Torvalds   3 !   4 ! setup.s is responsible for getting the s...
  • cumtwyc
  • cumtwyc
  • 2015年05月07日 12:59
  • 288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:setup.s
举报原因:
原因补充:

(最多只允许输入30个字)