首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
shell
email
vba
input
eval
expression
sum
flutter
php8
copy
dagger
hash
dockerfile
web3
express
default
include
integer
cSharp
timezone
yaml
header
export
search
python3
metadata
dll
ip
typescript
jsp
rsa
testing
tags
merge
request
future
heap
keyword
perl
bash
httpclient
string
md5
actionscrip
object
join
usb
iostream
window
const
lua
blob
spring
match
uml
int
bitmap
bytecode
fetch
python2
emoji
install
controller
command
chat
php
cookie
java
regex
post
hook
heatmap
main
case
settings
utf-8
char
timestamp
process
当前位置:
开发笔记
>
编程语言
> 正文
《linux内核完全剖析》第六章引导启动程序笔记
作者:小文662502914775 | 来源:互联网 | 2023-10-12 12:53
1、简介引导启动程序部分主要在boot子目录下,该目录包含三个汇编代码文件bootsect.S、head.S和setup.S。由于目前没有对汇编进行系统的学习
1、简介
引导启动程序部分主要在boot/子目录下,该目录包含三个汇编代码文件bootsect.S、head.S和setup.S。由于目前没有对汇编进行系统的学习,所以本文不对代码细节实现做讲解,主要描述代码的功能。
2、操作系统启动执行流程
PC电源打开后,80x86结构CPU进入实模式,从地址0xFFFF0执行程序代码,这个地址通常是BIOS中的地址。随后BIOS开始执行系统检测,在物理地址0处开始初始化中断向量,然后BIOS将启动设备的第一个扇区读入内存绝对地址0x7C00处,并跳转到此处。
从系统加电起所执行程序的顺序
3、bootsect.S程序功能描述
bootsect.S代码是磁盘引导块程序,驻留在磁盘的第一个扇区中,bootsect代码执行期间,它会将自己移动到内存绝对地址0x90000开始处并继续执行。该程序把从磁盘的第二个扇区开始的四个扇区的setup模块(setup.S编译而成)加载到内存紧接着bootsect后面位置处(0x90200),然后利用BIOS中断0x13取磁盘参数表中当前启动引导盘的参数,在屏幕上显示“Loading system...”字符串。再把磁盘上setup模块后面的system模块加载到内存0x10000开始的地方。随后确定根文件系统的设备号,如果没有指定,则根据所保存的引导盘的每磁道扇区数判别出盘的类型和种类并保存设备号于root_dev(引导块的508地址处)中最后长跳转到setup程序开始处(0x90200)去执行setup程序。磁盘上,引导块、setup模块和system模块的扇区位置如下。
Linux 0.12 内核在 1.44MB 磁盘上的分布情况
4、setup.S程序功能描述
setup是一个操作系统加载程序,它利用BIOS中断读取机器系统数据并把数据保存到0x90000开始的位置(覆盖了bootsect程序的位置)。然后setup程序把system模块从0x10000~0x8ffff整块下移到内存绝对地址0x00000处。接下来加载中断描述符标寄存器(idtr)和全局描述符表寄存器(gdtr),开启A20地址线,重新设置两个中断控制芯片8259A,把硬件中断号重新设置为0x20~0x2f。最后设置cpu的控制寄存器CR0,进入32位保护模式运行,并跳转到位于system模块最前面部分的head.s程序继续运行。
5、head.s程序功能描述
head.s程序在被编译生成目标文件后会与内核其他程序一起被链接成system模块,位于system模块的最前面开始部分。从这里开始,内核完全都是在保护模式下运行了。这段程序位于内存绝对地址0处开始的地方。head.s程序功能单一,首先加载各个数据段寄存器,重新设置中断描述符表idt,共256项,并使各个表项都指向一个只报错误的哑中断子程序ignore_int。然后重新设置全局段描述符表gdt,只是修改gdt的段限长。接着使用物理地址0与1MB开始处的字节内容相比较的方法,检测A20地址线是否开启。接着设置管理内存的分页处理机制,把页目录表放在绝对物理地址0开始处,紧随后面放置共可寻址16MB内存的4个页表并设置它们的表项。最后head.s程序利用返回指令把预先放置在堆栈中的/init/main.c程序的入口地址弹出,去运行main()程序。
linux
文件
x86
cpu
ios
编译
int
main
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
ip
网络链路质量监控:Smokeping部署与配置
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
ip
CMake跨平台开发实践
本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ...
[详细]
蜡笔小新 2024-12-27 14:43:56
ip
Linux 网卡绑定的七种工作模式详解
本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ...
[详细]
蜡笔小新 2024-12-27 10:18:13
hash
从 .NET 转 Java 的自学之路:IO 流基础篇
本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ...
[详细]
蜡笔小新 2024-12-26 17:37:25
hash
Ubuntu系统中下载64位Intel版本的指南
本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ...
[详细]
蜡笔小新 2024-12-26 11:24:01
ip
基于KVM的SRIOV直通配置及性能测试
SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ...
[详细]
蜡笔小新 2024-12-25 19:26:39
ip
深入探讨CPU虚拟化与KVM内存管理
本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ...
[详细]
蜡笔小新 2024-12-25 19:15:51
ip
编写有趣的VBScript恶作剧脚本
本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ...
[详细]
蜡笔小新 2024-12-28 09:46:23
ip
Python配置文件读写指南
本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ...
[详细]
蜡笔小新 2024-12-28 08:39:55
ip
Go语言基础:Hello World 实践
本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ...
[详细]
蜡笔小新 2024-12-27 21:29:35
ip
Python 的 10 个开发技巧!太实用了
1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ...
[详细]
蜡笔小新 2024-12-27 18:36:54
export
CentOS7源码编译安装MySQL5.6
2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ...
[详细]
蜡笔小新 2024-12-27 17:49:56
ip
Dockerfile 编写与 Docker 网络配置详解
本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ...
[详细]
蜡笔小新 2024-12-27 17:31:41
include
Linux设备驱动程序:异步时间操作与调度机制
本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ...
[详细]
蜡笔小新 2024-12-26 08:55:03
ip
选择适合生产环境的Docker存储驱动
本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ...
[详细]
蜡笔小新 2024-12-24 11:16:45
小文662502914775
这个家伙很懒,什么也没留下!
Tags | 热门标签
shell
email
vba
input
eval
expression
sum
flutter
php8
copy
dagger
hash
dockerfile
web3
express
default
include
integer
cSharp
timezone
yaml
header
export
search
python3
metadata
dll
ip
typescript
jsp
RankList | 热门文章
1
小批量、多品种生产模式如何快速响应客户交期
2
经济学的几个基本问题
3
浅谈操作系统概念,作用,特性及分类
4
即刻报名|飞桨黑客马拉松第三期等你挑战
5
楼层平面放线及标高实测记录_刚到工地不会测量放线?方法和技巧都在这里!(纯干货)...
6
MySQL启动和封闭服务命令_mysql
7
请教各位前辈们关于分布式锁的应用场景
8
正则表达式可以作为对象中的属性名吗?
9
finereport_FineReport:2.单元格值呈递增或递减趋势,且首尾(首尾单元格间隔六个以内)增幅或降幅大于10%的背景色标红
10
数据库和缓存的双写的一致性
11
win10企业版ltsb好用么?:win10企业版英文
12
【国际资讯】数百万道琼斯消费者记录遭暴露
13
找米网2017域名投资经验分享(精华总结)
14
前端项目如何性能优化
15
公司引入人脸识别打卡 还能动“翘班”的小心思吗?
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有