日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在enable mmu之前可以使用mmu了

發(fā)布時間:2025/3/21 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。