久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3612|回復: 0
打印 上一主題 下一主題
收起左側

ARM11 S3C6410 的地址表

[復制鏈接]
跳轉到指定樓層
樓主
ID:3721 發表于 2015-1-2 20:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
參考: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由協處理器CP15控制;
2)MMU功能:地址映射(VA->PA),內存訪問權限控制;
3)虛擬地址到物理地址的轉換過程:Micro TLB->Main TLB->Page Table Walk
參考《ARM1176 JZF-S Technical Reference Manual》6.3節,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節,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,協處理器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,協處理器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,協處理器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,協處理器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中有兩個協處理器寄存器用來存放一級頁表基地址,TTBR0和TTBR1。操作系統把虛擬內存劃分為內核空間和用戶空間,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的大小與一級頁表大小的關系圖如下:

操作系統為用戶空間的每個進程分配各自的頁表,即每個進程的一級頁表基址是不一樣的,故當發生進程上下文切換時,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

對協處理器的寄存器操作參考:
《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對齊呢?
在上一節我們講過:有兩個寄存器TTBR0和TTBR1用來存放一級頁表基址,操作系統把虛擬地址空間劃分為用戶空間和內核空間,0x0 -> 1<<(32-N)為用戶空間,由TTBR0控制,1<<(32-N) -> 4GB為內核空間,由TTBR1控制,N的大小由TTBCR寄存器決定。由于u-boot主要作用是硬件初始化和引導操作系統,所以沒有必要對虛擬地址空間進行劃分,即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。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人一区 | 国产精品久久视频 | 欧美精品中文字幕久久二区 | 欧美激情精品久久久久久变态 | 国产女人第一次做爰毛片 | 中文字幕在线三区 | 欧美日韩成人一区二区 | 狠狠亚洲 | 亚洲在线一区二区 | av一区二区三区 | 亚洲精品久久久久中文字幕欢迎你 | 日本一区二区不卡 | 特级黄一级播放 | 国产综合精品 | 欧美a区| 日韩欧美中文 | 水蜜桃久久夜色精品一区 | 一区2区| 午夜码电影 | 日韩国产精品一区二区三区 | 欧美视频免费在线观看 | 亚洲精品视频在线 | 精品国产不卡一区二区三区 | 亚洲一区二区三区在线播放 | 欧美国产日韩在线观看成人 | 久草免费在线视频 | 一级毛片在线播放 | 久久中文字幕一区 | 欧美日韩在线播放 | 久久久www| 中文字幕在线第一页 | 神马久久久久久久久久 | 国产一区二区影院 | 黄色视频a级毛片 | 中文av在线播放 | 日韩视频一级 | 免费国产视频 | 欧美一区二区三区视频 | 国产精品国产自产拍高清 | 欧美成人精品一区二区男人看 | 久久小视频 |