SDM845 虚拟地址分配

宏定义符号描述value
VA_START内核地址空间的起始地址0xffffff80-00000000
TEXT_OFFSETbootloader会把kernel image从外设copy到RAM中,那么具体copy到什么位置呢?从RAM的起始地址开始吗?实际上是从TEXT_OFFSET开始的,偏移这么一小段内存估计是为了bootloader和kernel之间传递一些信息。所以,这里TEXT是指kernel text segment,而OFFSET是相对于RAM的首地址而言的。 
TEXT_OFFSET必须要4K对齐并且TEXT_OFFSET的size不能大于2M。

if config_arm64_randomisze_text_offset

is not defined: 

0x80000 = 512K

 

PAGE_OFFSETkernel image的起始虚拟地址,一般而言也就是系统中RAM的首地址,在该地址TEXT_OFFSET之后保存了kernel image。 
PAGE_OFFSET必须要2M对齐
0xffffffc0-00000000
TASK_SIZE一般而言,用户地址空间从0开始,大小就是TASK_SIZE,因此,这个宏定义的全称应该是task userspace size。对于ARM64的用户空间进程而言,有两种,一种是运行在AArch64状态下,另外一种是运行在AArch32状态,因此,实际上代码中又定义了TASK_SIZE_32和TASK_SIZE_64两个宏定义。

lower VA subrange:
0 ~ 0x7f-ffffffff

 

upper VA subrang:

0xffffff80-00000000 ~ 0xffffffff-ffffffff

PHYS_OFFSET系统内存的起始物理地址。在系统初始化的过程中,会把PHYS_OFFSET开始的物理内存映射到PAGE_OFFSET的虚拟内存上去。adrp  x24 _PHYS_OFFSET

 

#define VA_BITS            (CONFIG_ARM64_VA_BITS) 
#define PAGE_OFFSET        (UL(0xffffffff-ffffffff) << (VA_BITS - 1))

SDM845上VA_BITS是39,所以PAGE_OFFSET是 0xffffffff-ffffffff << 38 = 0xffffffc0-00000000.

 

#define VMALLOC_START        (VA_START)
#define VA_START        (UL(0xffffffffffffffff) << VA_BITS)
#define __phys_to_virt(x)    ((unsigned long)((x) - PHYS_OFFSET + PAGE_OFFSET))

VA_START = 0xffffffff-ffffffff << 39 = 0xffffff80-00000000

 

Lower VA subrange : 从0x0000_0000_0000_0000 到 (2^(64-T0SZ) - 1) 
Upper VA subrange : 从(2^64 - 2^(64-T1SZ)) 到 0xFFFF_FFFF_FFFF_FFFF

64 - T0SZ = 39

64 - T1SZ = 39 

user space:  0 ~ (2^39 - 1) --> 0 ~ 0x7f-ffffffff

kernel space:  (2^64 - 2^39) ~ (2^64 - 1) --> 0xffffff80-00000000 ~ 0xffffffff-ffffffff

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值