m805_893x memory layout

The bootloader passes memory layout profile to kernel via tag pmap.


The address/size of TAG/Kernel/Ramdisk are decided by macros in

lk/target/m805_893x_evm/rule.mk:

BASE_ADDR := 0x80000000

MEMBASE := 0x82000000

MEMSIZE := 0x01000000   //16MB

TAGS_ADDR := BASE_ADDR+0x00000100

KERNEL_ADDR := BASE_ADDR+0x00008000

RAMDISK_ADDR := BASE_ADDR+0x01000000


The log shows:

name = pmem, base = 0x82000000, size = 0x0
name = ump_reserved, base = 0x82000000, size = 0x1b00000
name = fb_wmixer, base = 0x83b00000, size = 0x400000
name = ram_console, base = 0x83f00000, size = 0x100000
name = secured_inbuff, base = 0x84000000, size = 0x0
name = overlay, base = 0x84000000, size = 0x1800000
name = overlay1, base = 0x85800000, size = 0x1000000
name = overlay_rot, base = 0x86800000, size = 0x400000
name = video, base = 0x86c00000, size = 0x3e00000
name = viqe, base = 0x8aa00000, size = 0x1500000
name = ext_camera, base = 0x8bf00000, size = 0x0
name = fb_video, base = 0x8bf00000, size = 0x2000000
name = fb_scale, base = 0x8df00000, size = 0x0
name = fb_scale0, base = 0x8df00000, size = 0x0
name = fb_scale1, base = 0x8df00000, size = 0x0
name = fb_g2d0, base = 0x8df00000, size = 0x0
name = fb_g2d1, base = 0x8df00000, size = 0x0
name = video_dual, base = 0x8df00000, size = 0x0
name = jpeg_header, base = 0x8aa00000, size = 0x100000
name = jpeg_raw, base = 0x8b000000, size = 0xf00000
name = jpeg_stream, base = 0x8ab00000, size = 0x500000
name = nand_mem, base = 0x8df00000, size = 0x100000
name = jpg_enc_dxb, base = 0x8e000000, size = 0x300000
name = jpg_raw_dxb, base = 0x8e300000, size = 0x300000
name = video_ext, base = 0x8e600000, size = 0x0
name = total, base = 0x82000000, size = 0xc600000
booting linux @ 0x80008000, ramdisk @ 0x81000000 (1784625)



According to the log info, together with the official spec,  we can get the system memory layout like this:

Physical/Virtual address
description
size
comment
80000100 - 80007FFF / c0000100 - c0007FFF ATAG 32KB  
80008000 -                     / c0008000 - Kernel Image about 4-5 MB  
81000000 -                     / c1000000 - ramdisk (initramfs) about 600KB  
80000000 - 82000000 / c0000000 - c20000000 Kernel / User 32MB  
       
82000000 - 83b00000 / c2000000 - c3b00000 UMP 27MB contiguous physical memory
for dedicated UMP
83b00000 - 83f00000  / c3b00000 - c3f00000 FB WMIXER 4MB  
83f00000 - 84000000  / c3f00000 - c4000000 RAM console 1MB  
84000000 - 86c00000 / c4000000 - c6c00000 Overlay 44MB  
86c00000 - 8aa00000 / c6c00000 - caa00000 Video 62MB  
8aa00000 - 8bf00000  / caa00000 - cbf00000 VIQE / JPEC decoder 21MB  
8bf00000 - 8df00000   / cbf00000 - cdf00000 FB_Video 32MB Frame buffer
8df00000 - 8e000000  / cdf00000 -ce000000 NAND 1MB  
8e000000 - 8e600000 / ce000000 - ce600000 JPEG encoder/capture 6MB  
       
8e600000 - c0000000 / ce600000 - FFFFFFFF Kernel / User 794MB Max mali heap size is 750MB;
Max UMP heap size is 64MB
       
           
       
NOTE: __virt_to_phys(x)    (x) - PAGE_OFFSET + PHYS_OFFSET

             __phys_to_virt(x)    (x) - PHYS_OFFSET + PAGE_OFFSET

             PAGE_OFFSET = 0xC0000000;

             PHYS_OFFSET = 0x80000000;


As we can see,  the virtual address space, from 0xc2000000 t0 0xce600000 (198MB), is reserved for specific 8935 hardware blocks, like VIQE, FB, and so forth.

The virtual address spaces, from 0xc0000000 t0 0xc2000000 and from 0xce600000 - 0xFFFFFFFF (total 826MB) is used by ATAG / Kimage / ramdisk /kernel.

NOTE: 198 + 826 = 1024MB (on-board DDR3)


The details of kernel memory space looks like below:

[    0.000000] PAGE_OFFSET = 0xc0000000                                                
[    0.000000] TASK_SIZE = 0xbf000000
[    0.000000] PHYS_OFFSET = 0x80000000
[    0.000000] VMALLOC_START = 0xe0800000
[    0.000000] VMALLOC_OFFSET = 0x800000
[    0.000000] VMALLOC_END = 0xf0000000
[    0.000000] MODULES_VADDR = 0xbf000000
[    0.000000] MODULES_END = 0xbfe00000

[    0.000000]     vector  :        0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  :       0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     DMA     :        0xff600000 - 0xffe00000   (   8 MB)
[    0.000000]     vmalloc :      0xe0800000 - 0xf0000000   ( 248 MB)
[    0.000000]     lowmem  :   0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   :     0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules :   0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text :          0xc0008000 - 0xc0595f80   (5688 kB)         //Start of the kernel image
[    0.000000]       .init :           0xc0596000 - 0xc05c36c0   ( 182 kB)
[    0.000000]       .data :         0xc05c4000 - 0xc0786b60   (1803 kB)
[    0.000000]        .bss :         0xc0786b84 - 0xc08fa5a0   (1487 kB)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章