概述
vmlinux的启动过程,之所以是vmlinux,是因为其他格式的内核在进行与vmlinux相同的流程之前会有一些特有的操作。
比如对于压缩格式的内核zImage,它首先会进行自解压得到vmlinux,然后执行vmlinux开始“正常的”启动流程。
Linux内核启动流程可以分为两部分:架构/单板相关的引导过程、后续的通用启动过程。
第一阶段引导阶段通常使用汇编语言编写
(1)检查内核是否支持当前架构的处理器,然后检查是否支持当前单板
(2)为调用start_kernel函数做准备
①设置页表、使能MMU,连接内核态使用的虚拟地址
②复制数据段、清除BSS段,准备调用C函数start_kernel的环境
第二阶段主要使用C语言编写
(1)进行内核初始化
(2)调用rest_init函数创建并启动系统第一个进程:init进程
第一阶段:
确定内核是否支持该架构->
确定是否支持该单板->
建立一级页表->
禁止ICache、DCache、数据Cache、指令Cache(cpu寄存器初始化比内存快,关闭cache避免取址异常)->
使能MMU->
复制数据段、清除BSS段、设置栈指针、保存CPU ID到processor_id变量
保存机器类型id(单板型号)到__machine_arch_type变量,调用start_kernel函数
第二阶段:
输出linux版本信息->设置与相关体系相关的环境->
初始化控制台->
启动init进程
linux内核启动的目的是为了启动应用程序,要找到应用程序首先要找到根文件系统。
最后
以上就是幽默硬币为你收集整理的Linux内核启动流程(vmlinux)的全部内容,希望文章能够帮你解决Linux内核启动流程(vmlinux)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复