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

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

3天内不再提示

跟踪调试rt smart启动过程的记录贴

冬至子 来源:zms123456 作者:zms123456 2023-08-16 15:31 次阅读

_start阶段
系统时先进入_start执行。首先判断cpu核,如果是0号核的话执行初始化过程,其它核则执行wfe指令进入睡眠。初始化的过程如下:

将异常等级转入el1
设置栈顶指针
清理bss段
初始化mmu的翻译控制寄存器
设置内核和用户空间页表基址寄存器并进行初始化阶段的页表设置,此时将内核空间虚拟地址映射为物理地址+0xffff0000000000,用户空间虚拟地址映射为物理地址+0x40000000。
使能mmu,启用页表翻译地址
使用户空间页表基地址寄存器失效(原来设置该寄存器只为了跳转高地址前的地址翻译),只用内核地址,并设置栈寄存器为sp_el1
跳转到rtthread_startup
rtthread_startup阶段
内存相关初始化过程及内存管理初步学习
在rt_hw_board_init中进行内存相关初始化,这里的目的是设置表示内核空间的相关全局数据结构,及对内存的分布进行设置。

执行完该部分后,内核地址空间相关数据结构如下:

// 表示内核地址空间
struct rt_aspace rt_kernel_space{
.start = 0xffff000000000000; // 内核起始地址
.size = 0x1000000000000; // 内核地址空间大小
.page_table = MMUTable; // 内核所使用的页表,为变量MMUTable地址
.pgtbl_lock;
.tree.tree.root_node = mpr_varea;
.bst_lock.parent.parent.name = "aspace"; // bst_lock的名字
.asid = 0; // 地址空间id
}
// 表示页表空间
struct rt_varea mpr_varea{
.start = rt_mpr_start; // 页元数据基址,值为0xfffffdfff0000000
.size = rt_mpr_size; // 页元数据区域大小,值为0x20000000000
.offset = 0;
.attr = 1536;
.flag = 8704;
.aspace = rt_kernel_space;
.mem_obj = mm_page_mapper; // 内存操作接口
.node;
.frames = 0;
.data = 0;
}
init_mpr_align_start = 0xfffffdfff0880000; // 表示页空间起始页对应的页元数据,由于页元数据起始地址(rt_mpr_start)是从0物理地址开始存,所以需要此数据
init_mpr_align_end = 0xfffffdfff0900000; // 表示页空间末尾页对应的页元数据
early_offset = 0xffff020013880000; // 表示的是起始页与起始页元数据之间距离
mpr_cont = 0xffff000003880000; // 表示的是如果将页的元数据放页区域前元数据起始位置
head_cont = 0xffff000004102000; // 表示将mpr_cont作为页元数据起始地址后页区域首页对应元数据位置
tail_cont = 0xffff000004180000; // 表示将mpr_cont作为页元数据起始地址后页区域尾页对应元数据位置

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

    关注

    30

    文章

    5028

    浏览量

    117722
  • MMU
    MMU
    +关注

    关注

    0

    文章

    91

    浏览量

    17940
  • 控制寄存器
    +关注

    关注

    0

    文章

    34

    浏览量

    11432
  • RTThread
    +关注

    关注

    7

    文章

    129

    浏览量

    40519
收藏 人收藏

    评论

    相关推荐

    STM32H7的启动过程分析

    本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。
    的头像 发表于 10-17 14:42 1630次阅读

    详解STM32启动过程

    本章教程主要跟大家讲STM32H7的启动过程,这里的启动过程是指从CPU上电复位执行第1条指令开始(汇编文件)到进入C程序main()函数入口之间的部分。
    发表于 11-14 11:24 1631次阅读

    namenode的启动过程

    源码HDFS之NameNode:启动过程
    发表于 06-13 14:12

    STM32整个启动过程是怎样的

    STM32整个启动过程是怎样的?整个启动过程涉及的代码有哪些呢?
    发表于 11-29 06:59

    RT-Smart的资料合集

    1、RT-Smart启动过程在熟悉 RT-Smart 架构的过程中,研究其启动过程的是必不可少的,那么在系统正常运行之前,需要做哪些准备工
    发表于 03-22 15:06

    请问RT -SMART支持GDB调试吗?

    RT-SMART介绍,应用程序开发可以用GDB在线调试。现在发布的版本已经具有还功能了吗?原文摘录:为了更好的支持应用程序调试,在RT-Thread
    发表于 04-20 09:35

    系统启动过程

    系统启动过程系统启动过程主要由一下几步组成(以硬盘启动为例):1. 开机2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:00003. 将硬盘第一个
    发表于 10-11 12:17 2122次阅读

    嵌入式uCLinux内核启动过程分析

    分析uCLinux的启动过程,可以加快系统启动速度、正确建立应用环境。本文要研究的就是uCLinux操作系统内核的启动过程
    发表于 08-15 16:51 731次阅读

    IC启动过程及Vcc电压波形的认知

    IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知IC启动过程及Vcc电压波形的认知
    发表于 12-22 14:46 10次下载

    国产300MW机组中压缸启动的特点及启动过程

    机组采用合理启动方式对减小启动过程中的寿命损耗、缩短机组启动时间尤为重要。介绍了国产300 MW机组中压缸启动的特点及启动过程,并提出了中压
    发表于 10-14 10:40 18次下载
    国产300MW机组中压缸<b class='flag-5'>启动</b>的特点及<b class='flag-5'>启动过程</b>

    Linux基础命令之Linux启动过程详解

    2.2 Linux启动过程详解 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程。Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这
    发表于 10-18 14:17 2次下载
    Linux基础命令之Linux<b class='flag-5'>启动过程</b>详解

    STM32上电后启动过程

    STM32上电后启动过程
    发表于 11-15 18:21 16次下载
    STM32上电后<b class='flag-5'>启动过程</b>

    stm32启动过程

    一次性搞定stm32启动模式与启动过程一、stm32启动模式二、从flash启动过程2.1 数据在堆栈中存储方式2.2 stm32的正常启动过程
    发表于 12-16 16:57 8次下载
    stm32<b class='flag-5'>启动过程</b>

    RL78启动过程详解

    RL78启动过程详解
    的头像 发表于 09-28 16:39 863次阅读
    RL78<b class='flag-5'>启动过程</b>详解

    stm32启动过程详解

    STM32启动过程详解 近年来,STM32微控制器在嵌入式系统中的应用越来越广泛。STM32微控制器具有高性能、低功耗、易扩展和丰富的外设接口等优势。而要让STM32微控制器正常工作,首先要
    的头像 发表于 12-08 15:47 717次阅读