首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
less
timezone
usb
case
string
require
export
post
range
runtime
function
search
sum
triggers
controller
random
input
javascript
js
golang
testing
metadata
node.js
plugins
include
c语言
email
window
typescript
regex
cmd
replace
int
lua
python3
php5
keyword
foreach
bash
get
vba
bitmap
list
char
utf-8
io
match
future
cSharp
substring
byte
client
main
default
timestamp
copy
install
web3
integer
schema
hashset
erlang
const
perl
cookie
frameworks
format
tags
hashtable
php
process
jsp
dockerfile
scala
python2
jar
shell
fetch
hash
当前位置:
开发笔记
>
编程语言
> 正文
《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
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
js
如何高效学习鸿蒙操作系统:开发者指南
本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ...
[详细]
蜡笔小新 2024-11-23 19:22:14
include
Linux线程中私有数据的管理与保护
本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ...
[详细]
蜡笔小新 2024-11-23 13:45:37
include
Ubuntu 14.04 环境下搭建 Caffe(仅限 CPU)
本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ...
[详细]
蜡笔小新 2024-11-22 16:43:30
case
探究64位Linux系统下32位程序的兼容性问题——以OpenVPN为例
本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ...
[详细]
蜡笔小新 2024-11-20 16:34:58
metadata
对象存储与块存储、文件存储等对比
看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ...
[详细]
蜡笔小新 2024-11-17 18:21:23
string
Java中提取字符串的最后一部分
本文介绍了如何使用Java中的substring()和split()方法来提取字符串的最后一部分,特别是在处理包含特殊字符的路径时的方法与技巧。 ...
[详细]
蜡笔小新 2024-11-23 17:45:24
post
C/C++ 应用程序的安装与卸载解决方案
本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ...
[详细]
蜡笔小新 2024-11-23 13:44:53
input
LaTeX高级应用技巧
本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ...
[详细]
蜡笔小新 2024-11-23 12:47:16
include
memcpy的速度测试
想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ...
[详细]
蜡笔小新 2024-11-22 15:10:54
include
Red Hat Linux 下 GCC 4.4.2 的安装指南
本文详细介绍了在 Red Hat Linux 系统上安装 GCC 4.4.2 的步骤,包括必要的依赖库的安装及常见问题的解决方法。 ...
[详细]
蜡笔小新 2024-11-22 10:41:00
include
Linux信号量操作详解:sem_init, sem_wait, sem_post, sem_destroy
本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ...
[详细]
蜡笔小新 2024-11-21 21:21:16
input
Linux环境下MySQL的安装与部署指南
本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ...
[详细]
蜡笔小新 2024-11-20 18:10:53
include
Linux命令操作指南:返回文件头与桌面的方法
本文介绍了在Linux环境下如何有效返回命令行状态、上一级目录及快速查找头文件和函数定义的方法。包括处理长时间运行命令、编辑器退出技巧、目录导航以及文件搜索策略。 ...
[详细]
蜡笔小新 2024-11-20 16:56:14
c语言
汇编语言:编程世界的始祖,连C语言都敬畏三分!
当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ...
[详细]
蜡笔小新 2024-11-20 13:33:02
include
Linux环境下MySQL的安装与配置
本文详细介绍了在Linux系统上安装和配置MySQL的步骤,包括安装前的准备工作、下载和解压安装包、初始化数据库、配置文件编辑、启动服务以及设置开机自启动等。 ...
[详细]
蜡笔小新 2024-11-18 12:25:15
小文662502914775
这个家伙很懒,什么也没留下!
Tags | 热门标签
less
timezone
usb
case
string
require
export
post
range
runtime
function
search
sum
triggers
controller
random
input
javascript
js
golang
testing
metadata
node.js
plugins
include
c语言
email
window
typescript
regex
RankList | 热门文章
1
css代码报错不明白为什么
2
列出同一文档末尾的knitr类型文档的完整代码
3
LS命令不列出Amazon EC2中的文件
4
把自己发出去的邮件自动抄送给自己
5
如何使图像在jira注释中可点击,因此它会弹出,就像您单击附件区域中的附加图像一样?
6
冒泡排序解析
7
在HTML或正文上实现背景图像的最佳方法
8
小程序下拉有白色底的问题
9
CSDN专家分和博客系统积分获得规则!(转官方)
10
电脑入门完全自学手册_广联达软件完整版学习手册(超全),操作手册+教程+问题集锦...
11
密钥设置
12
怎么样在ondraw()里面把一个view按照一个位置绘制出来?
13
更改按钮:在css中激活
14
神奇的 37% 的概率
15
不想被改变
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有