自己動手做OS之Raspberry Pi MMU initialization.
 寫了一個簡單的bare metal啟動MMU的程式,  把實際位址0x20000000~0x210000000 對應到虛擬位址0xa0000000~0xa1000000    ARM MMU的部份在ARMv6之前跟之後的版本不同,  請看Technical Reference Manual。   Raspberry Pi MMU initialization example.   hackpad note:https://lbd.hackpad.com/MMU-initialization-Jl8YoJ3iUdf  source code:https://github.com/tzuCarlos/RaspberryPi/tree/master/labMMU     為什麼需要MMU?     TODO:....       頁表(page table)是由頁表項(page table entry, PTE)組成的 。 每一個PTE包含一段虛擬位址(page)映射到一段實體位址的資訊,而page的大小依ARM core版本不同,有不同的支持1K(tiny page), 4K(small page), 64k(large page), 1MB, 16MB。   page的大小決定了映射的粒度(granularity):     如果我們把page切1MB,那64MB的記憶體就需要64MB/1MB的PTE,每個PTE是32bits(4bytes),64x4=256bytes頁表項空間。4G就是4096x6=16384=16K         切1K,4K,64K需要用二級查表,1MB,64MB用一級查差,二級差表用途是縮小PTE,以減少佔用記憶體空間,但降底了尋址的效率。 16M的page叫super section, 1M的叫section。 L1表還有個名稱叫page directory entry(PDE)。     ARM 的位址轉換涉及底下三種位址[1]:    虛擬位址 (Virtual Address,VA): CPU 送出的位址。      修改後的虛擬位址 (Modified Virtual Address,MVA): 快取和 MMU 看到的是 MVA。      物理位址 (Physical Address,PA): 內存看到的是 PA。  ...