Memory related MACROs in ARM linux

TCC8900 BSP (linux 2.6.28)

1) TEXT_OFFSET                0x00100000    The Kernel's start address (offset) within RAM.

./arch/arm/Makefile

#Default value
head-y        := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
textofs-y    := 0x00008000
...
 textofs-$(CONFIG_ARCH_TCC)           := 0x00100000

...

TEXT_OFFSET := $(textofs-y)


2) PAGE_OFFSET                0xc0000000    Kernel space offset

./arch/arm/include/asm/memory.h

#define PAGE_OFFSET        UL(CONFIG_PAGE_OFFSET)

./.config

CONFIG_PAGE_OFSET=0xc0000000   


3) PHYS_OFFSET                0x40200000    DDR start address in SOC's memory space, AKA physical DRAM offset.

./arch/arm/mach-tcc8900/include/mach/memory.h

#define PHYS_OFFSET        UL(0x40200000)


4) KERNEL_RAM_VADDR / KERNEL_RAM_PADDR    0xc0100000 / 0x40300000    Kernel's virtual/physical address in DRAM.

./arch/arm/kernel/head.S

#define KERNEL_RAM_VADDR    (PAGE_OFFSET + TEXT_OFFSET)
#define KERNEL_RAM_PADDR    (PHYS_OFFSET + TEXT_OFFSET)


5) swapper_pg_dir               0xc00fc000               Virtual address of Kernel's global page table

./arch/arm/kernel/head.S

.globl    swapper_pg_dir
.equ    swapper_pg_dir, KERNEL_RAM_VADDR - 0x4000

*This is value can be verified in System.map


6) VMALLOC_OFFSET / VMALLOC_START / VMALLOC_END    0x800000 / 0x800000 / 0xe0000000

./arch/arm/include/asm/pgtable.h

#ifndef VMALLOC_START
#define VMALLOC_OFFSET        (8*1024*1024)
#define VMALLOC_START        (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
#endif

./arch/arm/mach-tcc8900/include/mach/vmalloc.h

#define VMALLOC_END      (PAGE_OFFSET + 0x20000000)


7) MODULES_VADDR / MODULES_END        0xbf000000 / 0xc0000000

./arch/arm/include/asm/memory.h

#ifdef CONFIG_MMU

...

#define MODULES_END        (PAGE_OFFSET)
#define MODULES_VADDR        (MODULES_END - 16*1048576)

...

#endif


8) TASK_SIZE                0xbf000000       the maximum size of a user space task

./arch/arm/include/asm/memory.h

#ifdef CONFIG_MMU

...

#define TASK_SIZE        (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000))

...

#endif


9) TASK_UNMAPPED_BASE        0x40000000        the lower boundary of the mmap VM area

./arch/arm/include/asm/memory.h

#ifdef CONFIG_MMU

...

#define TASK_UNMAPPED_BASE    (UL(CONFIG_PAGE_OFFSET) / 3)

...

#endif


10)  PAGE_SHIFT / PMD_SHIFT / PGDIR_SHIFT                12 / 21 / 21

./arch/arm/include/asm/page.h

#define PAGE_SHIFT        12

./arch/arm/include/asm/pgtable.h

#define PMD_SHIFT          21

#define PGDIR_SHIFT      21

NOTE: The ARM virtual address architecture:

             ||                         PGD                      |        Offset        |


11) high_memory                0xcb600000       

./arch/arm/mm/init.c -> bootmem_init()

high_memory = __va(memend_pfn << PAGE_SHIFT);

Note: 0xcb600000 - 0xc0000000 = 0xb600000 = 182M


12) Virtual Address <---> Physical Address

./arch/arm/include/asm/memory.h

#define __virt_to_phys(x)    ((x) - PAGE_OFFSET + PHYS_OFFSET)
#define __phys_to_virt(x)    ((x) - PHYS_OFFSET + PAGE_OFFSET)


13) Physical Address <---> Page Frame Number

./arch/arm/include/asm/memory.h

#define    __phys_to_pfn(paddr)    ((paddr) >> PAGE_SHIFT)
#define    __pfn_to_phys(pfn)    ((pfn) << PAGE_SHIFT)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值