当前位置: 首页 > article >正文

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

Linux 0.11 启动探案录BIOS 中断如何为内核铺路当按下电源键的那一刻一台 x86 计算机的启动过程就像一场精心策划的接力赛。BIOS 完成自检后将接力棒交给 bootsect.s再由 setup.s 接手——这个不到 512 字节的汇编程序却在 Linux 0.11 启动过程中扮演着关键情报官的角色。今天我们就化身计算机侦探解密 setup.s 中那些神秘的 BIOS 中断调用看看它们究竟为即将登场的内核准备了哪些关键见面礼。1. 犯罪现场实模式下的硬件侦察在保护模式这个高级社会到来之前内核必须依靠实模式下 BIOS 提供的线人网络来收集硬件情报。setup.s 开场就是一连串的 BIOS 中断调用每个中断都像一位特定领域的线人提供着不可或缺的硬件信息。1.1 光标位置控制台的第一个坐标mov ah,#0x03 ; 读取光标位置功能号 xor bh,bh ; 页号清零 int 0x10 ; 调用BIOS显示中断 mov [0],dx ; 将结果存入0x90000这段看似简单的代码隐藏着几个关键细节int 0x10是 BIOS 的显示服务中断当 AH0x03 时专门用于获取光标位置返回的 DX 寄存器中DH 存储行号DL 存储列号典型的 80x25 文本模式存储位置 0x90000DS:0000将在后续控制台初始化时被内核读取提示在实模式下[0] 表示 DS:0000而 setup.s 开始时已将 DS 设为 0x9000因此实际物理地址是 0x90000。1.2 内存探测规划未来的疆域mov ah,#0x88 ; 获取扩展内存大小 int 0x15 ; 调用BIOS内存服务 mov [2],ax ; 结果存入0x90002这个调用返回的是 1MB 以上的扩展内存大小单位 KB存储在 AX 寄存器中。值得注意的是该值将被用于初始化内存管理数据结构在早期的 80286 系统上最大只能检测到 16MB 内存结果存储在 0x90002 处与光标位置相邻内存布局在此时开始成形内存地址存储内容用途0x90000光标位置DX控制台初始化0x90002扩展内存大小AX内存管理初始化2. 硬件档案建立设备数据库除了基本的内存和显示信息setup.s 还收集了各类硬件设备的详细参数这些数据将成为内核驱动初始化的基础。2.1 显示系统显卡的身份证明mov ah,#0x0f ; 获取当前显示模式 int 0x10 mov [4],bx ; BH显示页号存入0x90004 mov [6],ax ; AL显示模式,AH字符列数存入0x90006后续还有更详细的 EGA/VGA 检测mov ah,#0x12 ; 获取EGA/VGA信息 mov bl,#0x10 int 0x10 mov [8],ax ; 视频参数存入0x90008 mov [10],bx ; 视频配置存入0x9000A mov [12],cx ; 视频配置存入0x9000C这些信息对内核至关重要确定文本模式还是图形模式了解屏幕分辨率和色彩深度为帧缓冲区分配正确的内存区域2.2 存储设备硬盘的解剖图最复杂的要数硬盘参数获取; 获取第一硬盘参数表 mov ax,#0x0000 mov ds,ax lds si,[4*0x41] ; 从中断向量表获取硬盘1参数表地址 mov ax,#INITSEG mov es,ax mov di,#0x0080 mov cx,#0x10 rep movsb ; 复制16字节到0x90080同样方法获取第二硬盘参数从中断向量 0x46 处。这些参数包括柱面数、磁头数、每磁道扇区数写预补偿、磁头着陆区控制字节等这些精确的物理参数是后续磁盘驱动初始化的基础没有它们内核甚至无法找到自己的根文件系统。3. 情报处理为内核搬家做准备收集完所有硬件信息后setup.s 开始执行一项关键任务将系统代码从 0x10000 移动到 0x0000。这是一次精妙的内存搬运操作。3.1 关闭中断行动前的静默cli ; 禁止中断这个简单的指令却至关重要移动内存时会覆盖 BIOS 的中断向量表任何中断都会导致不可预测的结果直到新的保护模式中断描述符表IDT就位前中断必须保持关闭3.2 内存搬运系统代码的迁徙mov ax,#0x0000 cld ; 清除方向标志确保正向移动 do_move: mov es,ax ; 目标段地址 add ax,#0x1000 cmp ax,#0x9000 jz end_move mov ds,ax ; 源段地址 sub di,di ; 目标偏移清零 sub si,si ; 源偏移清零 mov cx,#0x8000 rep movsw ; 移动64KB数据 jmp do_move end_move:这段代码实现了将 0x10000-0x8ffff 的内容移动到 0x0000-0x7ffff每次移动 64KB0x8000 字使用 rep movsw 高效搬运数据移动后的内存布局将变成------------------ 0x00000 | 系统代码 | | (原在0x10000) | ------------------ 0x80000 | 空闲 | ------------------ 0x90000 | 硬件参数存储区 | ------------------ 0x90200 | setup.s代码 | ------------------4. 交接准备保护模式的入场券在完成所有准备工作后setup.s 最后也是最重要的任务是为进入保护模式铺路。这包括4.1 加载全局描述符表GDTend_move: lidt idt_48 ; 加载空IDT lgdt gdt_48 ; 加载GDTGDT 是保护模式的基石定义了内存段的权限和属性。Linux 0.11 的初始 GDT 包含空描述符必须代码段描述符基址 0界限 16MB数据段描述符基址 0界限 16MB4.2 开启保护模式的最后步骤打开 A20 地址线突破 1MB 内存限制设置 CR0 寄存器的 PE 位切换到保护模式执行远跳转刷新指令队列mov ax,#0x0001 ; 保护模式PE位 lmsw ax ; 加载机器状态字 jmpi 0,8 ; 跳转到保护模式代码段这个跳转中的 8 是代码段选择子指向 GDT 中的代码段描述符。从此CPU 进入 32 位保护模式内核正式接管系统。回顾整个 setup.s 的工作它就像一位尽职的管家在主人内核到来前调查清楚所有硬件情况内存、显示、磁盘把系统文件搬到合适的位置准备好保护模式所需的所有文档GDT、IDT最后优雅地交出控制权没有这些精心准备的见面礼内核将如同盲人摸象无法有效管理系统资源。这也是为什么三十多年后我们仍然要研究这些启动代码——它们展现了计算机从物理硬件到智能系统的神奇一跃。

相关文章:

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

Linux 0.11 启动探案录:BIOS 中断如何为内核铺路 当按下电源键的那一刻,一台 x86 计算机的启动过程就像一场精心策划的接力赛。BIOS 完成自检后,将接力棒交给 bootsect.s,再由 setup.s 接手——这个不到 512 字节的汇编程序&#…...

飞控DIY避坑:详解Aocoda F405V2的SPI、UART资源分配与冲突预防(Betaflight/INAV固件)

飞控DIY避坑:详解Aocoda F405V2的SPI、UART资源分配与冲突预防(Betaflight/INAV固件) 当你拿到一块Aocoda F405V2飞控板时,第一眼可能会被密密麻麻的引脚标注吓到。这块基于STM32F405RGT6或AT32F435RGT7芯片的飞控,虽…...

支付集成工具ovra-pay解析:适配器模式与统一接口设计实践

1. 项目概述:一个面向开发者的支付集成解决方案最近在做一个需要接入支付功能的小项目,找了一圈开源方案,发现了一个挺有意思的库——Ovra-Labs/ovra-pay。乍一看这个名字,可能会觉得有点陌生,但深入研究后&#xff0c…...

如何通过SQL高效处理关联子查询的更新_使用JOIN替代子查询

JOIN 是更直接的解法:MySQL 用 UPDATE JOIN 语法,PostgreSQL 用 UPDATE FROM 语法,二者均能避免子查询重复执行、提升索引利用率,性能提升可达5–50倍,但需确保关联字段有索引并验证执行计划。UPDATE 里用子查询更新太…...

别再死记硬背QKV了!用Python手写一个Self-Attention,带你从几何视角彻底搞懂

从几何视角手写Self-Attention:用Python和NumPy拆解Transformer核心机制 在深度学习领域,Transformer架构已经彻底改变了自然语言处理的游戏规则。而在这个架构中,Self-Attention机制无疑是最闪耀的明星。但令人沮丧的是,大多数教…...

Java 21 LTS 版本概述

Java 21 LTS 版本概述 虚拟线程(Virtual Threads) Java 21 进一步强化了虚拟线程这一特性。虚拟线程是轻量级的线程实现,与传统的操作系统线程相比,它们具有更低的开销。在传统的多线程编程中,每个线程都对应一个操作系…...

终极指南:3分钟自动化解决iPhone USB网络共享Windows驱动问题

终极指南:3分钟自动化解决iPhone USB网络共享Windows驱动问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com…...

从汽车CAN报文到网络数据包:一文搞懂Checksum校验的通用原理与代码实战

从汽车CAN报文到网络数据包:Checksum校验的通用原理与跨领域实现 在数据通信的世界里,信息的准确传输如同精密机械中的齿轮咬合,任何一个比特的错误都可能导致整个系统运转失常。无论是飞驰在高速公路上的智能汽车,还是穿梭于全球…...

Unity UI动效新思路:用TextMeshPro的Sprite Asset制作动态表情和图标文字(含在线工具推荐)

Unity UI动效新思路:用TextMeshPro的Sprite Asset制作动态表情和图标文字 在游戏UI设计中,动态表情和图标文字是提升用户体验的关键细节。传统的实现方式往往需要依赖多个Image组件和Animator控制器,不仅增加场景复杂度,还会影响…...

LaserGRBL:从图片到激光雕刻,3步掌握开源激光控制软件

LaserGRBL:从图片到激光雕刻,3步掌握开源激光控制软件 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL 想要将创意转化为激光雕刻作品,却苦于找不到合适的控制软件&…...

船舶齿轮箱退化特征提取与寿命预测【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 如需沟通交流,扫描文章底部二维码。(1)多层次改进多样性熵振动特征提取:针对船舶齿轮箱…...

新用户注册边界AICHAT,这个邀请码31F77E别忘了填!附网页版与客户端完整安装配置指南

边界AICHAT新手完全指南:从注册到高效使用的全流程解析 第一次接触边界AICHAT这类AI工具时,很多用户会被其丰富的功能所吸引,却又在注册和初步配置阶段感到迷茫。本文将手把手带你完成从注册到客户端配置的全过程,特别针对那些刚接…...

LSTM在时序预测中的核心原理与工业实践

1. 长短期记忆网络在序列预测中的核心价值 长短期记忆网络(LSTM)作为循环神经网络的特殊变体,在时间序列预测领域已经证明了其独特优势。与传统RNN相比,LSTM通过精心设计的门控机制,有效解决了长期依赖问题。我在多个工…...

用STM32的TIM3输入捕获功能,5分钟搞定PWM频率和占空比测量(附OLED显示代码)

STM32实战:5分钟实现PWM频率与占空比测量系统 最近在调试电机控制项目时,经常需要快速验证PWM信号的参数准确性。传统示波器虽然精确但携带不便,而基于STM32的简易测量方案则完美解决了这个问题。本文将分享如何利用STM32F103的TIM3定时器&a…...

MySQL查询之分页查询

语法格式: SELECT 字段列表 FROM 表 LIMIT 偏移量,每页条数;注意: 1. 偏移量从默认从0开始,偏移量(查询页-1) * 每页条数; 2. 如果查询的是第一页,那么偏移量可以省略,直接写为 LIMI…...

STM32-GPRS模块连接系统主站

目录: 一、GPRS基础讲解(GSM/CDMA/GPRS介绍) 1、通信专业术语 2、GPRS网络结构 3、GPRS工作原理 4、GPRS协议模型 5、GPRS连接过程详解 6、GPRS的应用---TCP/IP/PPP 7、GPRS相关AT指令集 二、GPRS或CDMA模块与网络连接方式 三、系统主站访问GPRS/CDMA网络…...

AirPodsDesktop:为Windows用户解锁苹果耳机完整功能的跨平台解决方案

AirPodsDesktop:为Windows用户解锁苹果耳机完整功能的跨平台解决方案 【免费下载链接】AirPodsDesktop ☄️ AirPods desktop user experience enhancement program, for Windows and Linux (WIP) 项目地址: https://gitcode.com/gh_mirrors/ai/AirPodsDesktop …...

Anaconda / Miniconda安装方法

Miniconda安装方法 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh 一直按回车,最后按yes(不要更改默认的安装目录, 否则后面可能会有错误) 然后新开一个bash页面就好…...

LaserGRBL:开源激光雕刻控制软件的完整入门指南

LaserGRBL:开源激光雕刻控制软件的完整入门指南 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL 在激光雕刻和切割领域,找到一款功能强大且易于使用的控制软件至关重要。LaserG…...

终极指南:使用SMU调试工具解锁AMD Ryzen处理器的隐藏性能

终极指南:使用SMU调试工具解锁AMD Ryzen处理器的隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…...

7-Zip终极指南:免费开源压缩工具的高效使用技巧

7-Zip终极指南:免费开源压缩工具的高效使用技巧 【免费下载链接】7z 7-Zip Official Chinese Simplified Repository (Homepage and 7z Extra package) 项目地址: https://gitcode.com/gh_mirrors/7z1/7z 想要节省硬盘空间、快速压缩文件,又不想为…...

Windows 11安卓应用运行终极指南:开发者深度解析WSA技术

Windows 11安卓应用运行终极指南:开发者深度解析WSA技术 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 想在Windows 11上原生运行Android应用吗…...

Cursor估值500亿SpaceX战略期权-AI编程工具的资本逻辑

Cursor估值500亿、SpaceX战略期权——AI编程工具的资本逻辑到底在押注什么一个让人停下来想想的数字 2026年4月18日,TechCrunch的一篇报道在技术圈迅速扩散:AI编程工具Cursor正在洽谈超过20亿美元的新一轮融资,投后估值将达到500亿美元&#…...

别再死记硬背公式了!用Fluent组分输运模型搞定湿空气湿度场(附详细设置截图)

湿空气模拟实战:用Fluent组分输运模型精准预测湿度场的7个关键步骤 在电子散热系统设计或空调风道优化中,工程师常需要预测密闭空间内的湿度分布——比如服务器机柜的结露风险评估,或是数据中心冷却通道的除湿效率分析。传统的手工计算只能给…...

别再死记硬背了!拆解upload-labs:用开发者思维理解文件上传漏洞的底层逻辑

从源码审计到防御设计:文件上传漏洞的工程化思考 当你面对一个文件上传功能时,脑海中浮现的第一个念头是什么?是机械地测试各种绕过技巧,还是思考这段代码背后隐藏的设计缺陷?upload-labs靶场之所以成为Web安全学习的经…...

不会写代码也能做项目?手把手教你用 Vibe Coding 快速落地 AI 项目

导读: 你是否曾经有过一个很棒的项目想法,却因为"不会写代码"而迟迟不敢开始?本文将通过一个真实案例——在 NanaDraw 中集成 MinerU PDF 解析功能,带你理解 Vibe Coding 这种全新的 AI 协作开发方式,让你从…...

Sunshine游戏串流实战:如何突破硬件限制实现全平台低延迟游戏体验?

Sunshine游戏串流实战:如何突破硬件限制实现全平台低延迟游戏体验? 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine作为一款自托管的游戏串流服务器…...

DouyinLiveRecorder深度剖析:PandaTV直播录制技术方案与性能优化

DouyinLiveRecorder深度剖析:PandaTV直播录制技术方案与性能优化 【免费下载链接】DouyinLiveRecorder 可循环值守和多人录制的直播录制软件,支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、popkontv、twitcast…...

终极指南:如何使用HSTracker在macOS上智能追踪炉石传说套牌

终极指南:如何使用HSTracker在macOS上智能追踪炉石传说套牌 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 如果你是一位macOS上的《炉石传说》玩家&#xf…...

ADI DSP仿真器接口变迁史:从14PIN到10PIN,老玩家教你如何用转接头搞定新老开发板

ADI DSP仿真器接口演进:从14PIN到10PIN的技术逻辑与实战指南 在嵌入式开发领域,JTAG接口作为调试的"生命线",其设计变迁往往折射出芯片技术的演进轨迹。ADI(Analog Devices Inc.)DSP产品的JTAG接口从经典的1…...