亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

s3c6410_MMU地址映射過程詳述

2024-06-28 13:24:45
字體:
來源:轉載
供稿:網友
s3c6410_MMU地址映射過程詳述

參考:

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時,映射圖如下:

虛擬地址到物理地址的映射過程如下:

  1. 虛擬地址的[31:20]位存放一級頁表的入口index,[19:0]位存放段偏移;

  2. 從TTBR(translation table base register,協處理器CP15中的一個寄存器,用于存放一級頁表的基址)寄存器中獲取一級頁表的基址;

  3. 一級頁表基址+ VA[31:20] = 該虛擬地址對應的頁表描述符的入口地址;

  4. 頁表描述符的[31:20]位為該虛擬地址對應的物理段基址;

  5. 物理段基址+ VA[19:0]段偏移= 物理地址

由映射圖可知,一個虛擬地址可以索引2^12個一級頁表入口,每個入口映射2^20大小的內存,故虛擬地址可以映射的最大物理內存為:2^12 * 2^20,即4G。

2.2 段映射,映射粒度為16M

當映射方式為段映射,且映射粒度為16M時,映射圖如下:

虛擬地址到物理地址的映射過程如下:

  1. 虛擬地址的[31:24]位存放一級頁表的入口index,[23:0]位存放段偏移;

  2. 從TTBR(translation table base register,協處理器CP15中的一個寄存器,用于存放一級頁表的基址)寄存器中獲取一級頁表的基址;

  3. 一級頁表基址+ VA[31:24] = 該虛擬地址對應的頁表描述符的入口地址;

  4. 頁表描述符的[31:24]位為該虛擬地址對應的物理段基址;

  5. 物理段基址+ VA[23:0]段偏移= 物理地址

由映射圖可知,一個虛擬地址可以索引2^8個一級頁表入口,每個入口映射2^24大小的內存,故虛擬地址可以映射的最大物理內存為:2^8 * 2^24,即4G。

2.3 頁映射,映射粒度為4K

當映射方式為頁映射,且映射粒度為4K時,映射圖如下:

虛擬地址到物理地址的映射過程如下:

  1. 虛擬地址的[31:20]位存放一級頁表的入口index,[19:12]位存放二級頁表的入口index,[11:0]位存放頁偏移;

  2. 從TTBR(translation table base register,協處理器CP15中的一個寄存器,用于存放一級頁表的基址)寄存器中獲取一級頁表的基址;

  3. 一級頁表基址+ VA[31:20] = 一級頁表描述符的入口地址;

  4. 一級頁表描述符的[31:10]位存放二級頁表的基址;

  5. 二級頁表基址+ VA[19:12] = 二級頁表描述符的入口地址;

  6. 二級頁表描述符的[31:12]位存放該虛擬地址在內存中的物理頁基址;

  7. 物理頁基址+ VA[11:0]頁偏移= 物理地址

由映射圖可知,一個虛擬地址可以索引2^12個一級頁表入口,每個一級頁表入口指向的二級頁表最大可以有2^8個二級頁表入口,每個二級頁表入口映射2^12大小的內存,故虛擬地址可以映射的最大物理內存為:2^12 * 2^8 * 2^12 ,即4G。

2.4 頁映射,映射粒度為64K

當映射方式為頁映射,且映射粒度為64K時,映射圖如下:

虛擬地址到物理地址的映射過程如下:

  1. 虛擬地址的[31:20]位存放一級頁表的入口index,[19:16]位存放二級頁表的入口index,[15:0]位存放頁偏移;

  2. 從TTBR(translation table base register,協處理器CP15中的一個寄存器,用于存放一級頁表的基址)寄存器中獲取一級頁表的基址;

  3. 一級頁表基址+ VA[31:20] = 一級頁表描述符的入口地址;

  4. 一級頁表描述符的[31:10]位存放二級頁表的基址;

  5. 二級頁表基址+ VA[19:16] = 二級頁表描述符的入口地址;

  6. 二級頁表描述符的[31:16]位存放該虛擬地址在內存中的物理頁基址;

  7. 物理頁基址+ 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-bootMMU初始化代碼分析

u-boot中的MMU地址映射方式為段映射,映射粒度為1M,只用到一級頁表。

start.S中的MMU初始化代碼如下:

#ifdef CONFIG_ENABLE_MMUenable_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 (/base << 20) | (/ap << 10) | /          (/d << 5) | (1<<4) | (/c << 3) | (/b << 2) | (1<<1).endm.section .mmudata, "a"    .align 14    // the following alignment creates the mmu table at address 0x4000.    .globl mmu_tablemmu_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 (/base << 20) | (/ap << 10) | /          (/d << 5) | (1<<4) | (/c << 3) | (/b << 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。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲电影av在线| 国产精品91在线| 岛国av一区二区在线在线观看| 国产精品视频一| 国产欧美日韩免费| 91亚洲一区精品| 国产精品一香蕉国产线看观看| 久久久久国产精品免费网站| 深夜福利国产精品| 欧美中文字幕精品| 国产精品夜色7777狼人| 亚洲色无码播放| 国产97在线观看| 国产精品日韩专区| 国产色综合天天综合网| 欧美性猛交丰臀xxxxx网站| 亚洲一区av在线播放| 国产欧美精品久久久| 国产美女扒开尿口久久久| 欧美日韩国产区| 欧洲亚洲在线视频| 日韩av免费在线播放| 欧美wwwxxxx| 国产色视频一区| 欧美三级免费观看| 日韩av网站电影| 国产欧美日韩精品在线观看| 久久久久久国产精品久久| 亚洲淫片在线视频| 成人午夜两性视频| 欧美又大又粗又长| 亚洲毛片在线观看.| 精品国产91乱高清在线观看| 国产成人一区二区三区| 国产精品亚洲网站| 97精品一区二区三区| 久久久久日韩精品久久久男男| 国产激情视频一区| 精品一区二区三区四区在线| 久久99精品久久久久久青青91| 伊人伊成久久人综合网站| 中日韩美女免费视频网址在线观看| 亚洲欧美日本伦理| 九九热精品视频国产| 欧美国产在线电影| 伦理中文字幕亚洲| 亚洲第一偷拍网| 亚洲第一区中文字幕| 亚洲影视中文字幕| 45www国产精品网站| 在线观看久久久久久| 国产免费一区二区三区在线观看| 国内外成人免费激情在线视频| 国产99久久久欧美黑人| 日韩精品福利网站| 成人国产亚洲精品a区天堂华泰| 精品国产鲁一鲁一区二区张丽| 亚洲成人黄色网| 中文国产成人精品久久一| 欧美日韩国产第一页| 性夜试看影院91社区| 国产香蕉精品视频一区二区三区| 国产成人精品a视频一区www| 精品高清美女精品国产区| 亚洲激情视频在线观看| 日本韩国在线不卡| 亚洲美女喷白浆| 亚洲图片欧美日产| 日韩精品在线视频| 亚洲美腿欧美激情另类| 国产一区二区三区18| 国产免费一区二区三区在线能观看| 国产精品一区二区三区毛片淫片| 亚洲欧美中文字幕在线一区| 亚洲人成在线观看网站高清| 97视频免费在线看| 久久成人一区二区| 欧美日韩亚洲91| 国产精品av网站| 亚洲人成电影在线观看天堂色| 久久国产视频网站| 高跟丝袜欧美一区| 欧美影院成年免费版| 97视频国产在线| 国产精品jizz在线观看麻豆| 久久久影视精品| 亚洲精品美女在线| 一区二区三区四区精品| 欧美精品18videosex性欧美| 久久香蕉频线观| 欧美成人亚洲成人| 在线看日韩欧美| 久久久欧美一区二区| 国产成人自拍视频在线观看| 国产精品视频久久| 国内精品久久久久久中文字幕| 国产亚洲精品91在线| 久久久久久久久国产| 久久久久久中文| 国产亚洲一区二区在线| 自拍偷拍亚洲在线| 亚洲性日韩精品一区二区| 6080yy精品一区二区三区| 亚洲91精品在线观看| 国产欧美一区二区三区四区| 九九视频这里只有精品| 国产精品男女猛烈高潮激情| 中文字幕亚洲综合久久| 国产精品久久久精品| 欧美成人久久久| 日韩综合中文字幕| 亚洲黄色片网站| 亚洲xxxx3d| 欧美激情亚洲另类| 另类少妇人与禽zozz0性伦| 欧美在线精品免播放器视频| 久久天天躁狠狠躁夜夜躁2014| 久久久久久九九九| 中文字幕在线观看日韩| 精品视频在线观看日韩| 亚洲精品免费在线视频| 日韩精品视频免费| 欧美激情18p| 亚洲精品美女在线| 日韩欧美在线观看视频| 国产精品狼人色视频一区| 欧美日韩亚洲一区二| 国产香蕉97碰碰久久人人| 亚洲最大福利视频网站| 久久久久久久久久久网站| 精品亚洲永久免费精品| 国产精品偷伦视频免费观看国产| 日韩精品一二三四区| 国产精品亚洲一区二区三区| 91黑丝高跟在线| 亚洲精品免费一区二区三区| 日韩成人av网址| 日韩精品高清视频| 久久精品免费电影| 久久精品青青大伊人av| 国产精品自产拍在线观看中文| 亚洲精品影视在线观看| 中文字幕日韩在线观看| 理论片在线不卡免费观看| 国产精品扒开腿做爽爽爽的视频| 国产精品99久久久久久人| 在线免费观看羞羞视频一区二区| 亚洲国产成人91精品| 成人网在线免费观看| 国产精品久久久久久亚洲调教| 国产精品免费久久久| 在线播放亚洲激情| 欧美性猛交xxxx偷拍洗澡| 国产精品一区二区三区免费视频| 国产一区二区三区在线播放免费观看| 日韩免费av片在线观看| 精品国偷自产在线视频| 欧美精品福利在线| 亚洲欧美激情四射在线日| 国产精品入口日韩视频大尺度| 国产女人精品视频| 亚洲国产精品电影| 国产深夜精品福利| 国产精品入口免费视|