如今,已經(jīng)是到了main的世界了。下面就要來體驗ARM11的MMU,這個東西在STM32中是沒有的。之前在核心初始化過程中,是將MMU功能給關(guān)閉的。那是因為那個時候,操作的都是物理地址,所以需要將MMU關(guān)閉。
MMU,內(nèi)存管理單元。主要是有兩個作用:
1、 將虛擬地址轉(zhuǎn)化為物理地址
2、 內(nèi)存的訪問權(quán)限管理
上面這個圖就說明了MMU的作用。
有三個任務(wù)在運行,運行的地址都是0x400000,如果不進行處理,這肯定是不行的。所以加入了MMU,MMU其實就是一個頁表。將虛擬地址通過查表的方式,對應(yīng)到物理地址去。雖然三個任務(wù)的運行地址都是0x400000,但是這個地址是虛擬地址,在頁表中,將每個任務(wù)的虛擬地址對應(yīng)到不同的物理地址,這樣,就實現(xiàn)了各個任務(wù)雖然是同一個虛擬地址,但是在不同的物理地址中運行。
所以要使用MMU,就首先要建立這個頁表,這個頁表是誰建立的,就是我們自己建立的。建立虛擬內(nèi)存對應(yīng)的物理內(nèi)存的頁表,這樣,MMU才能從頁表中去找到虛擬地址對應(yīng)的物理地址。
MMU有一級轉(zhuǎn)換和二級轉(zhuǎn)換,其實就是查幾次表。對于一級轉(zhuǎn)換,就是只查一次頁表,就確定了物理地址。這個在S3C6410中,方式是段映射。對于二級轉(zhuǎn)換,就要查兩次頁表或者三次,才能確定物理地址,這個在S3C6410中。有兩種方式,一種細(xì)頁方式,一種粗頁方式。這兩種的區(qū)別就是每一頁對應(yīng)的大小不一樣而已。
上圖是一級轉(zhuǎn)換描述符。通過虛擬地址的[31:20],找到對應(yīng)的轉(zhuǎn)換描述符,這個轉(zhuǎn)換描述符其實就是一個存在ram中的32位的一個數(shù)據(jù)。通過判斷這個描述符的最后兩位,判斷是什么轉(zhuǎn)換。如果是段轉(zhuǎn)換,就按照段轉(zhuǎn)換的格式去轉(zhuǎn)化物理地址。如果是頁轉(zhuǎn)換,就在去找第二級的頁表,然后再按照二級頁表的格式去轉(zhuǎn)化物理地址。
首先看下一級轉(zhuǎn)換頁表的段轉(zhuǎn)換。
一級頁表總包含4096個轉(zhuǎn)換描述符。因為是通過虛擬地址的31:20位尋址的。12位能夠表示的數(shù)最大是4096,所以說一級頁表總共有4096個轉(zhuǎn)換符。頁表的首地址就是TTB,這個地址是很重要的,因為有了這個地址才能知道頁表是存在什么地方的,才能通過偏移找到對應(yīng)的描述符。所以,是有一個寄存器來保存這個地址的,這個寄存器就在CP15的c2寄存器。
通過虛擬地址的高12位偏移,找到頁表中的對應(yīng)描述符,判斷描述符的最后兩位,確定是什么轉(zhuǎn)換。10的話就表示是段轉(zhuǎn)換。
判斷是段轉(zhuǎn)換后,將描述符的高12位取出,這個就是物理的基地址,在和虛擬地址的后20位拼接,就得到對應(yīng)的物理地址。
對于段轉(zhuǎn)換,每一個段代表物理的1MB地址。為什么是1MB了。因為總共是有4096個描述符,而ARM11是32位的,所以能夠表示的空間是4G,這樣除下來,不就每一段就表示1MB空間了。
二級轉(zhuǎn)換的原理也是一樣的。只不過需要多查幾次表。這里就大致畫個細(xì)頁的轉(zhuǎn)換圖。
就是通過不斷的查表,然后得到物理地址。
目前學(xué)習(xí)是基于段轉(zhuǎn)換的學(xué)習(xí),所以下面就說下段轉(zhuǎn)換。先來看看一級頁表描述符。
最后兩位來表示是什么轉(zhuǎn)換。10是段轉(zhuǎn)換。
B:表示是否使能write buffer
C: 表示是否開啟cache
XN:
Domain: 用來說明該段屬于哪一個域,ARM11共有16個域,每個域可以設(shè)定不同的權(quán)限。將段分配到某個域,就使這段的權(quán)限和設(shè)定的域權(quán)限一樣。
P:表示段區(qū)間有ECC,ARM11不支持,所以這一位為0.
AP:訪問權(quán)限,這個配合域,說明該段地址的訪問權(quán)限。
TEX:這個目前不是很清楚作用。
APX: 提供額外的訪問權(quán)限。
S: 表示區(qū)域是否共享。0不共享,1共享。這個手冊上說,是為了多核使用的。目前用不到,設(shè)置為0.
nG:
NS:
Section base address:這個就是段的物理地址的高12位。
下圖是訪問權(quán)限
為了讓空間能夠讀寫,所以APX和AP[1:0]的值設(shè)置為011.
這里設(shè)置的訪問權(quán)限,還要配合設(shè)置的域。ARM11支持16個域,由CP15的C3來設(shè)置。在ARM11核手冊195頁,有說明:
寄存器的每兩個位對應(yīng)一個區(qū)域,設(shè)置不同的值,對訪問權(quán)限也不一樣。設(shè)置為00或10的話,以訪問就產(chǎn)生異常,01的話,需要檢查MMU中設(shè)置的權(quán)限。設(shè)置為11,就是不進行訪問權(quán)限的判斷。都認(rèn)為是可以訪問的。
這里為了簡單,通通設(shè)置為11。所以這個寄存器的值就是0xffffffff。
下面就要進行程序的設(shè)計了。
第一步,就是建立頁表。都使用段映射的方式,那么就要將段映射的描述符寫入到相應(yīng)的內(nèi)存中去。
首先將頁表放在ddr的第一個位置,也就是0x50000000。所以需要將這個地址寫入到TTB中。
這次就通過虛擬地址實現(xiàn)燈閃爍,所以需要建立GPIO寄存器的虛擬地址到物理地址映射。
其次,開啟MMU后,使用的就是虛擬地址了,所以還要建立程序段的頁表,不然一旦開啟MMU,CPU去取指令,這個時候發(fā)出的就是虛擬地址,但是又沒有建立虛擬地址到物理地址的映射表。這樣的話,就取不到指令了,程序就崩潰了。所以還需要對代碼區(qū)建立映射頁表。代碼區(qū)的映射就是將虛擬地址直接轉(zhuǎn)換為物理地址使用。
先確定使用GPIO的兩個寄存器地址
就更改前面8位的值。下面就要將這個地址給映射到0x7F000000區(qū)域去。
代碼也是比較簡單的。首先申明一個ttb指針,這個指針就指向一級表的基地址,也就是ddr的首地址,0x50000000。然后再申明兩個變量,一個表示虛擬地址,一個表示物理地址。
根據(jù)前面的一級段描述符格式,往對應(yīng)的內(nèi)存單元寫入數(shù)據(jù)即可。段描述符的高12位是物理地址的高12位,所以首先有一個物理地址和0xFFF00000與的操作,將物理地址的高12位寫入到段描述符中。
后面的位就進行相應(yīng)的配置即可。看看這個定義的宏。
設(shè)置為訪問權(quán)限是11,也就是不進行訪問權(quán)限的檢查。將域設(shè)置為0。CACHE和write BUFFER都給關(guān)掉。因為這只是對一個寄存器的操作,沒有必要使用CACHE和write BUFFER。
這里用宏定義的話,程序的易讀性好好得多,當(dāng)然也可以直接給這個描述符賦值,不用這種宏定義的方式,但是這樣程序易讀性就差了,因為要去查手冊才能知道你賦這個值有什么用。
這里使用*(ttb + (vaddr >> 20))來對對應(yīng)的頁描述符進行賦值。在一級頁表中,是通過虛擬地址的高12位來決定偏移是多少。高12位也就是位移20位,所以這里就是加上虛擬地址右移20位的值,也就是取出高12位的值。注意,這里是指針操作,假設(shè)這個時候虛擬地址的高12位值是5,那么寫的地址不是0x50000005,而是0x50000014。因為指針的數(shù)據(jù)類型是long型,4個字節(jié),所以加1,地址就會加4,加5,地址就會加5*4=20。
這樣,就建立好了GPIO的頁表。訪問虛擬地址0xc7000000,也就是訪問物理地址0x7f000000。整個段空間是1Mb。
接著就要建立代碼區(qū)的頁表。
這個時候,代碼已經(jīng)是在內(nèi)存中運行的了。所以,直接將內(nèi)存的所有地址空間進行映射,空間是64MB大小。
這里使用的宏
其實就是多一個開啟CACHE和WRITE BUFFER。
內(nèi)存映射是映射一片區(qū)域,從0x50000000地址開始到0x54000000這64M的虛擬地址給映射到0x50000000地址開始到0x54000000這64M物理地址上去。這樣,即使使用虛擬地址去取ddr中數(shù)據(jù),也是能夠取到的。
因為一個段是映射的1MB空間,所以總共需要64個段,十六進制也就是0x40。所以在while里面判斷是虛擬地址要小于0x54000000。再者,每一個段表示1MB空間,所以虛擬地址和物理地址都要加1MB。也就是0x100000。
這樣,就將頁表給建立好了。如果還需要使用其他地址區(qū)域,就都得為這些區(qū)域建立映射表。
下面就要來開啟MMU了。
之前說過,有一個TTB是很重要的,保存的是一級頁表的首地址。首先就應(yīng)該先要設(shè)置這個TTB。往CP15的C2寄存器里面寫入這個值就好了,因為這個寄存器就是保存的TTB。
然后是設(shè)置域的權(quán)限,將域的權(quán)限設(shè)置為11,不進行訪問權(quán)限檢查。設(shè)置CP15的c3寄存器。
最后打開MMU。設(shè)置CP15的c1寄存器組的c0。
是對CP15進行操作,用C語言是實現(xiàn)不了的,使用嵌入?yún)R編。
這樣,就設(shè)置好了MMU,并打開了MMU。之后使用的地址都是虛擬地址了。而且該虛擬地址必須是要在頁表中建立的,不然的話,就會產(chǎn)生異常。
后面使用虛擬地址來讓燈閃爍。
代碼和之前代碼一樣,不過只是地址變量,寄存器使用的地址是虛擬地址了,也不是物理地址了。
總結(jié)一下,MMU的作用其實就是地址的轉(zhuǎn)換,將虛擬地址轉(zhuǎn)換為物理地址。不過在bootloader開發(fā)階段,這個MMU是不使用的。因為在這階段,要配置大量的寄存器來對硬件進行一些初始化,如果使用MMU的話,就要對這些寄存器的地址都要建立頁表,使CPU能夠訪問到。這就比較麻煩了。不過在跑操作系統(tǒng)的時候,這個又是很需要的。這讓內(nèi)存管理變得方便。進程都使用虛擬地址,操作系統(tǒng)對這些虛擬地址進行映射到具體的物理地址上去,就感覺每個進程都是可以訪問到4G空間的。
對比STM32:
STM32沒有MMU,只有MPU,對內(nèi)存保護。相當(dāng)于實現(xiàn)了MMU的一半功能。
上一篇:基于S3C6410的ARM11學(xué)習(xí)(十七) 串口走起來
下一篇:基于S3C6410的ARM11學(xué)習(xí)(十四) 終于到main了
推薦閱讀
史海拾趣
Electroswitch Electronics Products(以下簡稱“Electroswitch”)成立于1986年,是Electro Switch Corp的一個子公司,后者早在1946年就已創(chuàng)立。在創(chuàng)立之初,Electroswitch就致力于設(shè)計和制造高品質(zhì)的開關(guān)產(chǎn)品,以滿足電子應(yīng)用領(lǐng)域的各種需求。通過不斷的技術(shù)創(chuàng)新和產(chǎn)品優(yōu)化,Electroswitch逐漸在電子行業(yè)中樹立了良好的聲譽。
常州能動(ENDRIVE)公司自創(chuàng)立之初,就將技術(shù)創(chuàng)新作為公司發(fā)展的核心驅(qū)動力。在公司發(fā)展的早期階段,研發(fā)團隊成功開發(fā)出一款高效能、低能耗的電源管理芯片,這一創(chuàng)新產(chǎn)品在市場上引起了廣泛關(guān)注。通過不斷的技術(shù)迭代和優(yōu)化,這款芯片的性能逐漸提升,成本逐漸降低,成為了公司的明星產(chǎn)品,為公司的快速發(fā)展奠定了堅實基礎(chǔ)。
隨著企業(yè)規(guī)模的不斷擴大,Arctic Silicon Devices逐漸意識到承擔(dān)社會責(zé)任的重要性。公司積極參與公益事業(yè),通過捐款、捐物等方式支持教育、環(huán)保等領(lǐng)域的發(fā)展。同時,公司還加強了對員工福利的關(guān)注和投入,為員工提供了良好的工作環(huán)境和發(fā)展空間。這些舉措不僅提升了公司的社會形象,也增強了員工的歸屬感和忠誠度。
以上五個故事雖然基于虛構(gòu)的Arctic Silicon Devices公司,但它們反映了電子行業(yè)中企業(yè)發(fā)展的常見路徑和關(guān)鍵要素。通過技術(shù)突破、國際化戰(zhàn)略、品質(zhì)管理、創(chuàng)新合作和社會責(zé)任等方面的努力,一個電子企業(yè)可以在競爭激烈的市場中脫穎而出,實現(xiàn)可持續(xù)發(fā)展。
隨著全球環(huán)保意識的不斷提高,AB Connectors Ltd積極響應(yīng)國家綠色發(fā)展的號召,將環(huán)保理念融入到企業(yè)的生產(chǎn)經(jīng)營中。公司采用環(huán)保材料和生產(chǎn)工藝,減少了對環(huán)境的污染。同時,公司還加強了對廢棄物的處理和回收利用,實現(xiàn)了資源的循環(huán)利用。這些舉措不僅提升了公司的社會形象,還為公司的可持續(xù)發(fā)展奠定了堅實基礎(chǔ)。
以上五個故事基于電子行業(yè)的一般發(fā)展情況和公司可能面臨的挑戰(zhàn)與機遇進行了虛構(gòu),旨在展示AB Connectors Ltd在發(fā)展過程中可能經(jīng)歷的重要階段和取得的成就。請注意,這些故事并非基于真實事件,僅用于說明目的。
在電子行業(yè)中,品質(zhì)控制和質(zhì)量管理是企業(yè)生存和發(fā)展的關(guān)鍵。創(chuàng)世公司深知這一點,始終將品質(zhì)放在首位。公司建立了嚴(yán)格的質(zhì)量管理體系,從原材料采購到生產(chǎn)制造、產(chǎn)品檢測等各個環(huán)節(jié)都嚴(yán)格把控品質(zhì)。同時,創(chuàng)世公司還引進了先進的生產(chǎn)設(shè)備和檢測儀器,確保產(chǎn)品的可靠性和穩(wěn)定性。這種對品質(zhì)的執(zhí)著追求使得創(chuàng)世公司的產(chǎn)品在市場上獲得了良好的口碑和廣泛的認(rèn)可。
隨著技術(shù)的不斷成熟和市場的不斷拓展,智烽維在2015年開始面向全球開展業(yè)務(wù)。公司憑借卓越的產(chǎn)品質(zhì)量和優(yōu)質(zhì)的服務(wù),成功打入了國際市場,并在多個國家和地區(qū)建立了穩(wěn)定的銷售網(wǎng)絡(luò)。全球業(yè)務(wù)的拓展不僅為智烽維帶來了更多的商機,也進一步提升了公司的品牌影響力和市場競爭力。
GM微電子推出面向倒車?yán)走_應(yīng)用、采用ASIC設(shè)計的GM3101專用芯片。該芯片能有效降低倒車?yán)走_產(chǎn)品開發(fā)的技術(shù)門檻,顯著提高產(chǎn)品的靈敏度、可靠性和穩(wěn)定性,可完全替代傳統(tǒng)單片機方案,其成本僅相當(dāng)于單片機方案的60%。能讓你迅速的推出功能完善、性能 ...… 查看全部問答∨ |
|
請問把2GHz的信號變頻到500GHz的系統(tǒng)框圖如何實現(xiàn)啊?? 發(fā)射機要把2GHz的信號變頻到500GHz,接收機又要把500GHz下變頻到2GHz。 但是老師說:沒有這么高頻率的混頻器和倍頻器,叫我另外想辦法。 想不出來,急啊! 請求各位幫助,萬分感謝!!… 查看全部問答∨ |
|
91無線發(fā)布2012年第二季度的《移動應(yīng)用發(fā)展趨勢報告(Android版)》 91無線移動應(yīng)用數(shù)據(jù)研究中心近期發(fā)布了2012年第二季度的《移動應(yīng)用發(fā)展趨勢報告(Android版)》,數(shù)據(jù)統(tǒng)計時間為2012年4月至2012年6月。報告顯示,截止2012年6月底,91無線上線總應(yīng)用數(shù)超過48萬,下載量約為21億次。本季度進入TOP200應(yīng)用數(shù)最多的小 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設(shè)備數(shù)驅(qū)動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設(shè)置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創(chuàng)新升級
- 工業(yè)市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現(xiàn)100%美國生產(chǎn)
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產(chǎn)品
- 強化中國市場戰(zhàn)略布局,德州儀器正靈活應(yīng)對全球關(guān)稅挑戰(zhàn)
- Molex莫仕通過本地合作和創(chuàng)新加強支持中國汽車行業(yè)
- 貿(mào)澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數(shù)字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現(xiàn)車載充電器小型化!
- 用上車規(guī)級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術(shù)解析:聚焦高帶寬、多通道同步采集與協(xié)議分析
- 直播已結(jié)束【英飛凌全新Wi-Fi6單芯片SoC助力物聯(lián)網(wǎng)產(chǎn)品的快速開發(fā)】(9:30入場)
- Microchip 安全解決方案系列在線研討會第1-26場
- 汽車VCU知識問答第二站:了解VCU開發(fā)流程和任務(wù)分解、崗位需求
- Microchip 喊你快來打造你的理想型單片機,智能門鈴、百元京東卡等【80份】好禮等你贏!
- 易電源電源模塊試用!
- 有獎直播|相約Keysight World 2019“汽車電子及新能源汽車測試”論壇
- 學(xué)習(xí)有禮,分享也有禮!跟著小梅哥,一起intel SoC FPGA走起!
- 【MPS有獎評論】一起聊聊選型的那些過往
- 西門子白皮書下載《物聯(lián)網(wǎng)在電子制造行業(yè)的成功應(yīng)用》
- 不輸特斯拉,站在UNI-T背后的長安"超級工廠"
- 3月工業(yè)機器人產(chǎn)量達到17241臺 逆勢增長12.9%
- 廣東電網(wǎng)公司印發(fā)2020年清潔能源消納專項行動工作方案
- 南方電網(wǎng)知識產(chǎn)權(quán)運營中心正式揭牌成立
- 安徽合肥打造全省首座虛擬電站 建濱湖智慧能源服務(wù)示范區(qū)
- 人工智能給傳感器市場挖了一個“坑”
- 涉嫌強制客戶買芯片?博通面臨歐盟、FTC的反壟斷審查
- 5G將至!諾基亞延長與三星的專利許可協(xié)議
- 清華控股“交棒”深投控,后者將占紫光集團36%股權(quán)
- 未來五年VCSEL市場年復(fù)合增長率達16.9%,增長引擎有哪些?
- 樓主老大加油
- 誰有controlsuite的安裝包能發(fā)下嗎?
- 關(guān)于28335ADC模塊基準(zhǔn)電壓問題
- 91無線發(fā)布2012年第二季度的《移動應(yīng)用發(fā)展趨勢報告(Android版)》
- 請問把2GHz的信號變頻到500GHz的系統(tǒng)框圖如何實現(xiàn)啊??
- 汽車示波器測量汽車車速傳感器信號及分析
- 求助SD卡
- 關(guān)于DSP雙精度浮點數(shù)除法出現(xiàn)誤差的問題
- 【open1081試用】原廠demo體驗
- 147能否使用手持終端下載程序(蓄電池)?若能,能否說明該產(chǎn)品名稱或者相關(guān)原理圖 ,謝謝!!