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

_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作为页元数据起始地址后页区域尾页对应元数据位置

MEMS器件是封测厂商发展的助跑器 传感器产业面临两大主要挑战
5G技术快速发展,通信的网络安全更加严峻
万能材料拉力试验机是个怎么样的测试仪?
遥感技术的分类有哪些 中国卫星遥感技术的发展现状
通过语音识别技术来进行身份验证,此方案如何实施
跟踪调试rt smart启动过程的记录贴
2022首批青岛市技术创新中心名单公示 海尔入选9席数量
大数据为何成为了自动驾驶的未来
车规芯片与手机芯片的设计有何不同之处
蓝牙耳机平价推荐,蓝牙耳机平价又好用
肢体追踪技术:智能电视手机体感风
论传统RAID技术的存在的几大问题
led灯珠怎么测量好坏?led灯珠更换?LED灯珠坏了怎么修?
内存和磁盘的关系&数据压缩(下)
零售业与物联网的结合会有什么反应
三星A40渲染图曝光 采用水滴屏设计4000毫安时电池
长虹推出“ZETA+蓝牙BEACON”的资产定位标签产品及解决方案
光电传感器的相关分类
基于低功耗处理芯片OMAP5912实现实时语音通信系统的设计
西门子歌美飒计划于明年第二季启用台中机舱厂