參考:1)《ARM1176 JZF-S Technical Reference Manual》:
Chapter 3 System Control Coprocessor
Chapter 6 Memory Management Unit
2)u-boot源碼:
u-boot-x.x.x/cpu/s3c64xx/start.S
u-boot-x.x.x/board/samsung/smdk6410/lowlevel_init.S
1. ARMv6 MMU簡述
1)MMU由協(xié)處理器CP15控制;
2)MMU功能:地址映射(VA->PA),內存訪問權限控制;
3)虛擬地址到物理地址的轉換過程:Micro TLB->Main TLB->Page Table Walk
參考《ARM1176 JZF-S Technical Reference Manual》6.3節(jié),Memory access sequence
摘錄參考手冊中的一段描述:
When the processor generates a memory access, the MMU:
1. Performs a lookup for a mapping for the requested virtual address and current ASID and
current world, Secure or Non-secure, in the relevant Instruction or Data MicroTLB.
2. If step 1 misses then a lookup for a mapping for the requested virtual address and current
ASID and current world, Secure or Non-secure, in the main TLB is performed.
If no global mapping, or mapping for the currently selected ASID, or no matching NSTID, for
the virtual address can be found in the TLBs then a translation table walk is automatically
performed by hardware, unless Page Table Walks are disabled by the PD0 or PD1 bits in the
TTB Control register, that cause the processor to return a Section Translation fault. See
Hardware page table translation on page 6-36.
If a matching TLB entry is found then the information it contains is used as follows:
1. The access permission bits and the domain are used to determine if the access is permitted.
If the access is not permitted the MMU signals a memory abort, otherwise the access is
enabled to proceed. Memory access control on page 6-11 describes how this is done.
2. The memory region attributes control the cache and write buffer, and determine if the
access is Secure or Non-secure cached, uncached, or device, and if it is shared, as Memory
region attributes on page 6-14 describes.
3. The physical address is used for any access to external or tightly coupled memory to
perform Tag matching for cache entries.
2. 址映射過程詳述
參考《ARM1176 JZF-S Technical Reference Manual》6.11節(jié),Hardware page table translation
關于頁表:ARMv6的MMU進行地址映射時涉及到兩種頁表,一級頁表(first level page table)和二級頁表(coarse page table)。
關于映射方式:映射方式有兩種,段映射和頁映射。段映射只用到一級頁表,頁映射用到一級頁表和二級頁表。
關于映射粒度:段映射的映射粒度有兩種,1M section和16M supersection;頁映射的映射粒度也有兩種,4K small page和64K large page。
硬件在做地址轉換時,如何知道當前是什么映射方式以及映射粒度是多少呢?
這些信息可以從頁表的入口描述符中獲得。
一級頁表的入口描述符(first-level descriptor)格式如下:
第[1:0]位決定映射方式:
[1:0]=10b時,是段映射,此時只需作一級映射,描述符的最高12或8位存放的是段基址;
[1:0]=01b時,是頁映射,此時虛擬地址轉換為物理地址需要經歷二級映射,描述符的最高22位存放的是二級頁表的物理地址;
第[18]位決定段映射的粒度:
[18]=0b時,映射粒度為1M,描述符的最高12位存放段基址;
[18]=1b時,映射粒度為16M,描述符的最高8位存放段基址;
當映射方式為頁映射時,我們用到二級頁表,二級頁表的入口描述符(second-level descriptor)格式如下:
第[1:0]位決定頁映射的映射粒度:
[1:0]=10b或11b時,映射粒度為4KB,描述符的最高20位為頁基址;
[1:0]=01b時,映射粒度為64KB,描述符的最高16位為頁基址;
下面分4種情況對地址映射過程做詳細描述:
1)段映射,映射粒度為1M
2)段映射,映射粒度為16M
3)頁映射,映射粒度為4K
4)頁映射,映射粒度為64K
2.1段映射,映射粒度為1M
當映射方式為段映射,且映射粒度為1M時,映射圖如下:
虛擬地址到物理地址的映射過程如下:
虛擬地址的[31:20]位存放一級頁表的入口index,[19:0]位存放段偏移;
從TTBR(translation table base register,協(xié)處理器CP15中的一個寄存器,用于存放一級頁表的基址)寄存器中獲取一級頁表的基址;
一級頁表基址+ VA[31:20] = 該虛擬地址對應的頁表描述符的入口地址;
頁表描述符的[31:20]位為該虛擬地址對應的物理段基址;
物理段基址+ VA[19:0]段偏移= 物理地址
由映射圖可知,一個虛擬地址可以索引2^12個一級頁表入口,每個入口映射2^20大小的內存,故虛擬地址可以映射的最大物理內存為:2^12 * 2^20,即4G。
2.2 段映射,映射粒度為16M
當映射方式為段映射,且映射粒度為16M時,映射圖如下:
虛擬地址到物理地址的映射過程如下:
虛擬地址的[31:24]位存放一級頁表的入口index,[23:0]位存放段偏移;
從TTBR(translation table base register,協(xié)處理器CP15中的一個寄存器,用于存放一級頁表的基址)寄存器中獲取一級頁表的基址;
一級頁表基址+ VA[31:24] = 該虛擬地址對應的頁表描述符的入口地址;
頁表描述符的[31:24]位為該虛擬地址對應的物理段基址;
物理段基址+ VA[23:0]段偏移= 物理地址
由映射圖可知,一個虛擬地址可以索引2^8個一級頁表入口,每個入口映射2^24大小的內存,故虛擬地址可以映射的最大物理內存為:2^8 * 2^24,即4G。
2.3 頁映射,映射粒度為4K
當映射方式為頁映射,且映射粒度為4K時,映射圖如下:
虛擬地址到物理地址的映射過程如下:
虛擬地址的[31:20]位存放一級頁表的入口index,[19:12]位存放二級頁表的入口index,[11:0]位存放頁偏移;
從TTBR(translation table base register,協(xié)處理器CP15中的一個寄存器,用于存放一級頁表的基址)寄存器中獲取一級頁表的基址;
一級頁表基址+ VA[31:20] = 一級頁表描述符的入口地址;
一級頁表描述符的[31:10]位存放二級頁表的基址;
二級頁表基址+ VA[19:12] = 二級頁表描述符的入口地址;
二級頁表描述符的[31:12]位存放該虛擬地址在內存中的物理頁基址;
物理頁基址+ VA[11:0]頁偏移= 物理地址
由映射圖可知,一個虛擬地址可以索引2^12個一級頁表入口,每個一級頁表入口指向的二級頁表最大可以有2^8個二級頁表入口,每個二級頁表入口映射2^12大小的內存,故虛擬地址可以映射的最大物理內存為:2^12 * 2^8 * 2^12 ,即4G。
2.4 頁映射,映射粒度為64K
當映射方式為頁映射,且映射粒度為64K時,映射圖如下:
虛擬地址到物理地址的映射過程如下:
虛擬地址的[31:20]位存放一級頁表的入口index,[19:16]位存放二級頁表的入口index,[15:0]位存放頁偏移;
從TTBR(translation table base register,協(xié)處理器CP15中的一個寄存器,用于存放一級頁表的基址)寄存器中獲取一級頁表的基址;
一級頁表基址+ VA[31:20] = 一級頁表描述符的入口地址;
一級頁表描述符的[31:10]位存放二級頁表的基址;
二級頁表基址+ VA[19:16] = 二級頁表描述符的入口地址;
二級頁表描述符的[31:16]位存放該虛擬地址在內存中的物理頁基址;
物理頁基址+ VA[15:0]頁偏移= 物理地址
由映射圖可知,一個虛擬地址可以索引2^12個一級頁表入口,每個一級頁表入口指向的二級頁表最大可以有2^4個二級頁表入口,每個二級頁表入口映射2^16大小的內存,故虛擬地址可以映射的最大物理內存為:2^12 * 2^4 * 2^16 ,即4G。
2.5 地址映射總圖
《ARM1176 JZF-S Technical Reference Manual》中有一張對上述四種映射情況的匯總圖:
3. 關于一級頁表基址
參考《ARM1176 JZF-S Technical Reference Manual》6.12 MMU descriptors
ARMv6中有兩個協(xié)處理器寄存器用來存放一級頁表基地址,TTBR0和TTBR1。操作系統(tǒng)把虛擬內存劃分為內核空間和用戶空間,TTBR0存放用戶空間的一級頁表基址,TTBR1存放內核空間的一級頁表基址。
In this model, the virtual address space is divided into two regions:
? 0x0 -> 1<<(32-N) that TTBR0 controls
? 1<<(32-N) -> 4GB that TTBR1 controls.
N的大小由TTBCR寄存器決定。0x0 -> 1<<(32-N)為用戶空間,由TTBR0控制,1<<(32-N) -> 4GB為內核空間,由TTBR1控制。
N的大小與一級頁表大小的關系圖如下:
操作系統(tǒng)為用戶空間的每個進程分配各自的頁表,即每個進程的一級頁表基址是不一樣的,故當發(fā)生進程上下文切換時,TTBR0需要被存放當前進程的一級頁表基址;TTBR1中存放的是內核空間的一級頁表基址,內核空間的一級頁表基址是固定的,故TTBR1中的基址值不需要改變。
4. u-boot中MMU初始化代碼分析
u-boot中的MMU地址映射方式為段映射,映射粒度為1M,只用到一級頁表。
start.S中的MMU初始化代碼如下:
#ifdef CONFIG_ENABLE_MMU
enable_mmu:
/* enable domain access */
ldr r5, =0x0000ffff
mcr p15, 0, r5, c3, c0, 0 @ load domain access register
/* Set the TTB register */
ldr r0, _mmu_table_base
ldr r1, =CFG_PHY_UBOOT_BASE
ldr r2, =0xfff00000
bic r0, r0, r2
orr r1, r0, r1
mcr p15, 0, r1, c2, c0, 0
/* Enable the MMU */
mmu_on:
mrc p15, 0, r0, c1, c0, 0
orr r0, r0, #1 /* Set CR_M to enable MMU */
mcr p15, 0, r0, c1, c0, 0
nop
nop
nop
nop
#endif
…
…
…
#ifdef CONFIG_ENABLE_MMU
_mmu_table_base:
.word mmu_table
#endif
對協(xié)處理器的寄存器操作參考:
《ARM1176 JZF-S Technical Reference Manual》Chapter 3 System Control Coprocessor
MMU初始化過程中有一步是將頁表基址(CFG_PHY_UBOOT_BASE + mmu_table)存入TTBR0中,在lowlevel_init.S中可以看到對頁表的初始化:
#ifdef CONFIG_ENABLE_MMU
/*
* MMU Table for SMDK6400
*/
/* form a first-level section entry */
.macro FL_SECTION_ENTRY base,ap,d,c,b
.word (ase << 20) | (ap << 10) |
(d << 5) | (1<<4) | (c << 3) | ( << 2) | (1<<1)
.endm
.section .mmudata, 'a'
.align 14
// the following alignment creates the mmu table at address 0x4000.
.globl mmu_table
mmu_table:
.set __base,0
// 1:1 mapping for debugging
.rept 0xA00
FL_SECTION_ENTRY __base,3,0,0,0
.set __base,__base+1
.endr
// access is not allowed.
.rept 0xC00 - 0xA00
.word 0x00000000
.endr
// 128MB for SDRAM 0xC0000000 -> 0x50000000
.set __base, 0x500
.rept 0xC80 - 0xC00
FL_SECTION_ENTRY __base,3,0,1,1
.set __base,__base+1
.endr
// access is not allowed.
.rept 0x1000 - 0xc80
.word 0x00000000
.endr
#endif
下面對頁表的初始化代碼作詳細解釋:
/* form a first-level section entry */
.macro FL_SECTION_ENTRY base,ap,d,c,b
.word (ase << 20) | (ap << 10) |
(d << 5) | (1<<4) | (c << 3) | ( << 2) | (1<<1)
.endm
定義一個宏FL_SECTION_ENTRY用來設置頁表入口描述符,base即物理基址,ap即access permission,d即domain,c即cacheable,b即bufferable。
內存訪問控制和段屬性相關描述請參考:
《ARM1176 JZF-S Technical Reference Manual》6.6 Memory access control和6.7 Memory region attributes。
.section .mmudata, 'a'
.align 14
// the following alignment creates the mmu table at address 0x4000.
定義一個名為mmudata的段,段屬性為“a”,allowable,該段16K對齊。從u-boot.lds中可以看到,u-boot的各個段在內存中的分布依次為:.text,.rodata,.data,.got,.u_boot_cmd,.mmudata,.bss。
為什么頁表是16K對齊呢?
在上一節(jié)我們講過:有兩個寄存器TTBR0和TTBR1用來存放一級頁表基址,操作系統(tǒng)把虛擬地址空間劃分為用戶空間和內核空間,0x0 -> 1<<(32-N)為用戶空間,由TTBR0控制,1<<(32-N) -> 4GB為內核空間,由TTBR1控制,N的大小由TTBCR寄存器決定。由于u-boot主要作用是硬件初始化和引導操作系統(tǒng),所以沒有必要對虛擬地址空間進行劃分,即N=0,整個虛擬地址空間由TTBR0控制,TTBR0的格式如下:
N=0時,[31:14]存放頁表基址,即一級頁表的基址為([31:14]<<14),2^14為16K。
.set __base,0
// 1:1 mapping for debugging
.rept 0xA00
FL_SECTION_ENTRY __base,3,0,0,0
.set __base,__base+1
.endr
對虛擬地址0x0-0xA0000000作平行映射(flat mapping),即把虛擬地址0x0-0xA0000000映射到物理地址0x0-0xA0000000。
// access is not allowed.
.rept 0xC00 - 0xA00
.word 0x00000000
.endr
不對虛擬地址空間0xA0000000-0xC0000000作映射,即禁止訪問虛擬地址空間0xA0000000-0xC0000000。
// 128MB for SDRAM 0xC0000000 -> 0x50000000
.set __base, 0x500
.rept 0xC80 - 0xC00
FL_SECTION_ENTRY __base,3,0,1,1
.set __base,__base+1
.endr
把虛擬地址空間0xC0000000-0xC8000000映射到物理地址空間0x50000000-0x58000000,0x50000000-0x58000000為sdram的地址空間,此時sdram有128M。
// access is not allowed.
.rept 0x1000 - 0xc80
.word 0x00000000
.endr
不對虛擬地址空間0xc8000000-0xffffffff作映射,即禁止訪問虛擬地址空間0xc8000000-0xffffffff。
上一篇:ADC&&觸摸屏實驗及心得體會
下一篇:ARM9的寄存器
推薦閱讀
史海拾趣
富士通(Fujitsu)在電子行業(yè)的五個發(fā)展故事
故事一:從電話交換機到ICT巨頭的起步
富士通的故事始于1935年,當時它作為一家電信設備制造商在日本成立,首款產品是電話交換機,這標志著富士通成為日本首家生產此類設備的公司。這一里程碑不僅奠定了富士通在通信領域的基礎,也為其后續(xù)在信息技術(IT)和通信技術(CT)領域的多元化發(fā)展鋪平了道路。隨著技術的不斷進步,富士通逐漸擴展其業(yè)務范圍,從單一的通信設備制造商轉變?yōu)槿蝾I先的ICT企業(yè)。
故事二:FACOM 100——日本首臺計算機的誕生
1954年,富士通成功研發(fā)出日本第一臺中繼式自動計算機FACOM 100,這一成就不僅標志著富士通在計算機領域的突破,也為其后續(xù)在計算機硬件和軟件領域的深入發(fā)展奠定了堅實基礎。FACOM 100的問世,不僅提升了富士通在業(yè)界的知名度,也推動了日本乃至全球計算機技術的快速發(fā)展。
故事三:全球化戰(zhàn)略的推進
自20世紀70年代以來,富士通積極實施全球化戰(zhàn)略,通過在全球各地設立研發(fā)中心、生產基地和銷售網絡,不斷拓展其國際業(yè)務。在中國,富士通自1979年起便開始了其業(yè)務布局,從最初的設備銷售到后來的技術研發(fā)、生產制造和解決方案提供,富士通在中國的發(fā)展歷程見證了其全球化戰(zhàn)略的深入實施。如今,富士通的產品和服務已遍布全球80多個國家和地區(qū),服務超過百萬家客戶。
故事四:云計算與數(shù)字化轉型的引領
進入21世紀,隨著云計算和數(shù)字化轉型的興起,富士通迅速調整戰(zhàn)略方向,加大在云計算領域的投入。通過提供全方位的云計算服務和解決方案,富士通幫助客戶實現(xiàn)業(yè)務的數(shù)字化轉型和升級。同時,富士通還積極與微軟等國際巨頭合作,共同開拓全球云計算市場,進一步鞏固了其在ICT行業(yè)的領先地位。
故事五:技術創(chuàng)新與可持續(xù)發(fā)展
富士通始終將技術創(chuàng)新作為企業(yè)發(fā)展的核心驅動力。近年來,富士通在人工智能、物聯(lián)網、大數(shù)據等新興技術領域取得了顯著成就,推出了一系列具有自主知識產權的創(chuàng)新產品和解決方案。同時,富士通還積極履行企業(yè)社會責任,通過提供綠色、環(huán)保的ICT產品和服務,推動社會的可持續(xù)發(fā)展。這些努力不僅提升了富士通在全球市場的競爭力,也為其贏得了廣泛的贊譽和尊重。
隨著技術的不斷成熟和市場的不斷拓展,凱勵公司開始在全球范圍內布局。1997年,公司在廣東省東莞市設立“東莞凱勵電子有限公司”,進一步擴大生產規(guī)模。2002年,又在浙江省嘉興市設立“浙江嘉興凱勵電子有限公司”,進一步完善了公司的產業(yè)布局。這些舉措不僅提升了凱勵公司的產能和效率,也使其能夠更好地滿足全球客戶的需求。
進入21世紀,數(shù)據中心成為了企業(yè)信息化建設的核心。APC憑借其在UPS電源保護領域的深厚積累,穩(wěn)步向數(shù)據中心市場拓展。通過并購和技術創(chuàng)新,APC不僅成為了首個收入達到十億美元的以UPS為主營業(yè)務的公司,更在數(shù)據中心領域推出了多款創(chuàng)新產品,如InfraStruXure?架構。這一架構將電源、制冷、機架和管理無縫集成為一個模塊化、可擴展的、預制式解決方案,為數(shù)據中心帶來了前所未有的效率和可靠性提升。
2013年,三位在半導體行業(yè)積累了近十年經驗的成電校友,懷揣著對電子技術的熱愛和對國產芯片事業(yè)的執(zhí)著,在成都創(chuàng)辦了成都芯進電子有限公司(CrossChip)。公司初期專注于模擬和混合信號芯片設計,并以磁傳感器芯片作為切入點。一年后,他們的首款產品——開關型霍爾傳感器成功實現(xiàn)量產銷售,為公司的發(fā)展奠定了堅實的基礎。
隨著電子行業(yè)的快速發(fā)展,馳興電感緊跟市場趨勢,不斷拓展產品應用領域。除了傳統(tǒng)的消費電子和通訊領域外,馳興電感還成功將產品應用于汽車電子、網絡通訊、智能家居等新興領域。這些領域的拓展不僅為公司帶來了更廣闊的市場空間,也進一步提升了馳興電感在電子行業(yè)中的地位。
隨著技術實力的不斷提升,F(xiàn)acon開始積極拓展市場。他們與全球知名的電子產品制造商建立了緊密的合作關系,將高性能芯片廣泛應用于智能手機、平板電腦、筆記本電腦等領域。同時,F(xiàn)acon還積極開拓新興市場,如物聯(lián)網、智能家居等領域,為這些領域提供定制化的解決方案。通過不斷的市場拓展和技術創(chuàng)新,F(xiàn)acon逐漸在全球電子行業(yè)中占據了舉足輕重的地位。
如題 int main() __attribute__ ((C, spontaneous)) { platform_bootstrap(); } 是TinyOS中的nesC代碼。 … 查看全部問答∨ |
|
誰懂wince6.0下的VoIP 或RTC .我現(xiàn)在用RTC實現(xiàn)了音頻對講,請問如何實現(xiàn)視頻對講 參考地址: http://msdn.microsoft.com/en-us/library/aa921886.aspx 如何把視頻的filter 加入到rtc中?我按msdn上的做了,RTC但發(fā)出來的sdp里面沒見到視頻參數(shù)信息。怎么辦???… 查看全部問答∨ |
|
tc35發(fā)短信最后的ctrl-Z怎么實現(xiàn) tc35發(fā)短信最后的ctrl-Z怎么實現(xiàn)這個怎么實現(xiàn)的 ???我急用的謝謝大家?guī)兔Α!? 查看全部問答∨ |
一、 原理圖部分 1、 庫 ⑴ DxDesigner 的原理圖庫與PCB的庫是相互獨立的,而且每個原理圖符號庫都是一個文件,很難實現(xiàn)統(tǒng)一管理;AD6可以使用集成庫來統(tǒng)一管理,不僅是原理圖符號庫與PCB封裝庫,還能把混合電路仿真庫、信號完整性分析模型庫以 ...… 查看全部問答∨ |
Code Composer Studio v4 (CCS v4) 是用于 TI DSP、微處理器和應用處理器的集成開發(fā)環(huán)境。Code Composer Studio 包含一整套用于開發(fā)和調試嵌入式應用的工具。它包含適用于每個 TI 器件系列的編譯器、源碼編輯器、項目構建環(huán)境、調試器、描述器、仿 ...… 查看全部問答∨ |
|
本人最近在用MSP430F149調試紅外遙控,型號是SM0038吧. 之前就試過幾種方法,但是就是沒辦法解碼.今天的這個也是, 所以在這里希望各位不管是路過的還是走過的,希望能指教一下這個程序的問題,謝謝. 這個程序采用上升沿和下降沿都捕獲,P1_2口輸 ...… 查看全部問答∨ |
作者:Art Kay 德州儀器電源抑制比 (PSRR) 主要說明運算放大器對電源電壓變化的抑制效果。PSRR 的定義是每伏電源電壓變化的失調程度,單位通常為微伏每伏 (uV/V)。例如,OPA209 的典型 PSRR 是 0.05uV/V。因此對于 OPA209 來說,電源變 ...… 查看全部問答∨ |
設計資源 培訓 開發(fā)板 精華推薦
- 單片機學習筆記 —— 8位數(shù)碼管動態(tài)掃描
- 51單片機------閃爍燈(實驗報告)
- 導航應用“ALPINE SmartX”支持多語種
- 51單片機-------流水燈(實驗報告)
- TE Connectivity公布2021財年第三季度財報
- Vishay推出新型汽車級IHLP?電感,工作溫度可達+155 °C
- 基于LabVIEW的電機壽命測試控制系統(tǒng)設計與實現(xiàn)
- Spectrum多通道任意波形發(fā)生器顯著降低信號生成成本
- LabVIEW機器人模塊――機器人選板中的特殊算法和API
- 利用LabVIEW Multisim連接工具包(?版)實現(xiàn)Multisim自動化簡介