linux内核启动流程x86,linux内核-x86_32位内核启动流程
arch/x86/boot/header.S
执行_start,第274行:
.global _start
_start:
然后跳转执行start_of_setup,准备实模式建立堆栈,BSS段清0,为下步C语言执行建立环境。
start_of_setup:
然后跳转到C代码执行main:
# Jump to C code (should not return)
calll main
arch/x86/boot/main.c
执行main函数:
void main(void)
maim中使用BIOS中断读取一些硬件信息,如内存信息等。
main函数最后,再执行go_to_protected_mode函数。
arch/x86/boot/pm.c
执行go_to_protected_mode函数。
void go_to_protected_mode(void)
禁用中断,开启20位以上的地址线,设置保护模式,设置全局描述表。
函数最后执行protected_mode_jump
arch/x86/boot/pmjump.S
执行protected_mode_jump:
GLOBAL(protected_mode_jump)
该段开始的.code16指令,表示这段代码依然是16位的实模式代码。使能CR0寄存器中的PE(Protection Enable)位,进入32位保护模式。建立32位的堆栈,清除寄存器以允许将来扩展到32位引导协议。
跳转到了code32_start地址处执行。
arch/x86/boot/compressed/head_32.S
执行startup_32:
__HEAD
ENTRY(startup_32)
执行过程,调用了efi_main
执行到,解压内核
call decompress_kernel
arch/x86/boot/compressed/misc.c
执行decompress_kernel函数。
asmlinkage void decompress_kernel
会输出打印Decompressing Linux…字样。
解压完成后跳转到output。
/arch/x86/kernel/head_32.S
进入到第88行,开始执行
__HEAD
ENTRY(startup_32)
执行到第454行,跳转到i386_start_kernel函数。
jmp *(initial_code)
/arch/x86/kernel/head32.c
执行i386_start_kernel函数。此函数最后调用start_kernel函数。
/init/main.c
执行start_kernel函数。开始启动内核。
参考链接:
https://blog.csdn.net/jn1158359135/article/details/7436211
https://www.cnblogs.com/long123king/p/3545991.html
http://blog.chinaunix.net/uid-1701789-id-148056.html
linux内核启动流程x86,linux内核-x86_32位内核启动流程相关推荐
- linux 进程映射空间 libc,为什么不能在64位内核的32位Linux进程中映射(MAP_FIXED)最高虚拟页面?...
尝试测试时是否允许访问跨越x86中零边界的内存?在Linux的用户空间中,我编写了一个32位测试程序,该程序试图映射32位虚拟地址空间的低和高页. 之后echo 0 | sudo tee /proc/ ...
- superIO在Linux下的设备,X86 Linux ITE SuperIO GPIO Control
Superio概述 Super I/O芯片也叫I/O芯片.在486以上档次的主板上都有I/O控制电路.因为在南桥这样的高速设备和串行.并行接口.软盘驱动器及键盘鼠标等大量低速设备之间必定存在资源的 ...
- linux是x64还是x86,Linux x86和x64的区别
0x01:寄存器分配的不同 (1)64位有16个寄存器,32位只有8个.但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _.e开头的寄存器命名依然可以直接运用于 ...
- linux查看硬盘命令 ok,linux查看硬件信息大全
1, 主板信息 .查看主板的序列号 -------------------------------------------------- #使用命令 dmidecode | grep -i 'seri ...
- linux hadoop etc目录,题目Linux平台下Hadoop的安装配置
1Linux平台下Hadoop的安装配置 以下操作均是在虚拟机VWMare10.0平台上安装ubuntu12.04实现.首先要在ubuntu下穿件Hadoop用户. Ubuntulinux查看系统版本 ...
- AIX 64位内核与32位内核区别
Q:怎么确定机器会运行 64 位内核? A:运行 64 位内核要求 64 位硬件.对于 AIX 5.2,所有 IBM eServer pSeries 64 位硬件都能运行 64 位或 32 位内核. ...
- 1g的树莓派4b能做什么_树莓派4B(Raspbian)切换64位内核+简单性能测试
首先说明两点: 1.目前来看来看(20200108测试,基于Raspbian 2019-09-26),是没有什么卵用的,切换之后性能不增反降,且软件兼容性不能得到保证. 2.教程来源于贴吧大佬,感谢大 ...
- U-Boot启动流程(Linux内核)的分析
http://www.360doc.com/content/12/0816/10/7775902_230452499.shtml 前面一段时间一直在移植U-Boot,Linux内核和构建根文件 ...
- U-Boot启动流程(Linux内核)的分析(写得好)
前面一段时间一直在移植U-Boot,Linux内核和构建根文件系统,其中有些地方还不是很明白,现在回过头来,理解一下U-boot的启动流程,以及 u-Boot是如何加载引导内核启动的.这里的分析也都是 ...
最新文章
- 在Linux系统下如何运行notes客户端
- nodejs新建服务器
- 记得5年前左右的时候,IT这块刚好处于最火专业之一!至今为止,依旧很多人选择计算机!由于女生也很多选择这块,所以给很多公司带来了福利啊!以前一个互联网公司女生少的可怜啊!可随着IT这块人员的进入,竞争
- VTK:可视化之AssignCellColorsFromLUT
- 学习笔记(33):Python网络编程并发编程-进程池线程池
- 在 Centos7 用Jexus服务器 运行.Net Core 只需几步
- Oracle安全漏洞2016.10报告
- 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写
- MongoDB安装问题
- v​n​c​服​务​​安​装​与配置
- 硬盘IDE和AHCI模式的区别
- 【码上实战】【立体匹配系列】经典SGM:(3)代价聚合
- STM32——LCD液晶显示
- 网页游戏打击感实施要点
- ubantu apt命令失败
- 关于locale的设定
- 技术分享:用JS实现的3D海浪涌动特效
- 赵小楼《天道》《遥远的救世主》深度解析(81)一个不愿躺着对话的女人,应给与绝对尊严,这符合强势文化范畴
- SkeyeRTSPLive传统视频监控互联网+实现利器解决方案
- 2345浏览器还算厚道
热门文章
- Pytorch 中 matmul 广播
- 【LeetCode】3月26日打卡-Day11
- 动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题
- 第21条:用函数对象表示策略
- 每天一个Linux命令(17)--whereis命令
- 表单校验---struts2
- Java魔法堂:初探MessageFormat.format和ChoiceFormat
- 没有人能阻止程序员将电脑上的一切搬到网页上
- HDU1878-欧拉回路(入门题+并查集)
- ASP.NET MVC 最佳开发实践(1)