首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux内核启动流程(文章最后流程图)

大家好,又见面了,我是你们朋友全栈君。 原文:linux内核启动流程 本文以Linux3.14版本源码为例分析其启动流程。各版本启动代码略有不同,但核心流程与思想万变不离其宗。...内核映像被加载到内存并获得控制权之后,内核启动流程开始。通常,内核映像以压缩形式存储,并不是一个可以执行内核。因此,内核阶段首要工作是自解压内核映像。...通过linux/arch/arm/boot/compressed目录下Makefile寻找到vmlinux文件链接脚本(vmlinux.lds),从中查找系统启动入口函数。...函数启动用户进程 部分书籍介绍内核启动流程基于经典2.6版本,kernel_init函数还会调用init_post函数专门负责_init进程启动,现版本已经被整合到了一起。...当内核被引导并进行初始化后,内核启动了自己第一个用户空间应用程序_init,这是调用第一个使用标准C库编译程序,其进程编号时钟为1.

1.6K30

linux内核启动流程分析 - efistub入口函数

最近打算写一个系列文章,主要讲linux内核启动流程。 网上类似标题文章很多,但大都是从start_kernel讲起,我觉得这是远远不够。...linux内核启动流程涉及东西非常多,而且偏硬件,比较难理解,写这个系列其实还是挺有难度,我会尽量讲透彻一点,尽量不敷衍每个细节。 好,那今天我们就从如何找到efi stub入口函数讲起。...该方式为我们研究内核启动降低了不少难度,我们不用再去看类似于grub等boot loader代码了,从开机到启动完毕所有流程代码,在内核里都可以找到,完美。...这两个部分都可以认为是内核启动流程部分,并不是真正内核逻辑,真正内核逻辑被压缩到了compressed部分里piggy.S文件里。...或者说,在 uefi 平台上,以 efi stub形式启动内核时,开机后内核执行第一个方法就是该方法。 以这里为起点,我们就可以开始探索linux内核完整启动流程了。

3.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    linux内核启动流程分析 - startup_64

    由之前文章 linux内核启动流程分析 - efi_stub_entry 可知,rsi中存放是boot_params地址,而BP_kernel_alignment又是boot_params中kernel_alignment...这里再提下343行中1f,它是GNU Assembler中一种语法,表示是汇编语言local label,1f表示向下找第一个名为1label,还有其他写法比如1b,表示向上找第一个名为1label...init_size值是大于bzImage文件大小,因为bzImage是一个压缩过内核,如果我们想要执行到真正内核,还要在内存中对bzImage解压缩,init_size指定多余空间就是为了解压缩用...当我们要把bzImage移动到init_size结尾部分时,其实只要移动bzImage里compressed部分就好,因为这里有我们真正需要解压缩内核及其相关代码。...结尾时,它起始地址。

    2.4K20

    linux内核启动流程分析 - efi_main

    上一篇文章 linux内核启动流程分析 - efi_stub_entry 中,为了叙述方便,我们只是粗略讲了下efi_main函数,这里我们再具体看下。 ?...有关boot_params创建及其hdr初始化,我们在 linux内核启动流程分析 - efi_pe_entry 中有讲到,这里就不再赘述。 继续看该函数其余部分。 ?...而710行中image_offset是kernel在内存起始地址到compressed部分起始地址(startup_32地址)偏移量,这个在 linux内核启动流程分析 - efi_pe_entry...linux内核构建结束后,最终生成文件是 arch/x86/boot/bzImage,这其实是个压缩过内核,在kernel启动过程中,还要在内存中对内核进行解压,进而得到真正内核。...综上可知,712行中buffer_end表示是kernel在启动过程中,需要使用内存结束地址。 714到717行是一些条件判断,在这些条件下,需要拷贝内存中内核到合适位置上。

    3.7K30

    linux内核启动流程分析 - efi_stub_entry

    接上一篇文章 linux内核启动流程分析 - efi_pe_entry,我们继续看efi_stub_entry函数。 ? 该函数比较特殊,是用汇编写,下面我们来逐行分析下。...有了这种约定之后,大家就可以各自写各自逻辑,且在最终链接到一起时,还是可以正常执行。...但如果我们要直接写汇编代码,这些就是要了解清楚。 那对于x64linux内核来说,calling convention具体是怎么约定呢?...第五行代码将startup_64函数编译时地址,加到了rax寄存器里,也就是加到了startup_32函数运行时地址上,这样rax里存放地址,就是运行时startup_64函数地址了。...看上面选中行,确实是0x200。 我们再来看下efi_stub_entry中使用到startup_64那行代码反汇编: ?

    2.4K20

    linux内核启动流程分析 - efi_pe_entry

    接上一篇文章 linux内核启动流程分析 - efistub入口函数,我们继续看efi_pe_entry这个函数。 ?...handle指向是运行时kernel,sys_table_arg指向是uefisystem table(有了system table,就可以使用uefi各种服务,比如输入输出、boot service...接下来该函数验证了system table中signature是否等于uefi specification中定义signature,以此来判断该次启动是否用是uefi方式。...boot_params又被称为zeropage,该结构体用来存放各种启动参数,供后续启动kernel使用,其具体结构如下: ?...所以最开始我认为efi_pe_entry中使用是startup_32绝对地址,即上面输出0,这种想法是错误,其实它是根据当前rip中地址,以及startup_32到下一条指令偏移量,计算出真正运行时中

    2.8K30

    Linux 启动流程

    那篇文章不涉及操作系统,只与主板板载程序有关。今天,分享一篇Linux系统启动文,主要探讨操作系统接管硬件以后发生事情,也就是操作系统启动流程。 ? 这个部分比较有意思。...第一步、加载内核 操作系统接管硬件以后,首先读入 /boot 目录下内核文件 ?...内核文件加载以后,就开始运行第一个程序 /sbin/init,它作用是初始化系统环境。...它们在Windows叫做"服务"(service),在Linux就叫做守护进程(daemon)。 init进程一大任务,就是去运行这些开机启动程序。...但是,不同场合需要启动不同程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同场合,分配不同开机启动程序,这就叫做运行级别(runlevel)。

    2K30

    Linux 启动流程

    今天,我想接着往下写,探讨操作系统接管硬件以后发生事情,也就是操作系统启动流程。 ? 这个部分比较有意思。...第一步、加载内核 操作系统接管硬件以后,首先读入 /boot 目录下内核文件。 ?...内核文件加载以后,就开始运行第一个程序 /sbin/init,它作用是初始化系统环境。...它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程一大任务,就是去运行这些开机启动程序。...但是,不同场合需要启动不同程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同场合,分配不同开机启动程序,这就叫做"运行级别"(runlevel)。

    3.3K50

    Linux 启动流程

    本篇重点是讲解设备和驱动启动流程,设备和驱动流程是整个内核启动核心,也是工作中最常面对问题。出于知识点系统性考虑,在进入主题之前我们先看下整个 Linux 在 ARM 中启动流程如何。...Uboot 启动流程 ARM Linux 启动流程大致为:Uboot → Kernel → Root filesystem。Uboot 在上电时候就拿到 CPU 控制权,实现了硬件初始化。...初始化 RAM 因为内核要在 RAM 中运行,所以在调用内核之前必须初始化和设置 RAM,为调用内核做好准备。 初始化串口 内核启动过程中可以将信息通过串口输出,这样就可以清楚知道内核启动信息。...设置内核启动参数 内核启动过程中会根据该启动参数进行相应初始化工作。...Linux 内核启动流程(设备和驱动加载) 关于 Uboot 启动本课程不做详细介绍,因为本课程主要内容是内核。在讲述内核启动之前让我们先了解下内核组成结构: ?

    2.7K42

    Linux启动流程

    Linux操作系统启动过程是一个复杂而精密流程,涉及到多个阶段和组件。本文将对Linux启动流程进行深入探讨,并对比不同发行版之间一些差异。...传递控制权: 最后,Grub将控制权传递给Linux内核。 Syslinux启动流程 Syslinux是另一个轻量级引导加载程序,适用于一些嵌入式系统和Live CD。...Syslinux启动流程相对简单: 加载配置文件: Syslinux读取配置文件,其中包含了引导选项和内核位置。 加载内核: Syslinux加载Linux内核到内存。...不同发行版差异 尽管Linux启动流程有很多共通之处,但不同发行版可能有一些细微差异。...通过对比不同发行版启动流程,我们能更好地理解Linux系统运作机制,为故障排查和系统优化提供更深入了解。希望本文能够帮助读者更好地理解Linux启动流程,并在实际应用中发挥作用。

    26810

    linux启动流程

    每次打开 Linux PC 时,它都会经历一系列阶段,然后最终显示提示输入用户名或密码登录屏幕。每个 Linux 发行版在典型启动过程中都会经历 4 个不同阶段。...) 加载引导加载程序 (GRUB2) 内核初始化 启动systemd,所有进程父进程 1....当 Linux 系统启动时,BIOS(基本输入输出系统)启动并执行开机自检(POST)。这是执行大量诊断检查完整性检查。...GRUB 主要目标是将 Linux 内核加载到主内存中。 3. 内核初始化 内核是任何 Linux 系统核心。它将 PC 硬件与底层进程连接起来。内核控制 Linux 系统上所有进程。...启动 Systemd 内核最终加载了Systemd,它是旧SysVinit替代品。Systemd是所有 Linux 进程母体,并管理文件系统挂载、启动和停止服务等等。

    12.1K10

    Linux启动流程

    启动第四步--加载内核 根据grub设定内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux提示。...系统将解压后内核放置在内存之中,并调用start_kernel()函数来启动一系列初始化函数并初始化各种设备,完成Linux核心环境建立。...:) 嵌入式系统Linux启动流程: 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader), Linux 内核,文件系统,应用程序。...Linux 内核在完成系统初始化之后需要挂载某个文件系统作为根文件系统(Root Filesystem),然后加载必要内核模块,启动应用程序。...从以上分析可以看出 Bootloader在运行过程中虽然具有初始化系统和执行用户输入命令等作用,但它最根本功能就是为了启动 Linux 内核,让我们进一步分析 Bootloader 和 Linux

    8.5K50

    Linux内核启动参数详解

    x86_64 x86_64 GNU/Linux 2.查看当前linux内核启动参数: cat /proc/cmdline 笔者输出内容如下: BOOT_IMAGE=/boot/vmlinuz-4.4.0...-4202-4513-b39b-cde6a5d9753f :这一串可以用root=/dev/sda1(假如根文件系统在第一个分区)来代替,但是不能用root=(hd0,msdos1)来代替 ro : 启动时以只读方式挂载根文件系统...splash参数去掉,此项就无效了 4.添加新启动参数 vi /boot/grub/grub.cfg 此文件中会有第2步输出内容,在其后追加参数即可,例如: 笔者grub.cfg文件中就有如下行:...(是不是与第2步输出信息有些类似) linux /boot/vmlinuz-4.4.0-89-generic root=UUID=bef418fa-4202-4513-b39b-cde6a5d9753f...update-grub命令无法满足更细致内核参数修改需求

    5.6K20

    Linux 启动流程分析

    程序员成长之路 互联网/程序员/成长/职场 关注 阅读本文大概需要 5 分钟。 今天,一起探讨操作系统启动流程。 这个部分比较有意思。...加载内核 操作系统接管硬件以后,首先读入 /boot 目录下内核文件。...内核文件加载以后,就开始运行第一个程序 /sbin/init,它作用是初始化系统环境。...它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程一大任务,就是去运行这些开机启动程序。...但是,不同场合需要启动不同程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同场合,分配不同开机启动程序,这就叫做"运行级别"(runlevel)。

    5.7K20

    Linux 启动流程分析

    今天,一起探讨操作系统启动流程。 ? 这个部分比较有意思。因为在BIOS阶段,计算机行为基本上被写死了,程序员可以做事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。...加载内核 操作系统接管硬件以后,首先读入 /boot 目录下内核文件。 ?...内核文件加载以后,就开始运行第一个程序 /sbin/init,它作用是初始化系统环境。...它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程一大任务,就是去运行这些开机启动程序。...但是,不同场合需要启动不同程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同场合,分配不同开机启动程序,这就叫做"运行级别"(runlevel)。

    2.7K10

    Linux 启动流程分析

    今天,一起探讨操作系统启动流程。 ? 这个部分比较有意思。因为在BIOS阶段,计算机行为基本上被写死了,程序员可以做事情并不多;但是,一旦进入操作系统,程序员几乎可以定制所有方面。...加载内核 操作系统接管硬件以后,首先读入 /boot 目录下内核文件。 ?...内核文件加载以后,就开始运行第一个程序 /sbin/init,它作用是初始化系统环境。...它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程一大任务,就是去运行这些开机启动程序。...但是,不同场合需要启动不同程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同场合,分配不同开机启动程序,这就叫做"运行级别"(runlevel)。

    1.6K30
    领券