加载不同linux内核,Linux内核加载过程
以32位x86,bzImge为例
grub版本为0.97
1、计算机上电
2、0xFFFFFFF0
当cpu检测reset引脚上的信号后
便将指令指针寄存器的值设置为0xfff0
——INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986, Chapter 10
此时为实模式,cpu将执行物理地址0xFFFFFFF0处的指令
访址的时候,硬件将该地址映射到BIOS的ROM中
BIOS中的指令将MBR复制到物理地址0x7c00处,并跳转到该处执行
3、0x7C00
MBR中的指令由grub安装而来,为grub-0.97/stage1/stage1.S
stage1将stage2的第1部分grub-0.97/stage2/start.S(512字节)复制到物理地址0x8000处,并跳转到该处执行
stage2将剩余部分grub-0.97/stage2/asm.S复制到物理地址0x8200处,并跳转到该处执行
...
grub-0.97/stage2/boot.c——load_image()函数
将内核映像bzImage的setup部分复制到物理地址0x90000
vmlinux部分复制到物理地址0x100000处
随后跳转到0x90200处执行
4、0x90200
arch/x86/boot/heaer.S——_start => start_of_setup
检查准备实模式堆栈,bss段清0,随后调用arch/x86/boot/main.c——main()函数
main()中使用BIOS中断读取一些硬件信息,如内存信息等
最后调用arch/x86/boot/pm.c——go_to_protected_mode()函数
go_to_protected_mode()设置段描述符,随后调用arch/x86/boot/pmjump.S——protected_mode_jump()函数
protected_mode_jump()置cr0的PE位,开启保护模式
最后跳转到code32_start,对于bzImage即物理地址0x100000,grub复制的bzImage第2部分
5、0x100000
arch/x86/boot/compressed/head_32.S——startup_32
arch/x86/boot/compressed/misc.c——decompress_kernel()解压内核
解压完成后跳转到output
6、LOAD_PHYSICAL_ADDR
根据不同的配置,解压后的代码在物理内存中的起始位置亦不同
arch/x86/kernel/head_32.S——startup_32
设置页表,置cr0的PG位,开启分页
最后跳转到arch/x86/kernel/head32.c——i386_start_kernel()函数
i386_start_kernel()中最后调用start_kernel()
7、start_kernel()
init/main.c——start_kernel()
进入c代码部分
加载不同linux内核,Linux内核加载过程相关推荐
- Linux驱动之内核加载模块过程分析
Linux内核支持动态的加载模块运行:比如insmod first_drv.ko,这样就可以将模块加载到内核所在空间供应用程序调用.现在简单描述下insmod first_drv.ko的过程 1.in ...
- u-boot的linux内核映像加载,基于U_Boot的Linux内核映像加载与引导功能实现.pdf
基于U_Boot的Linux内核映像加载与引导功能实现 20 10 8 ( ) Aug . 2010 10 4 Journal of Langfang T eachers College( N atu ...
- Linux 2.6内核的编译步骤及模块的动态加载
本文是基于2.6的内核,也建议各位可以先看一下<Linux内核设计与实现(第二版)>作为一个基础知识的铺垫.当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块 ...
- linux英伟达显卡内核不匹配,硬核观察|Linus 破例在 Linux 5.11 内核中允许英伟达显卡驱动加塞...
Linus 破例在 Linux 5.11 内核中允许英伟达显卡驱动加塞 据 cnbeta 报道,曾因闭源驱动对英伟达爆粗口的 Linus Torvalds,刚刚宣布了 Linux 5.11 内核版本的 ...
- 一加5t内核linux,[ROM][9.0]xiaojiaMOD一加5t禅定录屏超多增强设置动态壁纸公测32
20190504更新: 更新官方公测29版 状态栏虚拟按键更新 支持更多自定义按键功能(切换音乐等功能) Magisk管理器更新7.1.2 Magisk更新19.1 新增RetroMusic音乐播放器 ...
- 一加5t内核linux,[ROM][9.0]一加5T安卓P迈凯伦SmartBoost自定义信号居左自定义BETA25
rom版本:9.0 适用机型:一加5t 20190227更新: 更新一加5beta26版 更新一加5Tbeta25版 更新magisk 18.2 root灵敏 修复上一版一加5导航栏调出来崩溃问题 修 ...
- linux设备和驱动加载的先后顺序
点击打开链接 Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢. Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有 ...
- usb升级linux固件,Linux USB驱动(4)---CY68013固件加载驱动
CY68013的固件可以保存在主机上,当其被USB总线识别出来之后,可以通过驱动程序动态的加载USB固件,Linux内核中已经提供了完善的机制来加载设备的固件. 将需要加载的固件存放到/lib/fir ...
- c需要实现安装卸载Linux模块,Linux内核模块编译与加载
Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用所需要的组件? 方法一: 把所有的组件都编译进内核文件,即Zlmage或bzlmage,但会导致两个问题:一是生成的内核文件过大:二是如 ...
- ubuntu linux开机启动自动加载ko驱动程序_一文讲透 CentOS 开机流程
一.Linux开机流程: BIOS: (Basic Input Output System)基本输入输出系统,它是一组固化到计算机内主板上一个ROM芯片 上的程序,保存着计算机最重要的基本输入输出的程 ...
最新文章
- share extension 不显示_高亮显示系统日志应该用什么命令
- 运满满的技术架构演进之路
- 程序猿,该在一个公司呆多久?
- SparkSql之DataFrame操作
- 关于mybatis中type-aliases-package使用的几个问题
- 消息称Uber正洽谈出售旗下自动驾驶部门ATG给Aurora
- 2020年书法落款_快来排排2020鼠年书法落款时间表,收!
- uni-app 跨端开发注意事项
- 2010罗森伯格HDCS®综合布线分布线销商大会顺利召开
- ElementUI实现表单校验
- 2020谷歌服务助手_华为mate30没法用谷歌?新加坡网友实测如何越过官方限制!...
- 好用的开源软件_推荐_良心软件
- Java 堆排序(大根堆及小根堆)
- php基础知识速记,电气工程师5大背诵妙招速记基础知识
- Excel 表格数据去重
- BufferedImage类、Image类、Graphics类
- 《我叫MT》手游源码和资源下载
- 三星矫情,重温Galaxy S5发布会收买人心
- 苹果自带相册打马赛克_剪映app怎么给视频局部打马赛克
- 小重山 2022年4月22日