首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

bootsect及setup

BIOS和bootsect CPU加电即进入16位实模式 硬件逻辑设计为加电瞬间强行设置:CS=0xF000,IP=0xFFF0,CS:IP=0xFFFF0 而BIOS程序的入口地址即0xFFFF0,是计算机上电后...调用INT 0x19中断,将软盘第一扇区(0面0磁道1扇区)的512字节即bootsect.s加载到内存0x07C00处 ?...bootsect.s将自身复制到0x90000~0x90200,ds:si -> es:di rep指令重复256次,一次复制4字节即双字,复制结束后便跳过去,跳时指定了段和偏移(段内偏移实际没变) ?...主要完成的是搬运加载工作 setup setup程序的第一件事是利用BIOS中断服务程序将机器系统数据加载在原bootsect的位置(覆盖),0x90000~0x901FD,在setup前只空了2个字节...保留内部不可屏蔽中断0x00~0x1F,重新映射中断号,IRQ0为0x20 将控制寄存器CR0的第0位PE置1,打开保护模式(之后要根据GDT) 跳到GDT的1项指向的地址开始执行,即head.s 参考:《Linux

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

操作系统的启动

MBR分区在硬盘上的组织形式大致如下: MBR.png 2, 三方协议 想要把操作系统启动起来,是需要多方按照一定的协议进行协作才能完成的,以Linux0.11,BIOS+MBR分区,Intel80x86CPU...此时内存第一次有了操作系统的代码,第一个扇区的内容其实就是linux/boot/bootsect.s的内容,其主要功能就是把第二批第三批代码加载到内存中规划好的位置。...在bootsect中,读取的是从第二个扇区开始的4个扇区,加载到0x90200(SETUPSEG)处,这些内容对应linux/boot/setup.s这个文件。...此时内存的视图如下: linux内存.png所以,我们可以知道,当BIOS运行后,会通过int0x19中断读取第一扇区的内容,BIOS并不管这个扇区里是否有内容。...3, grub 经过多年的发展,引导程序已经由最初像Linux0.11的bootsect.s,setup.s等发展为grub,grub2之类的启动引导程序,第一扇区(主引导记录)也从bootsect.s

1.3K30

基于Linux的pc启动过程

要了解Android手机启动过程,我们先来了解一下基于linux系统的电脑从按下电源键的那一刻起,发生了什么,这样类比可以更好的理解Android手机的启动过程。...基于Linux的pc启动过程 我们都知道,所有的程序软件包括操作系统都是运行在内存中的,然而我们的操作系统一般是存放在硬盘上的,当我们按下开机键的时候,此时内存中什么程序也没有,因此需要借助某种方式,将操作系统加载到内存中...基于linux的操作系统而言,计算机将分三批逐次加载操作系统的代码,第一批由BIOS中断int 0x19将第一扇区bootsect的内容加载到内存;第二批和第三批在bootsect的指挥下,分别加载后面扇区的内容到内存中...Android手机的启动过程 Android系统虽然也是基于linux系统的,但是由于Android属于嵌入式设备,并没有像pc那样的BIOS程序。取而代之的是Bootloader——系统启动加载器。...当linux内核启动后会初始化各种软硬件环境,加载驱动程序,挂载根文件系统,并开始执行根文件系统的init程序,init程序是Android启动过程中最重要的核心程序。

2K00

进入Linux内核前的准备

最近看到这个github仓库flash-linux0.11-talk,觉得还算是蛮有意思的,加上网络编程的课程又有抄写一段tcp协议实现代码或者交一篇linux内核源码阅读的笔记,还是比较讨厌这种低效率的抄写的所以就想写篇文章记录一下粗浅阅读源码后的大概了解...进入linux内核前的准备 开机 如果问电脑是如何一步一步开始运行操作系统的,那么第一件事情当然是按下开机键啦。...那么对于linux0.11来看,这个512Byte大小的启动程序就是/boot目录下的bootsect.s这个文件。按下开机键后,它会被编译成二进制文件,并且被存放在硬盘中的0盘0道1扇区。...加载setup.s 加载bootsect后,接下来我们会加载setup.s这个文件,当然加载这个文件的程序肯定也是写在bootsect.s里面的,让我们继续往下读bootsect.s。...我们来看看现在的内存布局是怎么样的 栈顶地址仍然是0x9FF00,0x90000开始往上的位置,原来是bootsect和setup程序的代码,现bootsect的一部分代码在已经被操作系统为了记录内存

5.5K20

作为Android开发者,你真的知道Android按下开机键到启动发生什么吗?

要了解Android手机启动过程,我们先来了解一下基于linux系统的电脑从按下电源键的那一刻起,发生了什么,这样类比可以更好的理解Android手机的启动过程。...基于Linux的pc启动过程 我们都知道,所有的程序软件包括操作系统都是运行在内存中的,然而我们的操作系统一般是存放在硬盘上的,当我们按下开机键的时候,此时内存中什么程序也没有,因此需要借助某种方式,将操作系统加载到内存中...基于linux的操作系统而言,计算机将分三批逐次加载操作系统的代码,第一批由BIOS中断int 0x19将 第一扇区bootsect的内容加载到内存;第二批和第三批在bootsect的指挥下,分别加载后面扇区的内容到内存中...Android手机的启动过程 Android系统虽然也是基于linux系统的,但是由于Android属于嵌入式设备,并没有像pc那样的BIOS程序。...当linux内核启动后会初始化各种软硬件环境,加载驱动程序,挂载根文件系统,并开始执行根文件系统的init程序,init程序是Android启动过程中最重要的核心程序。

96730

内核态与用户态_linux内核态和用户态通信

(1)让我们忽略Linux对段式内存映射的支持。...系统中堆栈的使用方法 本节内容概要描述了Linux内核从开机引导到系统正常运行过程中对堆栈的使用方式。...5.8.1 初始化阶段 (1)开机初始化时(bootsect.S,setup.s) 当bootsect代码被ROM BIOS引导加载到物理内存0x7c00处时,并没有设置堆栈段,当然程序也没有使用堆栈...直到bootsect被移动到0x9000:0处时,才把堆栈段寄存器SS设置为0x9000,堆栈指针esp寄存器设置为0xff00,即堆栈顶端在0x9000:0xff00处,参见boot/bootsect.s...setup.s程序中也沿用了bootsect中设置的堆栈段。这就是系统初始化时临时使用的堆栈。 (2)进入保护模式时(head.s) 从head.s程序起,系统开始正式在保护模式下运行。

1.7K20

linux内核升级图文攻略 转

一、Linux内核概览 Linux是一个一体化内核(monolithic kernel)系统。 设备驱动程序可以完全访问硬件。...发行版 Linux内核的发展过程中,我们还不得不提一下各种Linux发行版的作用,因为正是它们推动了Linux的应用, 从而也让更多的人开始关注Linux。...Linux的发行版本其实就是Linux核心再加上外围的实用程序组成的一个大软件包而已。...Linux的 引导程序由汇编代码文件arch/i386/boot/bootsect.S生成, 它利用对BIOS功能的调用将 arch/i386/boot/下的setup.S文件和内核映象加载到内存。...由于bzImage超出了640K这一限制,所以linux设计了一个 bootsect_helper子程序(定义在arch/i386/boot/setup.S中), 引导程序通过循环调用bootsect_helper

3.1K51
领券