mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-14 11:16:58 +02:00
Since we added support in meminfo to dump live page tables, describe the only working architecture for now (aarch64) and add links to public documentation for further reading. Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
164 lines
6.7 KiB
ReStructuredText
164 lines
6.7 KiB
ReStructuredText
.. 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).
|