0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

跟蹤調(diào)試rt smart啟動(dòng)過(guò)程的記錄貼

冬至子 ? 來(lái)源:zms123456 ? 作者:zms123456 ? 2023-08-16 15:31 ? 次閱讀

_start階段
系統(tǒng)時(shí)先進(jìn)入_start執(zhí)行。首先判斷cpu核,如果是0號(hào)核的話執(zhí)行初始化過(guò)程,其它核則執(zhí)行wfe指令進(jìn)入睡眠。初始化的過(guò)程如下:

將異常等級(jí)轉(zhuǎn)入el1
設(shè)置棧頂指針
清理bss段
初始化mmu的翻譯控制寄存器
設(shè)置內(nèi)核和用戶空間頁(yè)表基址寄存器并進(jìn)行初始化階段的頁(yè)表設(shè)置,此時(shí)將內(nèi)核空間虛擬地址映射為物理地址+0xffff0000000000,用戶空間虛擬地址映射為物理地址+0x40000000。
使能mmu,啟用頁(yè)表翻譯地址
使用戶空間頁(yè)表基地址寄存器失效(原來(lái)設(shè)置該寄存器只為了跳轉(zhuǎn)高地址前的地址翻譯),只用內(nèi)核地址,并設(shè)置棧寄存器為sp_el1
跳轉(zhuǎn)到rtthread_startup
rtthread_startup階段
內(nèi)存相關(guān)初始化過(guò)程及內(nèi)存管理初步學(xué)習(xí)
在rt_hw_board_init中進(jìn)行內(nèi)存相關(guān)初始化,這里的目的是設(shè)置表示內(nèi)核空間的相關(guān)全局?jǐn)?shù)據(jù)結(jié)構(gòu),及對(duì)內(nèi)存的分布進(jìn)行設(shè)置。

執(zhí)行完該部分后,內(nèi)核地址空間相關(guān)數(shù)據(jù)結(jié)構(gòu)如下:

// 表示內(nèi)核地址空間
struct rt_aspace rt_kernel_space{
.start = 0xffff000000000000; // 內(nèi)核起始地址
.size = 0x1000000000000; // 內(nèi)核地址空間大小
.page_table = MMUTable; // 內(nèi)核所使用的頁(yè)表,為變量MMUTable地址
.pgtbl_lock;
.tree.tree.root_node = mpr_varea;
.bst_lock.parent.parent.name = "aspace"; // bst_lock的名字
.asid = 0; // 地址空間id
}
// 表示頁(yè)表空間
struct rt_varea mpr_varea{
.start = rt_mpr_start; // 頁(yè)元數(shù)據(jù)基址,值為0xfffffdfff0000000
.size = rt_mpr_size; // 頁(yè)元數(shù)據(jù)區(qū)域大小,值為0x20000000000
.offset = 0;
.attr = 1536;
.flag = 8704;
.aspace = rt_kernel_space;
.mem_obj = mm_page_mapper; // 內(nèi)存操作接口
.node;
.frames = 0;
.data = 0;
}
init_mpr_align_start = 0xfffffdfff0880000; // 表示頁(yè)空間起始頁(yè)對(duì)應(yīng)的頁(yè)元數(shù)據(jù),由于頁(yè)元數(shù)據(jù)起始地址(rt_mpr_start)是從0物理地址開(kāi)始存,所以需要此數(shù)據(jù)
init_mpr_align_end = 0xfffffdfff0900000; // 表示頁(yè)空間末尾頁(yè)對(duì)應(yīng)的頁(yè)元數(shù)據(jù)
early_offset = 0xffff020013880000; // 表示的是起始頁(yè)與起始頁(yè)元數(shù)據(jù)之間距離
mpr_cont = 0xffff000003880000; // 表示的是如果將頁(yè)的元數(shù)據(jù)放頁(yè)區(qū)域前元數(shù)據(jù)起始位置
head_cont = 0xffff000004102000; // 表示將mpr_cont作為頁(yè)元數(shù)據(jù)起始地址后頁(yè)區(qū)域首頁(yè)對(duì)應(yīng)元數(shù)據(jù)位置
tail_cont = 0xffff000004180000; // 表示將mpr_cont作為頁(yè)元數(shù)據(jù)起始地址后頁(yè)區(qū)域尾頁(yè)對(duì)應(yīng)元數(shù)據(jù)位置

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119206
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    18168
  • 控制寄存器
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    11461
  • RTThread
    +關(guān)注

    關(guān)注

    7

    文章

    132

    瀏覽量

    40684
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    通過(guò)Uboot?TFTP啟動(dòng)rt-smart內(nèi)核

    介紹Windows下通過(guò) Uboot??TFTP 方式下載和啟動(dòng)rt-smart 內(nèi)核
    的頭像 發(fā)表于 06-30 12:34 ?3503次閱讀
    通過(guò)Uboot?TFTP<b class='flag-5'>啟動(dòng)</b><b class='flag-5'>rt-smart</b>內(nèi)核

    STM32H7的啟動(dòng)過(guò)程分析

    本章教程主要跟大家講STM32H7的啟動(dòng)過(guò)程,這里的啟動(dòng)過(guò)程是指從CPU上電復(fù)位執(zhí)行第1條指令開(kāi)始(匯編文件)到進(jìn)入C程序main()函數(shù)入口之間的部分。
    的頭像 發(fā)表于 10-17 14:42 ?2117次閱讀

    詳解STM32啟動(dòng)過(guò)程

    本章教程主要跟大家講STM32H7的啟動(dòng)過(guò)程,這里的啟動(dòng)過(guò)程是指從CPU上電復(fù)位執(zhí)行第1條指令開(kāi)始(匯編文件)到進(jìn)入C程序main()函數(shù)入口之間的部分。
    發(fā)表于 11-14 11:24 ?1755次閱讀

    RT-Smart的資料合集

    1、RT-Smart啟動(dòng)過(guò)程在熟悉 RT-Smart 架構(gòu)的過(guò)程中,研究其啟動(dòng)過(guò)程的是必不可少的,那么在系統(tǒng)正常運(yùn)行之前,需要做哪些準(zhǔn)備工
    發(fā)表于 03-22 15:06

    請(qǐng)問(wèn)RT -SMART支持GDB調(diào)試嗎?

    RT-SMART介紹,應(yīng)用程序開(kāi)發(fā)可以用GDB在線調(diào)試?,F(xiàn)在發(fā)布的版本已經(jīng)具有還功能了嗎?原文摘錄:為了更好的支持應(yīng)用程序調(diào)試,在RT-Thread
    發(fā)表于 04-20 09:35

    系統(tǒng)啟動(dòng)過(guò)程

    系統(tǒng)啟動(dòng)過(guò)程系統(tǒng)啟動(dòng)過(guò)程主要由一下幾步組成(以硬盤啟動(dòng)為例):1. 開(kāi)機(jī)2. BIOS 加電自檢 ( Power On Self Test -- POST ),內(nèi)存地址為 0ffff:00003. 將硬盤第一個(gè)
    發(fā)表于 10-11 12:17 ?2219次閱讀

    嵌入式uCLinux內(nèi)核啟動(dòng)過(guò)程分析

    分析uCLinux的啟動(dòng)過(guò)程,可以加快系統(tǒng)啟動(dòng)速度、正確建立應(yīng)用環(huán)境。本文要研究的就是uCLinux操作系統(tǒng)內(nèi)核的啟動(dòng)過(guò)程
    發(fā)表于 08-15 16:51 ?760次閱讀

    IC啟動(dòng)過(guò)程及Vcc電壓波形的認(rèn)知

    IC啟動(dòng)過(guò)程及Vcc電壓波形的認(rèn)知IC啟動(dòng)過(guò)程及Vcc電壓波形的認(rèn)知IC啟動(dòng)過(guò)程及Vcc電壓波形的認(rèn)知IC啟動(dòng)過(guò)程及Vcc電壓波形的認(rèn)知
    發(fā)表于 12-22 14:46 ?10次下載

    Windows XP 啟動(dòng)過(guò)程詳解

    我們每天都在和 Windows 打交道,很多人可能每天都要面對(duì)多次 Windows 的啟動(dòng)過(guò)程,可是您知道在 Windows 的啟動(dòng)過(guò)程背后,隱藏著什么秘密嗎?在這一系列過(guò)程中都用到了哪些重要的系統(tǒng)文件?系統(tǒng)的
    發(fā)表于 11-10 18:24 ?11次下載

    嵌入式系統(tǒng)內(nèi)核引導(dǎo)啟動(dòng)過(guò)程淺析

    嵌入式系統(tǒng)內(nèi)核引導(dǎo)啟動(dòng)過(guò)程淺析
    發(fā)表于 10-30 10:26 ?6次下載
    嵌入式系統(tǒng)內(nèi)核引導(dǎo)<b class='flag-5'>啟動(dòng)過(guò)程</b>淺析

    STM32上電后啟動(dòng)過(guò)程

    STM32上電后啟動(dòng)過(guò)程
    發(fā)表于 11-15 18:21 ?16次下載
    STM32上電后<b class='flag-5'>啟動(dòng)過(guò)程</b>

    stm32啟動(dòng)過(guò)程

    一次性搞定stm32啟動(dòng)模式與啟動(dòng)過(guò)程一、stm32啟動(dòng)模式二、從flash啟動(dòng)過(guò)程2.1 數(shù)據(jù)在堆棧中存儲(chǔ)方式2.2 stm32的正常啟動(dòng)過(guò)程
    發(fā)表于 12-16 16:57 ?8次下載
    stm32<b class='flag-5'>啟動(dòng)過(guò)程</b>

    RL78啟動(dòng)過(guò)程詳解

    RL78啟動(dòng)過(guò)程詳解
    的頭像 發(fā)表于 09-28 16:39 ?1226次閱讀
    RL78<b class='flag-5'>啟動(dòng)過(guò)程</b>詳解

    logd的啟動(dòng)過(guò)程和內(nèi)容

    logd作為native service,系統(tǒng)啟動(dòng)過(guò)程通過(guò)讀取rc文件來(lái)啟動(dòng),相關(guān)的屬性定義在如下logd.rc文件中。 2.2.1 logd啟動(dòng)過(guò)程 logd啟動(dòng)后會(huì)存在三個(gè)用來(lái)服務(wù)
    的頭像 發(fā)表于 11-23 16:54 ?685次閱讀
    logd的<b class='flag-5'>啟動(dòng)過(guò)程</b>和內(nèi)容

    stm32啟動(dòng)過(guò)程詳解

    STM32啟動(dòng)過(guò)程詳解 近年來(lái),STM32微控制器在嵌入式系統(tǒng)中的應(yīng)用越來(lái)越廣泛。STM32微控制器具有高性能、低功耗、易擴(kuò)展和豐富的外設(shè)接口等優(yōu)勢(shì)。而要讓STM32微控制器正常工作,首先要了解它
    的頭像 發(fā)表于 12-08 15:47 ?1212次閱讀