0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux内核入口stext段分析

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:Jasonangel 2023-09-28 17:07 次阅读

stext 段

从上面的ENTRY(stext)可以知道,一开始是运行stext段,这个段内的代码是 start_kernel 函数前汇编环境的初始化。

linux4.14/arch/arm64/kernel/head.S

图片

preserve_boot_args 保存 bootloader 传递过来的参数

el2_setup 是设置 Linux 启动模式是 EL2。Linux 有 EL0、EL1、EL2、EL3 四种异常启动模式,这里设置一开始是EL2,EL2 支持虚拟内存技术,然后注释说明后面又退回 EL1,在 EL1 启动 kernel。EL3 一般是只在安全模式使用。

set_cpu_boot_mode_flag 保存上面 cpu 的启动模式。

__create_page_tables 创建页表。

__cpu_setup 初始化CPU,这里主要是初始化和 MMU 内存相关的 CPU 部分。

__primary_switch 这里会进行跳转。

在同一个文件中,会跳转到这里,739 行开启了MMU。然后最重要的是跳转到

__primary_switched 函数。先把 __primary_switched 地址放到 x8 寄存器中,再跳转到 x8,也就是跳转到__primary_switched。

图片

接下来分析 __primary_switched 函数:

图片

图片

324-327 初始化了 init 进程的内存信息,开辟了内存空间。

329-334 设置了向量表。

336-340 保存了FDT,也就是 flat device tree 。

342-348 清除了BSS 段,我们知道一般是内存四区:堆区、栈区、全局区、代码区。其中全局区可以再分为 data 段和 BSS 段,BSS段存储了未初始化的变量,这里将BSS段进行清零操作,否则内存中的值是不确定的,这是一个传统操作。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1372

    浏览量

    40289
  • Linux
    +关注

    关注

    87

    文章

    11304

    浏览量

    209467
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62604
收藏 人收藏

    评论

    相关推荐

    Linux内核data和bss的区别

    从进程的角度,Linux内核是采用虚拟地址空间的,如下两张图所示,分别为32位、64位系统下进程地址空间的大概布局。
    发表于 10-13 17:07 8987次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>data<b class='flag-5'>段</b>和bss<b class='flag-5'>段</b>的区别

    Linux内核地址映射模型与Linux内核高端内存详解

    的数据可能不在内存中。 Linux内核地址映射模型 x86 CPU采用了页式地址映射模型。进程代码中的地址为逻辑地址,经过页式地址映射后,才真正访问物理内存。
    发表于 05-08 10:33 3457次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>地址映射模型与<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>高端内存详解

    linux内核分析及编程

    linux内核分析及编程
    发表于 04-20 08:26

    「正点原子Linux连载」第三十六章Linux内核启动流程

    *(.ARM.exidx.exit.text)508 *(.ARM.extab.exit.text)509......645}第493行的ENTRY指明了了Linux内核入口入口stex
    发表于 03-17 11:07

    Linux内核启动流程-迅为IMX6ULL开发板(一)

    指明了Linux内核入口函数为stext,因此要分析Linux内核第二阶
    发表于 07-17 11:13

    AT32 MCU Cortex M4内核入门指南

    AT32 MCU Cortex M4内核入门指南主要介绍了AT32 M4 内核系统架构,并针对M4 内核自带的位带、硬件浮点运算单元和滴答时钟中断功能进行基础讲解和案例解析。
    发表于 10-25 08:08

    基于内核入侵的木马设计与实现

             通过内核入侵是木马入侵 Linux 系统的一种重要形式,其原理是利用Linux 内核
    发表于 09-05 08:32 9次下载

    linux内核启动内核解压过程分析

    linux启动时内核解压过程分析,一份不错的文档,深入了解内核必备
    发表于 03-09 13:39 1次下载

    基于Linux 2.6内核Makefile分析

    基于2.4内核的,可以说关于2.6内核Makefile相关的文章凤毛麟角,笔者抽时间完成了这篇分析文章,让读者迅速熟悉Linux最新Makefile体系,从而加深对
    发表于 09-18 19:09 0次下载
    基于<b class='flag-5'>Linux</b> 2.6<b class='flag-5'>内核</b>Makefile<b class='flag-5'>分析</b>

    关于Linux 2.6内核Makefile的分析

    的介绍文章都是基于2.4内核的,可以说关于2.6内核Makefile相关的文章凤毛麟角,笔者抽时间完成了这篇分析文章,让读者迅速熟悉Linux最新Makefile体系,从而加深对
    发表于 11-02 10:12 1次下载

    linux内核入门教材之linux内核设计与实现第二版中文版免费下载

    此书是当今首屈一指的linux内核入门最佳图书。作者是为2.6内核加入了抢占的人,对调度部分非常精通,而调度是整个系统的核心,因此本书是很权威的。这本书讲解浅显易懂,全书没有列举一条汇编语句,但是
    发表于 10-15 18:20 0次下载
    <b class='flag-5'>linux</b><b class='flag-5'>内核入</b>门教材之<b class='flag-5'>linux</b><b class='flag-5'>内核</b>设计与实现第二版中文版免费下载

    嵌入式Linux内核移植相关代码分析

    分析 */ /* 内核入口点 */ ENTRY(stext) /* 程序状态,禁止FIQ、IRQ,设定SVC模式 */ mov r0, #F_BIT | I_BIT | MODE_SVC@ make
    发表于 04-02 14:37 266次阅读

    【站友投递】linux内核启动流程

    Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(
    发表于 04-02 14:38 452次阅读

    Linux内核配置编译分析的设计方案

    Linux内核配置编译分析的设计方案
    发表于 07-08 16:53 18次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>配置编译<b class='flag-5'>分析</b>的设计方案

    Linux内核GPIO操作函数的详解分析

    本文档的主要内容详细介绍的是Linux内核GPIO操作函数的详解分析免费下载。
    发表于 01-22 16:58 28次下载