ok6410利用MMU實現虛擬位址點燈

2021-09-24 20:10:02 字數 2483 閱讀 3879

mmu其實就是乙個頁表。將虛擬位址通過查表的方式,對應到實體地址去他由乙個或一組晶元組成,一般存在與協處理器中。

1.將虛擬位址轉化為實體地址

2.訪問許可權管理

這裡先講記憶體對映功能,

mmu可以將cpu定址的虛擬記憶體轉化為實際的物理記憶體,通過查表的方式,這樣滿足多程序或者超過物理記憶體的虛擬記憶體(通過將需要的內容從硬碟or儲存器拷貝到記憶體,再將暫時不用的記憶體存回硬碟or儲存器)

mmu要自動進行虛擬位址到實體地址的轉化,首先要找到一級頁表,而一級頁表的基位址(ttb:translation table base)則是儲存在cp15的c2暫存器中。因此,當程式設計師建立好相應的頁表後,需要將頁表基位址寫入該暫存器。(arm11文件)

mmu有一級轉換和二級轉換,其實就是查幾次表。對於一級轉換,就是只查一次頁表,就確定了實體地址。這個在s3c6410中,方式是段對映。對於二級轉換,就要查兩次頁表或者三次,才能確定實體地址,這個在s3c6410中。有兩種方式,一種細頁方式,一種粗頁方式。這兩種的區別就是每一頁對應的大小不一樣而已。

6410支援兩種格式的頁表:

1.支援子頁面訪問模式的向後拓展模式。

2. armv6格式,不支援子頁面訪問許可權,但支援armv6 mmu特性,還新增了trustzone的ns屬性位。

特性有兩種模式下p:如果支援並為記憶體區域設定p位,則向系統記憶體控制器表明該記憶體區域已啟用ecc,一項記憶體校驗糾錯功能。arm1176jzf-s處理器不支援p位。

當第一級描述符的位[1:0]為b01時,描述符指向第二級頁表,稱為粗頁表。

b01則為段模式。無效翻譯bits b00及保留項的翻譯b11,均會導致翻譯錯誤。

向後拓展模式:

一級描述符格式

二級描述符格式

頁表查詢示意圖:

armv6格式:

一級描述符

二級描述符

頁表查詢示意圖:

查詢模式詳解:

首先,記憶體對映可以被分為2部分,表0與表1,他們由引數n來控制,n的值被寫入ttbcr來完成設定。n與表0的大小如下所示:

在做頁表查詢時會根據虛擬位址的高n位是否為零判斷用哪個表(為0用0表,不為0用1表)

這裡詳細講一下段頁表,其他的頁表建立模式只是層數和格式不同,並無太大區別(我看著是這樣)

建立過程首先根據頁表起始位址與虛擬位址高12位找到頁表位址,之後將高12位賦值為實體地址高12位,ap位訪問許可權設為11, domain為0,xn為1,c,b根據需求設定,加快執行速率的選項。

這樣就完成的一項頁表的建立,需要哪些對映就建立那些。

建立完頁表後就準備開啟mmu

首先將mmu的實體地址傳入,無效icaches和dcaches,無效指令、資料tlb,與訪問控制器均為11,不進行許可權檢查(沒做許可權的那些東西,以後做),寫頁表基位址,讀控制暫存器的並逐位修改,

控制暫存器的低16位含義為:。rvi 。。rs b。。。 。cam,。表示無關位

* r : 表示換出cache中的條目時使用的演算法,

* 0 = random replacement;1 = round robin replacement

* v : 表示異常向量表所在的位置,

*0 = low addresses = 0x00000000;1 = high addresses = 0xffff0000

* i : 0 = 關閉icaches;1 = 開啟icaches

* r、s : 用來與頁表中的描述符一起確定記憶體的訪問許可權

* b : 0 = cpu為小字節序;1 = cpu為大字節序

* c : 0 = 關閉dcaches;1 = 開啟dcaches

* a : 0 = 資料訪問時不進行位址對齊檢查;1 = 資料訪問時進行位址對齊檢查

* m : 0 = 關閉mmu;1 = 開啟mmu

按需要進行設定,並最後開啟mmu

實現了mmu虛擬位址對映

OK6410裸機程式 hello world

上面已經解決 了幾個問題。現在我們的狀態 可以在pc ok6410 之間進行tftp傳輸,確定了一下可用的位址 空間,下面我們來說一下printf除錯 因為沒有jlink,只能用printf除錯,你也許會問,我們自己實現printf麼?答曰 不是,我們只是弄個hello world,何必那麼認真呢?...

ok6410 主機tftp 傳輸

1 開發環境 pc archlinux,minicom 或者 kermit.工具不會用的google啊,呵呵 開發板 ok6410b 256 sdram,2g nand flash 兩者之間 通訊用tftp傳輸。有人用windows下的 dnw進行傳輸,由於我沒windows,另外dnw貌似有時候有...

OK6410硬體學習 MFC(一)

s3c6410是三星電子公司生產的一款基於arm11 76jzf s核的微處理器。本人著重介紹其獨特的硬體mfc的原理及應用。1.mfc的軟體結構 多 應用程式有兩種方式使用s3c6410的硬體編解碼器mfc。方式1 多 應用程式呼叫mfc的解碼或解碼api函式,這些api函式實際是驅動i octr...