0.11之路(二):加载setup

理解linux0.11加载过程 阅读linux0.11源码Boot部分很多次了,每次看着看着就晕了,主要是因为对X86芯片和汇编不熟悉;虽然赵炯博士的>讲的非常详细,网上资料也很多,但毕竟不是自己的东西,只有用自己的思维理解了才会记忆深刻。我就试着用自己的思路,也小结一下。 0. 加载步骤: Bois->bootsect.s->setup.s->(head.s->main.c)。(head.s->main.c合为system模 阅读详情

BIOS将bootsect这个引导程序载入内存后,接下来就要靠bootsect来加载第二批和第三批程序。

bootsect首先要做的工作就是规划内存。
实模式下,寻址最大范围是1MB(0xFFFFF)。关于setup程序,在bootsect.s中要指定setup程序的扇区数和被加载到的位置(0x90200),此外还要指定启动扇区(也就是bootsect.s)被BIOS加载的位置(0x07c00)和将要移动到的新位置(0x90000),内核被加载的位置(0x10000)和内核的末尾位置,根文件系统设备号(ROOT_DEV=0x306,第二个硬盘第一个分区)。
这就是内存规划,可以确保互不重叠。

bootsect的第一步是将自身从0x07c00的位置复制到0x90000的位置。
第二步就是将setup程序加载至内存中。

加载bootsect,BIOS需要 int 0x19 这个中断向量。加载setup,则要借助BIOS提供的 int 0x13 中断向量所指向的中断服务程序——磁盘服务程序。二者不同的是, int 0x19指向的启动加载服务程序是BIOS执行的,而 int 0x13指向的磁盘服务程序是linux自身的启动代码bootsect执行的。前者只负责把第一扇区的代码加载到0x07C00位置,而后者的中断服务程序则根据设计者的意图,把指定扇区的代码加载到内存的指定位置。所以对于 int 0x13 来说,要事先将指定的扇区、加载的内存位置等信息传递给中断服务程序。

复制后的bootsect的起始位置是0x90000,占用512B,因此,0x90200紧挨着bootsect的尾部,所以bootsect和setup是连在一起的。setup程序占据四个扇区,这样加上bootsect,一共加载了五个扇区。bootsect代码执行完毕后就开始执行setup。

Linux 0.11 代码解读(二)setup.s Linux 0.11setup程序解读 阅读详情

相关推荐

bootsect.s 解读——Linux-0.11 剖析笔记(二)

题目:bootsect.s 解读——Linux-0.11 剖析笔记(二) 文章目录一些符号常量老式Linux设备号的命名规则bootsect 把自己搬运到 0x90000,并跳转加载 setup 模块到 0x90200INT 13H AH=02H:读扇区INT 13H AH=00H:磁盘控制器复位获得磁盘驱动器参数(主要是每磁道的扇区数)INT 13H AH=08H:读取驱动器参数打印 “Loading system ...”INT 10H AH=03H:获取光标位置和形状INT 10H AH=13H:写字

车子(chezi) 2895

int 0x13 中断理解

BIOS中断INT 0x13中, ah=0x02,即为读磁盘扇区到内存,利用这二号服务即可读入setup模块。 调用此功能将从磁盘上把一个或更多的扇区内容读进存贮器。因为这是一个 低级功能,在一个操作中读取的全部扇区必须在同一条磁道上(磁头号和磁道号 相同)。BIOS不能自动地从一条磁道末尾切换到另一条磁道开始,因此用户必须 把跨多条磁道的读操作分为若干条单磁道读操作。 入口参数:

farmwang的专栏 1万+

Linux内核0.11 setup文件说明

一、总体功能介绍 这是关于Linux-kernel-0.11中boot文件夹下setup.s源文件的实现功能的总结说明。 setup.s是一个操作系统加载程序,它的主要功能是利用BIOS中断读取机器系统数据,并将这些数据保存到0x90000开始的位置(覆盖了原先的bootsect.s程序),所取得的参数和保存在内存中的位置如下所示,这些参数将被内核中相关程序使用,如字符设备驱动程序集中的con...

一 809

React本机列表:通过滚动加载更多

This piece demonstrates how to load more items in a FlatList component as you scroll down, as well as how to persist lists on device storage, and keep those lists in sync as more items are loaded. 这篇文...

weixin_26750481的博客 1434

从零开始实现balloon操作系统(0x02) 加载setup模块

距离上一次发操作系统文章已经度过了好几个月,这几个月里我在忙于一个解释器项目,现在项目已经完全进入维护阶段,所以就有了空余时间继续啃操作系统。先看看解释器最终做出来的效果: 好了题外话到此为止。0x01中我们实现了一个最小操作系统,使用0x10中断输出了一个句子。当时那篇文章开篇先把内存分布讲了一通(我现在看都觉得昏),可能有些劝退,这次开篇我先把优化的代码贴这,我们接下来基于此进行修改。 # ballon system bootsect.s # copyright @ValKmjolnir # 2020

ValK_leviathan的博客 392

【Linux0.11代码分析】03 之 setup.s 启动流程

【Linux0.11代码分析】03 之 setup.s 启动流程

|~~~热爱生活、努力学习的小伙汁~~~| 1415

《Linux0.11源码解读》理解(二) 加载setup、加载system

现在CPU开始执行bootsect,它的作用是把第二部分、第三部分程序陆续加载到内存中。而把放到合理的内存位置需要先对内存进行规划。根据上一节,boostsect当前所在内存位置是0x07c0,大小为512byte,现在要将其挪动到内存的。除此以外,还要将位于硬盘上的4个(SETUPLEN)扇区的setup程序加载到内存的;最后要将system程序(内核)加载到内存的,并指定了其末尾位置(ENDSEG)。

brahmsjiang的专栏 981

2022年TI杯模拟电⼦系统设计专题邀请赛——李萨如图形演示装置

本次装置主要是对输入的正弦信号进行频率变换,并将原输入正弦信号作为 X 轴信号、变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。采用 EK-TM4C123GXL 板卡作为主控;频率变换采用“锁向环+计数器”实现 1-5 倍频的频率变换控制;李萨如图形采用两个 AD通道采集原输入的正弦信号作为 X 轴信号和频率变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。

qq_45890466的博客 7771

Linux-0.11 boot目录setup.s详解

Linux-0.11 boot目录setup.s详解

小x的博客 2964

STM32F103C8T6+HX711实战:从零打造智能体重秤(附OLED显示与语音播报)

本文详细介绍了基于STM32F103C8T6微控制器和HX711称重模块,从零构建智能体重秤的完整实战教程。内容涵盖硬件选型、系统架构、驱动编写、数据滤波校准算法,并实现了OLED显示与语音播报功能。该项目是嵌入式学习的综合性实践,尤其适合作为毕业设计课题,帮助开发者掌握传感器应用、数据处理及人机交互等核心技能。

weixin_28285943的博客 520

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

985小水博的摸鱼日常 463

深入Linux 0.11引导启动:从实模式到保护模式的内核加载全解析

操作系统引导启动是计算机加电后,由BIOS固件执行硬件自检,并加载磁盘首个扇区(主引导记录MBR)到内存指定地址(如0x7C00)开始执行的过程。这一过程的核心在于理解x86 CPU的实模式与保护模式切换原理。在实模式下,CPU只能访问1MB内存,通过段寄存器进行寻址;而切换到保护模式后,CPU借助全局描述符表(GDT)实现内存保护与更大寻址空间,这是现代操作系统运行的基础。其技术价值在于实现了操作系统内核从存储设备到内存的可靠加载与初始化,为后续虚拟内存管理、多任务调度等高级功能奠定硬件基础。应用场景广泛

cong84596496的博客 380

LVGL 蜂巢气泡菜单(Hex Menu)

h。

摸鱼专家 178

bootsec加载内核system及SETUP初始执行

bootsec加载内核system及SETUP初始执行 目录 教学视频 bootsec加载内核system程序及SETUP程序初始执行 1. 载入SYSTEM代码 2. 确认根文件系统设备号 3. 跳转到 SETUP 程序 5. 执行 SETUP 程序 直达底部 教学视频 1. 载入SYSTEM代码 第二批代码 setup 已经载入内存, 现在要加载第三批代码 system 。 仍然使...

六六哥的博客 652

DiffusionDriveV2 (1) : 端到端自动驾驶中受强化学习约束的截断扩散建模

DiffusionDriveV2:强化学习约束的截断扩散模型在端到端自动驾驶中的应用 本文针对端到端自动驾驶中扩散模型面临的模式崩溃问题,提出DiffusionDriveV2框架。该方法通过引入强化学习约束,解决了DiffusionDrive依赖模仿学习导致的多样性与持续高质量之间的困境。主要创新包括: 采用尺度自适应乘法噪声促进广泛探索 提出锚点内GRPO管理单个锚点样本间的优势估计 设计锚点间截断GRPO整合全局视角,避免不同驾驶意图间的不当比较 实验表明,该方法在NAVSIM基准测试中达到最先进水平(

@bangbang的博客 382

[QMT量化交易小白入门]-三十七、QMT中如何使用类似于通达信中的VBA函数(量化python代码解析)

这段代码主要围绕着在QMT环境中实现类似通达信VBA函数的功能展开,核心功能是基于RSI指标来判断股票的买卖时机,并根据持仓情况进行相应的交易操作。class G():passg = G()这里定义了一个空类G,并创建了该类的实例g。这个实例g将作为全局变量来存储一些在整个程序运行过程中需要共享的数据,例如除复权类型、股票代码、目标数量等。1、使用VBA开发策略时,参数固化的问题会带来一些限制,比如无法修改MA函数的周期参数,只能使用固定周期。

木头大左的博客 1700

linux0.11 - bootsect.s 第二阶段(加载setup)

bootsect在将自身移动后,接着加载setup模块到内存地址0x90200处

happytree001的博客 223

PyTorch深度学习实战(36)——Pix2Pix详解与实现

Pix2Pix 是基于生成对抗网络的图像转换框架,能够将输入图像转换为与之对应的输出图像,能够广泛用于图像到图像转换的任务,如风格转换、图像修复、语义标签到图像的转换等。Pix2Pix 的核心思想是通过对抗训练将输入图像和目标输出图像进行配对,使生成网络可以学习到输入图像到输出图像的映射关系。在本节中,将学习使用 Pix2Pix 根据给定轮廓生成图像。

盼小辉丶的博客 1万+

setup.s 解读——Linux-0.11 剖析笔记(三)

题目:setup.s 解读——Linux-0.11 剖析笔记(三) 更新记录 版本 时间 修订内容 1.0 2018-4-14 增加了“获取显示模式”这一节,AL取值的表格 2.0 2020-6-27 补充了一些内容 本文由 setup.s 分析—— Linux-0.11 学习笔记(二) 修改而来。 文章目录定义符号常量获取一些参数保存在 0x90000 处保存光标的位置获取从 1M 处开始的扩展内存大小获取显示模式检查显示方式(EGA/VGA)并获取参数复制硬盘参数表复制 HD0

车子(chezi) 2598

多物理场光学仿真软件:COMSOL_(10).激光器与谐振腔仿真

定义Nd:YAG晶体的材料属性% 折射率% 吸收系数% 发射截面% 定义光泵浦源% 泵浦光波长% 泵浦光强度% 泵浦光方向% 定义全反射镜% 选择边界% 完美电导体边界条件% 定义部分反射镜% 选择边界% 反射率边界条件% 反射率通过 COMSOL 对激光器和光学谐振腔进行仿真,可以全面评估激光器的性能,包括输出功率、效率、稳定性和模式选择等。这些仿真结果为激光器的设计和优化提供了重要的参考依据。

kkchenjj的博客 1649

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

阅读分析Linux0.11 /boot/setup.s

每次开机,启动操作系统时,都要获取硬件的参数(setup.s的第一部分),获取参数是通过中断,处理中断的中断例程是BIOS提供的,中断类型码和中断例程的映射要通过中断向量表。所以bootsect.s中只能先加载到0X1000:0X0000处,然后setup.s再移动到0X0000:0X0000处。参数包括:光标的位置、内存的大小、屏幕显示的参数、硬盘的参数等。将加载到内存0X1000:0X0000处的系统核心模块System,移动到0地址(0X0000:0X0000)处。保护模式不是一两句话能说清的。

yyhshm520的博客 788

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

从linux0.11学习linux内核设计之程序加载

作者:朱克锋 转载请注明出处:http://blog.csdn.net/linux_zkf   从这篇文章开始我将正式开始分析学习linux,大家一起努力。     Linux0.11的启动部分在boot目录中,是汇编语言描述的,包括bootsect.s、setup.s、head.s三个文件     大家都知道,所谓的操作系统就是一个软件而已,计算机的运行离不开这个软件,在计算机启动之

linux_zkf的专栏 879

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Linux-0.11 boot目录bootsect.s详解

Linux-0.11 boot目录bootsect.s详解

小x的博客 3358

[Linux 0.11源码]操作系统加载过程

@[TO操作系统加载过程 概述计算机加电启动,CPU进入实模式,此时CS=0xFFFF,IP=0x0000,从地址0xFFFF0地址处开始执行代码,这个位置的代码是ROM-BIOS,计算机进行硬件的自检,并从0x0000位置开始初始化中断向量。这里放置了中断向量使得system不能一开始就放置到0x0000位置,所以system一开始放置在0x10000。之后将磁盘的第一个扇区(512字节),即bootsect.s读入到内存0x7C00处,然后跳转到这个位置执行。执行过程为: setup利用ROM BIOS

m0_49236123的博客 1785

《Linux0.11源码解读》理解(三) 执行setup

上一节的最后jmpi把cs:ip设置为0x9020:0000。于是CPU开始,它的作用是。

brahmsjiang的专栏 589

Linux 0.11 源码探秘:setup.s 里那些 BIOS 中断调用,到底在给内核准备什么‘见面礼’?

本文深入解析了Linux 0.11启动过程中setup.s文件如何通过BIOS中断调用收集硬件信息,为内核初始化提供关键数据。详细剖析了int 0x10、int 0x15等中断调用的工作原理,以及0x90000内存区的数据结构设计,揭示了早期Linux系统与硬件交互的精妙机制。

weixin_33709590的博客 558
上一篇: 0.11之路(一):BIOS引导过程
下一篇: 0.11之路(三):system模块
刘秋杉
博客等级 码龄14年 1233粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值