_start階段
系統(tǒng)時先進入_start執(zhí)行。首先判斷cpu核,如果是0號核的話執(zhí)行初始化過程,其它核則執(zhí)行wfe指令進入睡眠。初始化的過程如下:
將異常等級轉(zhuǎn)入el1
設置棧頂指針
清理bss段
初始化mmu的翻譯控制寄存器
設置內(nèi)核和用戶空間頁表基址寄存器并進行初始化階段的頁表設置,此時將內(nèi)核空間虛擬地址映射為物理地址+0xffff0000000000,用戶空間虛擬地址映射為物理地址+0x40000000。
使能mmu,啟用頁表翻譯地址
使用戶空間頁表基地址寄存器失效(原來設置該寄存器只為了跳轉(zhuǎn)高地址前的地址翻譯),只用內(nèi)核地址,并設置棧寄存器為sp_el1
跳轉(zhuǎn)到rtthread_startup
rtthread_startup階段
內(nèi)存相關初始化過程及內(nèi)存管理初步學習
在rt_hw_board_init中進行內(nèi)存相關初始化,這里的目的是設置表示內(nèi)核空間的相關全局數(shù)據(jù)結(jié)構(gòu),及對內(nèi)存的分布進行設置。
執(zhí)行完該部分后,內(nèi)核地址空間相關數(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)核所使用的頁表,為變量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; // 頁元數(shù)據(jù)基址,值為0xfffffdfff0000000
.size = rt_mpr_size; // 頁元數(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; // 表示頁空間起始頁對應的頁元數(shù)據(jù),由于頁元數(shù)據(jù)起始地址(rt_mpr_start)是從0物理地址開始存,所以需要此數(shù)據(jù)
init_mpr_align_end = 0xfffffdfff0900000; // 表示頁空間末尾頁對應的頁元數(shù)據(jù)
early_offset = 0xffff020013880000; // 表示的是起始頁與起始頁元數(shù)據(jù)之間距離
mpr_cont = 0xffff000003880000; // 表示的是如果將頁的元數(shù)據(jù)放頁區(qū)域前元數(shù)據(jù)起始位置
head_cont = 0xffff000004102000; // 表示將mpr_cont作為頁元數(shù)據(jù)起始地址后頁區(qū)域首頁對應元數(shù)據(jù)位置
tail_cont = 0xffff000004180000; // 表示將mpr_cont作為頁元數(shù)據(jù)起始地址后頁區(qū)域尾頁對應元數(shù)據(jù)位置
-
寄存器
+關注
關注
31文章
5403瀏覽量
122944 -
MMU
+關注
關注
0文章
92瀏覽量
18590 -
控制寄存器
+關注
關注
0文章
34瀏覽量
11600 -
RTThread
+關注
關注
8文章
132瀏覽量
41475
發(fā)布評論請先 登錄
詳解STM32啟動過程
使用pahomqtt啟動過程中pipe_fops_open時出現(xiàn)rt_condvar_timedwait ,如何解決?
RT-Smart的資料合集
請問RT -SMART支持GDB調(diào)試嗎?
系統(tǒng)啟動過程
嵌入式uCLinux內(nèi)核啟動過程分析
IC啟動過程及Vcc電壓波形的認知
Windows XP 啟動過程詳解
stm32啟動過程

logd的啟動過程和內(nèi)容

評論