在enable mmu之前可以使用mmu了
生活随笔
收集整理的這篇文章主要介紹了
在enable mmu之前可以使用mmu了
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在enable mmu之前可以使用mmu嗎? 很多人也許都沒用思考過這個問題,或者認(rèn)為太簡單了,這不廢話嗎,在enable mmu之前,怎么可能使用mmu呢…
其實這就是大家的一個誤區(qū)。事實上只要Core一上電,MMU就可以使用的,只不過是如果你沒用開啟SCTLR.M比特,PE發(fā)起的讀寫不會自動經(jīng)過MMU翻譯,當(dāng)然這個時候你是可以手動執(zhí)行AT指令進(jìn)行翻譯的,在翻譯的時候如果你沒用配置也頁表、基地址、TCR等寄存器,MMU在翻譯也會報錯。
下面我們以optee os代碼為例,展示一下在enable MMU之前,就使用了地址翻譯的這種情況:
void core_init_mmu_regs(struct core_mmu_config *cfg){uint64_t ips = get_physical_addr_size_bits();uint64_t mair = 0;uint64_t tcr = 0;cfg->ttbr0_el1_base = virt_to_phys(l1_xlation_table[0][0]);cfg->ttbr0_core_offset = sizeof(l1_xlation_table[0][0]);mair = MAIR_ATTR_SET(ATTR_DEVICE, ATTR_DEVICE_INDEX);mair |= MAIR_ATTR_SET(ATTR_IWBWA_OWBWA_NTR, ATTR_IWBWA_OWBWA_NTR_INDEX);cfg->mair_el1 = mair;tcr = TCR_RES1;tcr |= TCR_XRGNX_WBWA << TCR_IRGN0_SHIFT;tcr |= TCR_XRGNX_WBWA << TCR_ORGN0_SHIFT;tcr |= TCR_SHX_ISH << TCR_SH0_SHIFT;tcr |= ips << TCR_EL1_IPS_SHIFT;tcr |= 64 - CFG_LPAE_ADDR_SPACE_BITS;/* Disable the use of TTBR1 */tcr |= TCR_EPD1;/** TCR.A1 = 0 => ASID is stored in TTBR0* TCR.AS = 0 => Same ASID size as in Aarch32/ARMv7*/cfg->tcr_el1 = tcr;} 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的在enable mmu之前可以使用mmu了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言中compile time ass
- 下一篇: 有关中断唤醒源的思考