hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
What:        /sys/firmware/memmap/
Date:        June 2008
Contact:    Bernhard Walle <bernhard.walle@gmx.de>
Description:
       On all platforms, the firmware provides a memory map which the
       kernel reads. The resources from that memory map are registered
       in the kernel resource tree and exposed to userspace via
       /proc/iomem (together with other resources).
 
       However, on most architectures that firmware-provided memory
       map is modified afterwards by the kernel itself, either because
       the kernel merges that memory map with other information or
       just because the user overwrites that memory map via command
       line.
 
       kexec needs the raw firmware-provided memory map to setup the
       parameter segment of the kernel that should be booted with
       kexec. Also, the raw memory map is useful for debugging. For
       that reason, /sys/firmware/memmap is an interface that provides
       the raw memory map to userspace.
 
       The structure is as follows: Under /sys/firmware/memmap there
       are subdirectories with the number of the entry as their name::
 
           /sys/firmware/memmap/0
           /sys/firmware/memmap/1
           /sys/firmware/memmap/2
           /sys/firmware/memmap/3
           ...
 
       The maximum depends on the number of memory map entries provided
       by the firmware. The order is just the order that the firmware
       provides.
 
       Each directory contains three files:
 
       ========  =====================================================
       start      The start address (as hexadecimal number with the
             '0x' prefix).
       end      The end address, inclusive (regardless whether the
             firmware provides inclusive or exclusive ranges).
       type      Type of the entry as string. See below for a list of
             valid types.
       ========  =====================================================
 
       So, for example::
 
           /sys/firmware/memmap/0/start
           /sys/firmware/memmap/0/end
           /sys/firmware/memmap/0/type
           /sys/firmware/memmap/1/start
           ...
 
       Currently following types exist:
 
         - System RAM
         - ACPI Tables
         - ACPI Non-volatile Storage
         - reserved
 
       Following shell snippet can be used to display that memory
       map in a human-readable format::
 
         #!/bin/bash
         cd /sys/firmware/memmap
         for dir in * ; do
             start=$(cat $dir/start)
             end=$(cat $dir/end)
             type=$(cat $dir/type)
             printf "%016x-%016x (%s)\n" $start $[ $end +1] "$type"
         done