我是靠谱客的博主 幽默硬币,最近开发中收集的这篇文章主要介绍Linux内核启动流程(vmlinux),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部