| .. SPDX-License-Identifier: GPL-2.0+: | |
| .. index:: | |
| single: meminfo (command) | |
| meminfo command | |
| =============== | |
| Synopsis | |
| -------- | |
| :: | |
| meminfo | |
| Description | |
| ----------- | |
| The meminfo command shows the amount of memory. If ``CONFIG_CMD_MEMINFO_MAP`` is | |
| enabled, then it also shows the layout of memory used by U-Boot and the region | |
| which is free for use by images. In architectures that support it, it also prints | |
| the mapped pages and their permissions. The latter is architecture specific. | |
| The layout of memory is set up before relocation, within the init sequence in | |
| ``board_init_f()``, specifically the various ``reserve_...()`` functions. This | |
| 'reservation' of memory starts from the top of RAM and proceeds downwards, | |
| ending with the stack. This results in the maximum possible amount of memory | |
| being left free for image-loading. | |
| The meminfo command writes the DRAM size. If the architecture also supports it, | |
| page table entries will be shown next. Finally the rest of the outputs are | |
| printed in 5 columns: | |
| Region | |
| Name of the region | |
| Base | |
| Base address of the region, i.e. where it starts in memory | |
| Size | |
| Size of the region, which may be a little smaller than the actual size | |
| reserved, e.g. due to alignment | |
| End | |
| End of the region. The last byte of the region is one lower than the address | |
| shown here | |
| Gap | |
| Gap between the end of this region and the base of the one above | |
| Regions shown are: | |
| video | |
| Memory reserved for video framebuffers. This reservation happens in the | |
| bind() methods of all video drivers which are present before relocation, | |
| so the size depends on that maximum amount of memory which all such drivers | |
| want to reserve. This may be significantly greater than the amount actually | |
| needed, if the display is ultimately set to a smaller resolution or colour | |
| depth than the maximum supported. | |
| code | |
| U-Boot's code and Block-Starting Symbol (BSS) region. Before relocation, | |
| U-Boot copies its code to a high region and sets up a BSS immediately after | |
| that. The size of this region is generally therefore ``__bss_end`` - | |
| ``__image_copy_start`` | |
| malloc | |
| Contains the malloc() heap. The size of this is set by | |
| ``CONFIG_SYS_MALLOC_LEN``. | |
| board_info | |
| Contains the ``bd_info`` structure, with some information about the current | |
| board. | |
| global_data | |
| Contains the global-data structure, pointed to by ``gd``. This includes | |
| various pointers, values and flags which control U-Boot. | |
| devicetree | |
| Contains the flatted devicetree blob (FDT) being used by U-Boot to configure | |
| itself and its devices. | |
| bootstage | |
| Contains the bootstage records, which keep track of boot time as U-Boot | |
| executes. The size of this is determined by | |
| ``CONFIG_BOOTSTAGE_RECORD_COUNT``, with each record taking approximately | |
| 32 bytes. | |
| bloblist | |
| Contains the bloblist, which is a list of tables and other data created by | |
| U-Boot while executed. The size of this is determined by | |
| ``CONFIG_BLOBLIST_SIZE``. | |
| stack | |
| Contains U-Boot's stack, growing downwards from the top. The nominal size of | |
| this region is set by ``CONFIG_STACK_SIZE`` but there is no actual limit | |
| enforced, so the stack can grow behind that. Images should be loaded lower | |
| in memory to avoid any conflict. | |
| free | |
| Free memory, which is available for loading images. The base address of | |
| this is ``gd->ram_base`` which is generally set by ``CFG_SYS_SDRAM_BASE``. | |
| Aarch64 specific flags | |
| ---------------------- | |
| More information on the output can be found | |
| Chapter D8 - The AArch64 Virtual Memory System Architecture at | |
| https://developer.arm.com/documentation/ddi0487/latest/ | |
| In short, for a stage 1 translation regime the following apply: | |
| * RWX: Pages mapped with Read, Write and Execute permissions | |
| * RO: Pages mapped with Read-Only permissions | |
| * PXN: PXN (Privileged Execute Never) applies to execution at EL1 and above | |
| * UXN: UXN (Unprivileged Execute Never) applies to EL0 | |
| Example | |
| ------- | |
| This example shows output with both ``CONFIG_CMD_MEMINFO`` and | |
| ``CONFIG_CMD_MEMINFO_MAP`` enabled for aarch64 qemu:: | |
| DRAM: 8 GiB | |
| Walking pagetable at 000000023ffe0000, va_bits: 40. Using 4 levels | |
| [0x0000023ffe1000] | Table | | | | |
| [0x0000023ffe2000] | Table | | | | |
| [0x00000000000000 - 0x00000008000000] | Block | RWX | Normal | Inner-shareable | |
| [0x00000008000000 - 0x00000040000000] | Block | PXN UXN | Device-nGnRnE | Non-shareable | |
| [0x00000040000000 - 0x00000200000000] | Block | RWX | Normal | Inner-shareable | |
| [0x0000023ffea000] | Table | | | | |
| [0x00000200000000 - 0x0000023f600000] | Block | RWX | Normal | Inner-shareable | |
| [0x0000023ffeb000] | Table | | | | |
| [0x0000023f600000 - 0x0000023f68c000] | Pages | RWX | Normal | Inner-shareable | |
| [0x0000023f68c000 - 0x0000023f74f000] | Pages | RO | Normal | Inner-shareable | |
| [0x0000023f74f000 - 0x0000023f794000] | Pages | PXN UXN RO | Normal | Inner-shareable | |
| [0x0000023f794000 - 0x0000023f79d000] | Pages | PXN UXN | Normal | Inner-shareable | |
| [0x0000023f79d000 - 0x0000023f800000] | Pages | RWX | Normal | Inner-shareable | |
| [0x0000023f800000 - 0x00000240000000] | Block | RWX | Normal | Inner-shareable | |
| [0x00000240000000 - 0x00004000000000] | Block | RWX | Normal | Inner-shareable | |
| [0x0000023ffe3000] | Table | | | | |
| [0x00004010000000 - 0x00004020000000] | Block | PXN UXN | Device-nGnRnE | Non-shareable | |
| [0x0000023ffe4000] | Table | | | | |
| [0x00008000000000 - 0x00010000000000] | Block | PXN UXN | Device-nGnRnE | Non-shareable | |
| Region Base Size End Gap | |
| ------------------------------------------------ | |
| video 23f7e0000 800000 23ffe0000 | |
| code 23f68a000 156000 23f7e0000 0 | |
| malloc 23e64a000 1040000 23f68a000 0 | |
| board_info 23e649f80 78 23e649ff8 8 | |
| global_data 23e649df0 188 23e649f78 8 | |
| devicetree 23e549df0 100000 23e649df0 0 | |
| bloblist 23e547000 2000 23e549000 df0 | |
| stack 23d546ff0 1000000 23e546ff0 10 | |
| lmb 23d546ff0 0 23d546ff0 0 | |
| lmb 23d543000 3ff0 23d546ff0 0 | |
| free 40000000 23d543000 27d543000 ffffffffc0000000 | |
| Return value | |
| ------------ | |
| The return value $? is always 0 (true). |