日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

鴻蒙輕內(nèi)核源碼分析:MMU 協(xié)處理器

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-20 14:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、 ARM C15 協(xié)處理器

在 ARM 嵌入式應(yīng)用系統(tǒng)中, 很多系統(tǒng)控制由 ARM CP15 協(xié)處理器來完成的。CP15 協(xié)處理器包含編號 0-15 的 16 個 32 位的寄存器。例如,ARM 處理器使用 C15 協(xié)處理器的寄存器來控制 cache、TCM(Tightly-Coupled Memory)和存儲器管理。CP15 的各個寄存器的概要信息如下圖,圖片來自官方資料《ARM? Cortex?-A Series Version: 4.0 Programmer’s Guide》。

wKgZomXURhaAGcYoAAMU1aaKtPg526.png

wKgaomXURh-AUmc6AAF_vM3IDzA715.png

wKgaomXURjKAZrqSAAHXMTBCZzI662.png


在這些 C15 寄存器中和 MMU 關(guān)系較大的有 C2、C7、C17 寄存器,這些寄存器的作用,從上圖可以看出,分別是:

CP15 C2 寄存器

Memory protection and control registers,內(nèi)存保護和控制寄存器,包含 Translation Table Base Register 0 (TTBR0)、Translation Table Base Register 1 (TTBR1) 和 Translation Table Base Control Register (TTBCR)。TTBR0、TTBR1 是 L1 轉(zhuǎn)換頁表的基地址,TTCR 控制 TTBR0 和 TTBR1 的使用。

CP15 C7 寄存器

Cache and branch predictor maintenance functions、Data and instruction barrier operations 用于高速緩存和寫緩存控制。

CP15 C13 寄存器

Context ID Register (CONTEXTIDR)、Software thread ID registers 用于保存進程標識符(asid 地址空間編號)。

2、ARM C15 協(xié)處理器匯編指令

訪問 CP15 寄存器的指令主要是 MCR 和 MRC 這兩個指令。本小節(jié)詳細介紹下這 2 個匯編指令。先看下指令的含義,MCR 是 ARM 處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令,英文為 Move CPU register to coprocessor register,MRC 是協(xié)處理器寄存器到 ARM 處理器寄存器的數(shù)據(jù)傳送指令,英文為 Move from coprocessor register to CPU register。這 2 個指令的語義格式如下,可以看出語義格式是一樣的,但是讀取寫入含義會有差異。MCR 是讀取 Rt 寄存器寫入?yún)f(xié)處理器寄存器 CRn、CRm,而 MRC 是讀取協(xié)處理器寄存器 CRn、CRm 寫入 Rt 寄存器。

MCR{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2} MRC{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}

MCR 詳細的語義介紹如下:

Syntax MCR{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2} where: cond is an optional condition code. 可選的條件碼。 coproc is the name of the coprocessor the instruction is for. The standard name is pn, where n is an integer in the range 0 to 15.協(xié)處理器的名稱,標準名稱為pn,其中n為0-15,例如p14、p15。 opcode1 is a 3-bit coprocessor-specific opcode. 3位的操作碼。 opcode2 is an optional 3-bit coprocessor-specific opcode.可選的3位操作碼。 Rt is an ARM source register. Rt must not be PC. 要讀取的ARM寄存器,不能為PC寄存器。 CRn, CRm are coprocessor registers.要寫入的協(xié)處理器寄存器。

MRC 詳細的語義介紹如下:

Syntax MRC{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2} where: cond is an optional condition code. 可選的條件碼。 coproc is the name of the coprocessor the instruction is for. The standard name is pn, where n is an integer in the range 0 to 15.協(xié)處理器的名稱,標準名稱為pn,其中n為0-15,例如p14、p15。 opcode1 is a 3-bit coprocessor-specific opcode.3位的操作碼。 opcode2 is an optional 3-bit coprocessor-specific opcode.可選的3位操作碼 Rt is the ARM destination register. Rt must not be PC.要寫入的ARM寄存器,不能為PC寄存器。 Rt can be APSR_nzcv. This means that the coprocessor executes an instruction that changes the value of the condition flags in the APSR. Rt也可以為APSR_nzcv。 CRn, CRm are coprocessor registers.要讀取的協(xié)處理器寄存器。

3、MMU 匯編代碼

在 archarmarmincludearm.h 文件中,封裝了 CP15 協(xié)處理器相關(guān)的寄存器操作匯編函數(shù)。我們主要看下 MMU 相關(guān)的部分。

3.1 CP15 C2 TTBR 轉(zhuǎn)換表基地址寄存器

代碼比較簡單,結(jié)合下圖,自行查看即可。該圖來自《ARM Cortex-A9 Technical Reference Manual r4p1》CP15 system control registers grouped by CRn order 部分。

wKgZomXURkuAVcDTAAC0gU-1zPI091.png

STATIC INLINE UINT32 OsArmReadTtbr(VOID) { UINT32 val; __asm__ volatile("mrc p15, 0, %0, c2,c0,0" : "=r"(val)); return val; } STATIC INLINE VOID OsArmWriteTtbr(UINT32 val) { __asm__ volatile("mcr p15, 0, %0, c2,c0,0" ::"r"(val)); __asm__ volatile("isb" ::: "memory"); } STATIC INLINE UINT32 OsArmReadTtbr0(VOID) { UINT32 val; __asm__ volatile("mrc p15, 0, %0, c2,c0,0" : "=r"(val)); return val; } STATIC INLINE VOID OsArmWriteTtbr0(UINT32 val) { __asm__ volatile("mcr p15, 0, %0, c2,c0,0" ::"r"(val)); __asm__ volatile("isb" ::: "memory"); } STATIC INLINE UINT32 OsArmReadTtbr1(VOID) { UINT32 val; __asm__ volatile("mrc p15, 0, %0, c2,c0,1" : "=r"(val)); return val; } STATIC INLINE VOID OsArmWriteTtbr1(UINT32 val) { __asm__ volatile("mcr p15, 0, %0, c2,c0,1" ::"r"(val)); __asm__ volatile("isb" ::: "memory"); } STATIC INLINE UINT32 OsArmReadTtbcr(VOID) { UINT32 val; __asm__ volatile("mrc p15, 0, %0, c2,c0,2" : "=r"(val)); return val; } STATIC INLINE VOID OsArmWriteTtbcr(UINT32 val) { __asm__ volatile("mcr p15, 0, %0, c2,c0,2" ::"r"(val)); __asm__ volatile("isb" ::: "memory"); }

3.2 CP15 C7 高速緩存寄存器

代碼比較簡單,結(jié)合下圖,自行查看即可。該圖是 C7 寄存器的部分截圖。

wKgZomXURlWASRI-AAD0Y7kcroU999.png

STATIC INLINE UINT32 OsArmReadBpiall(VOID) { UINT32 val; __asm__ volatile("mrc p15, 0, %0, c7,c5,6" : "=r"(val)); return val; } STATIC INLINE VOID OsArmWriteBpiall(UINT32 val) { __asm__ volatile("mcr p15, 0, %0, c7,c5,6" ::"r"(val)); __asm__ volatile("isb" ::: "memory"); } STATIC INLINE UINT32 OsArmReadBpiallis(VOID) { UINT32 val; __asm__ volatile("mrc p15, 0, %0, c7,c1,6" : "=r"(val)); return val; } STATIC INLINE VOID OsArmWriteBpiallis(UINT32 val) { __asm__ volatile("mcr p15, 0, %0, c7,c1,6" ::"r"(val)); __asm__ volatile("isb" ::: "memory"); }

3.3 CP15 C13 進程標識符寄存器

代碼比較簡單,結(jié)合下圖,自行查看即可。

wKgZomXURl6AMvzCAACc0RjQUio347.png

STATIC INLINE UINT32 OsArmReadContextidr(VOID) { UINT32 val; __asm__ volatile("mrc p15, 0, %0, c13,c0,1" : "=r"(val)); return val; } STATIC INLINE VOID OsArmWriteContextidr(UINT32 val) { __asm__ volatile("mcr p15, 0, %0, c13,c0,1" ::"r"(val)); __asm__ volatile("isb" ::: "memory"); }

4 MMU 上下文切換

在之前的系列,我們了解到每個用戶進程都有獨立的進程空間。在進程切換時,MMU 上下文也會切換,相應(yīng)的函數(shù)為 LOS_ArchMmuContextSwitch ()??焖俜治鱿略摵瘮?shù)的代碼。

⑴處讀取 TTBCR 寄存器的狀態(tài)值,如果傳入?yún)?shù) archMmu 不為空,執(zhí)行⑵使能 TTBR0,否則執(zhí)行⑶使其失能 TTBR0。⑷處把內(nèi)核地址空間的進程空間標識符 asid 寫入 C13 寄存器。⑸處更新 TTB 頁表基地址和 TTB 狀態(tài)信息到相應(yīng)寄存器。⑹處把進程空間的進程標識符寫入 C13 寄存器。

VOID LOS_ArchMmuContextSwitch(LosArchMmu *archMmu) { UINT32 ttbr; ⑴ UINT32 ttbcr = OsArmReadTtbcr(); if (archMmu) { ⑵ ttbr = MMU_TTBRx_FLAGS | (archMmu->physTtb); /* enable TTBR0 */ ttbcr &= ~MMU_DESCRIPTOR_TTBCR_PD0; } else { ⑶ ttbr = 0; /* disable TTBR0 */ ttbcr |= MMU_DESCRIPTOR_TTBCR_PD0; } #ifdef LOSCFG_KERNEL_VM /* from armv7a arm B3.10.4, we should do synchronization changes of ASID and TTBR. */ ⑷ OsArmWriteContextidr(LOS_GetKVmSpace()->archMmu.asid); ISB; #endif ⑸ OsArmWriteTtbr0(ttbr); ISB; OsArmWriteTtbcr(ttbcr); ISB; #ifdef LOSCFG_KERNEL_VM if (archMmu) { ⑹ OsArmWriteContextidr(archMmu->asid); ISB; } #endif }



審核編輯 黃宇

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

    關(guān)注

    68

    文章

    20339

    瀏覽量

    255346
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    135

    文章

    9589

    瀏覽量

    393787
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    689

    瀏覽量

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

    關(guān)注

    0

    文章

    92

    瀏覽量

    19292
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    3031

    瀏覽量

    46192
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    深入解析MC68882浮點協(xié)處理器:高性能計算的理想之選

    深入解析MC68882浮點協(xié)處理器:高性能計算的理想之選 在當今的電子設(shè)計領(lǐng)域,浮點協(xié)處理器對于提升系統(tǒng)的計算能力起著至關(guān)重要的作用。MC68882作為一款經(jīng)典的浮點
    的頭像 發(fā)表于 04-09 10:40 ?224次閱讀

    DS2476 DeepCover安全協(xié)處理器:硬件安全的理想之選

    DS2476 DeepCover安全協(xié)處理器:硬件安全的理想之選 在當今數(shù)字化時代,數(shù)據(jù)安全至關(guān)重要。無論是物聯(lián)網(wǎng)設(shè)備、智能配件還是主機控制,都需要強大的安全保障。DS2476 DeepCover
    的頭像 發(fā)表于 04-01 15:40 ?155次閱讀

    請問E203怎么擴展協(xié)處理器?

    我看說E203支持自定義擴展,有EAI接口,可是為什么我只在LSU中找到了跟讀取存儲有關(guān)的EAI接口呢,別的比如eai_req_instr沒有找到,請問誰知道在哪嗎,或者說如果要加可擴展協(xié)處理器的話,這些接口要自己加嗎?
    發(fā)表于 11-10 07:41

    NICE協(xié)處理器接口信號解讀--以demo為例

    的復(fù)位信號。 nice_active表示nice協(xié)處理器是否正在工作,但該信號在上層文件中未例化,如下圖所示。 nice_mem_holdup信號在e203_lsu_ctrl.v文件中用于覆蓋cpu
    發(fā)表于 10-31 08:01

    示例協(xié)處理器的實現(xiàn)步驟以及錯誤匯總

    大家好,我們是想的不對做的隊,報名編號是CICC1429,本次給大家介紹示例協(xié)處理器詳細的實現(xiàn)步驟以及部分錯誤 1. mcs文件的生成與燒寫 參考4.2. How to generate mcs
    發(fā)表于 10-31 06:22

    利用Verdi調(diào)試協(xié)處理器的實現(xiàn)步驟

    本次給大家介紹的是利用Verdi調(diào)試協(xié)處理器的實現(xiàn)步驟。 有時為了觀察協(xié)處理器運行情況,需要查看協(xié)處理器
    發(fā)表于 10-30 08:26

    MD5信息摘要算法實現(xiàn)二(基于蜂鳥E203協(xié)處理器

    本設(shè)計首先根據(jù)MD5協(xié)處理器的功能設(shè)計MD5算法IP核,軟件部分使用串口程序助手進行64位加解密結(jié)果的輸出,E203內(nèi)核根據(jù)地址取出對應(yīng)的數(shù)據(jù),使用相關(guān)的指令進行傳輸顯示。通過NICE接口將MD5
    發(fā)表于 10-30 07:54

    基于E203 RISC-V的音頻信號處理系統(tǒng) -協(xié)處理器的乘累加過程

    協(xié)處理器簡介 RISC-V具有很高的可擴展性,既預(yù)留出了指令編碼空間,也提供了預(yù)定義的Custom指令;RISC-V的標準指令集僅使用了少部分指令編碼空間,更多的指令編碼空間被預(yù)留給用戶進行擴展
    發(fā)表于 10-28 06:18

    蜂鳥E203協(xié)處理器EAI指令及接口

    ,各種不同的組合代表了不同的指令類型,我們用到了預(yù)定義的custom-3指令擴展協(xié)處理器指令,因此指令的opcode為7’b1111011。 由于蜂鳥E203處理器核基于Custom指令進行
    發(fā)表于 10-24 07:23

    NICE協(xié)處理器demo分析及測試

    實現(xiàn)思路: 1.硬件設(shè)計,編寫相應(yīng)的verilog文件,需要注意的是NICE協(xié)處理器定義了一些基本的接口; 2.編寫驅(qū)動,通過內(nèi)聯(lián)匯編的偽指令.insn配置相關(guān)的驅(qū)動設(shè)置; 3.編寫用于測試
    發(fā)表于 10-23 07:05

    基于E203 NICE協(xié)處理器擴展指令

    擴展到某些特定領(lǐng)域可以非常明顯地提高能效比。NICE協(xié)處理器(Nuclei Instruction Co-unitExtension,蜂鳥內(nèi)核指令協(xié)
    發(fā)表于 10-21 14:35

    基于E203 NICE協(xié)處理器擴展指令2.0

    非常明顯地提高能效比。NICE協(xié)處理器(Nuclei Instruction Co-unit Extension,蜂鳥內(nèi)核指令協(xié)處理器擴展機
    發(fā)表于 10-21 10:39

    揭秘瑞芯微算力協(xié)處理器,RK3576/RK3588強大算力搭檔

    瑞芯微算力協(xié)處理器-Gongga1(簡稱“貢嘎”),是瑞芯微針對旗艦芯片平臺RK3576/RK3588等SoC平臺配套的算力處理器。憑借其先進的封裝技術(shù)、高性能低功耗、超低延遲響應(yīng)和多模態(tài)能力,為端
    的頭像 發(fā)表于 07-17 10:00 ?1580次閱讀
    揭秘瑞芯微算力<b class='flag-5'>協(xié)</b><b class='flag-5'>處理器</b>,RK3576/RK3588強大算力搭檔

    請問NICE協(xié)處理器與傳統(tǒng)ocb外設(shè)相比的優(yōu)勢有什么?

    使用擴展指令調(diào)用NICE協(xié)處理器完成預(yù)定操作,給出的優(yōu)勢通常為代替CPU處理數(shù)據(jù),但其實使用片上總線掛一個外設(shè),然后驅(qū)動外設(shè)完成操作也可以實現(xiàn)相同的功能,所以想問一下協(xié)
    發(fā)表于 05-29 08:21

    NICE協(xié)處理器與傳統(tǒng)ocb外設(shè)相比的優(yōu)勢有什么?

    使用擴展指令調(diào)用NICE協(xié)處理器完成預(yù)定操作,給出的優(yōu)勢通常為代替CPU處理數(shù)據(jù),但其實使用片上總線掛一個外設(shè),然后驅(qū)動外設(shè)完成操作也可以實現(xiàn)相同的功能,所以想問一下協(xié)
    發(fā)表于 05-28 08:31
    米林县| 威信县| 元谋县| 六盘水市| 炉霍县| 余干县| 石狮市| 伊春市| 资中县| 修水县| 玉林市| 西和县| 道孚县| 磴口县| 济阳县| 巴林右旗| 揭西县| 东城区| 西吉县| 齐河县| 简阳市| 海原县| 且末县| 玉环县| 木兰县| 调兵山市| 合水县| 宣武区| 绥中县| 万荣县| 磴口县| 永靖县| 简阳市| 大埔县| 阳新县| 公安县| 星座| 永泰县| 绵阳市| 安平县| 泗水县|