Linux内核启动过程图解

1、进入第一条指令 _text

编译内核后,打开System.map文件,找到对应的_textstart_kernel
在这里插入图片描述

ffffff8008080000 T _text  //第一条指令
ffffff80096007f4 T start_kernel	 //内核初始化

查找地址对应的文件位置

aarch64-linux-gnu-addr2line ffffff8008080000 -e vmlinux -f 

在这里插入图片描述
访问内核目录下的arch/arm64/kernel/head.S程序

在这里插入图片描述

2、start_kernel

板子上电,输入dmesg打印内核启动日志
请添加图片描述

3、总结(内核启动流程描述)

一阶段:内核首先通过找到第一条指令_text的函数入口地址,进入head.S文件并跳转到stext处,保存uboot传入参数、异常级别设置、CPU的初始化,跳转到primary_switch中,使能MMU、内核重定位、初始化内核任务、设置异常向量表后
跳转到start_kernel(c语言部分)

二阶段: 在init/main.c的start_kernel函数中(对应demsg日志)打印版本信息、体系结构安装、设备树解析、安装命令行参数、系统调用初始化、内存管理初始化、中断时钟定时器初始化、控制台进程信号初始化后跳转到rest_init()

三阶段rest_init()中,创建内核线程,1号进程init和2号守护进程,在1号进程kernel_init中进行驱动的初始化、驱动模块初始化、运行第一个应用程序

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值