文档章节

Linux insides笔记(二)

yyliu
 yyliu
发布于 2015/08/28 10:48
字数 866
阅读 49
收藏 2

感谢上帝,今天头不怎么疼。

昨天重温了今敏老师的 红辣椒。剧中千叶对时田不顾dcmini丢失后种种可怕事故,痴心于最终完成dcmini的行为勃然大怒,大意说:

你和冰室都是这样,只做你们愿意做的事而不去做应该做的事。自以为是百年一遇的天才,什么dcmini很棒啊,你这个死宅你就撸一辈子吧

嗯,就像linux这种东西,对我没用,我看看于世界也没用,确实不像是应该做的事情。

然而罗素说

The time you enjoy wasting is not wasted time.

然而世界上没什么应该做的事,全如尘芥。无苦集灭道,无智亦无得。

零零碎碎,手机敲了一个半小时╯﹏╰这是个没有情怀的世界,偏偏希望有些情怀,因为我曾感受过它。

以下正文。

Bios将硬盘第一扇区512字节载入内存地址ox7coo,bios正式把控制权交给bootloader.

Bootloader的主要任务,准备好把控制权交给操作系统内核。然而grub2功能很多,还要处理历史遗留兼容和错误处理,需要比这512字节更大的空间,设计者于是设计grub分三步载入所有程序到符合规定的内存地址上,并执行这些载入的程序。

Grub2要想启动linux内核,要遵循内核启动协议。在linux源码文档中有这个协议。准备好各项工作之后,把linux内核载入内存选定区域中,至于选定区域在哪,协议文档和源码中有建议和答案。填入内核启动信息,控制权移交内核。

内核首先还有设置自身很多东西。操作系统,因为显而易见的原因多是用c啊rust这种更人类友好的语言完成,然而呢,c语言编译的程序运行是需要各种条件的,比如bss段啊,堆栈啊啥的,然而目前并没有。

我们首先要让各个段寄存器的值一样,刚进入内核时,前面有一段给uefi用的数据,因此cs设置会不同,但之后,需要调整成和其它寄存器一样。

我们还要正确设置堆栈(这里他在说啥不知道)反正是按规定在狭小的空间设置好狭小的有堆或没有的栈。我并不知道c程序编译成的程序能没有堆运行。。。

接下来,内核检查魔术字段,确保段寄存器和栈都设置好了。

接着设置bss段,在合适的位置设置合适的大小区域为bss.将bss区域初始化为o.这在源码中有细节。

最后,就可以跳转到c的main函数了。

之所以操作系统用c写,我猜汇编写复杂点程序太难过,不信建议你自己写bootloader试试。

总之,通过程序不断载入内存和控制权移交,内存中东西越来越丰富。之后就该内核中的c代码继续内核的启动任务。

下回在写

Cheers

© 著作权归作者所有

共有 人打赏支持
yyliu
粉丝 31
博文 14
码字总数 20045
作品 0
无锡
私信 提问
Linux insides笔记(一)

作为一个web前端工程师,我准备写写linux insides的笔记,看着一些操作系统的东西,总是想起那些年翻看osdev wiki的日子,三十天没能自制的操作系统,还有半途而废的halfdogOS╯﹏╰ 开始正文...

yyliu
2015/08/27
270
0
《Linux内核设计与实现》读书笔记 - 目录 (完结)

《Linux内核设计与实现》读书笔记 - 目录 (完结) 读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个《Linux内核设计...

你的猫大哥
2018/01/14
0
0
Linux 内核展示--Linux-Insides

Linux-Insides 是一系列 Linux 内核的展示。它通过分享 Linux 内核的内部知识来增加人们对 Linux 内核或者其他低级别主题的兴趣。

孔小菜
2015/08/03
1K
0
Linux insides笔记(三)

头不疼鼻子哗哗的 感冒了竟然,宿舍里众人皆感冒一周有余我自岿然不动的神话破灭 伤心 以下正文 程序终于运行到main.c。接着继续配置内核启动环境和参数。 首先把启动参数,就是之前bootloa...

yyliu
2015/08/30
116
0
KVM虚拟化学习笔记系列文章列表

kvm虚拟化学习笔记(一)之kvm虚拟化环境安装 http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linux kvm虚拟机安装 http://koumm.blog.51cto.com/703525/1289627 kvm虚拟...

蓝狐乐队
2015/03/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL中update修改数据与原数据相同会再次执行吗

背景 本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗? 测试环境 MySQL5.7.25 Centos 7.4 binlog_format为ROW 参数 root@localhost...

阿里云官方博客
13分钟前
2
0
ZStack部署实战之VDI异构部署

作者:ZStack社区 蒋克勤 前言 大家都知道ZStack是一个自主开发、功能齐全、轻量级的私有云和混合云平台,同时,ZStack作为一个开放的云平台,也能够支持各种云桌面终端的接入!大家可以结合...

ZStack社区版
15分钟前
1
0
我的漂泊一生......

突然想起来,给自己的这辈子旅程画个线路图。 懵懂期 青春期 转变期 转变期(二) 现在 感谢 感谢生命里出现的 好的差的,那都是一段旅程 特别感谢几个人对我的帮助: 英泰老叶、工贸老陈、天...

o0无忧亦无怖
16分钟前
16
2
难越高并发这座火焰山?试一试Iron Cloud这朵筋斗云

强如银行巨头,也有难翻的火焰山? 伴随互联网+ 趋势的推进,越来越多金融公司业务渠道从线下转移到线上,业务场景发生质的转变与提升。 支付场景多样化和人们消费水平升级,随之而来的是各大...

heishaovvv
27分钟前
1
0
在线官网Spring Initializr 或 IntelliJ IDEA 快速搭建springboot项目

Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程。它主要推崇的是'消灭配置’,实现零配置。 那么,如何快速新建一个一个springboot项目脚...

Mr_ET
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部