board_inspector/extractors: extract memory layout

This patch extracts information on mapping of available RAM and put them
under the `/acrn-config/memory` node in the board XML. Each range of
available RAM is represented by its start (host physical) address, end
address and size (in byte).

The following is an example of the generated XML.

  <memory>
    <range start="0x0000000000000000" end="0x0000000000057fff" size="360448"/>
    <range start="0x0000000000059000" end="0x000000000009dfff" size="282624"/>
    <range start="0x0000000000100000" end="0x00000000c9ff9fff"
    size="3387924480"/>
    <range start="0x00000000c9ffc000" end="0x00000000d984afff"
    size="260370432"/>
    <range start="0x00000000dbdff000" end="0x00000000dbdfffff" size="4096"/>
    <range start="0x0000000100000000" end="0x000000041dffffff"
    size="13388218368"/>
  </memory>

Tracked-On: #5922
Signed-off-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
Junjie Mao 2021-05-03 16:17:30 +08:00 committed by wenlingz
parent ffe213359c
commit 52ee5827e1

View File

@ -0,0 +1,23 @@
# Copyright (C) 2021 Intel Corporation. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
import logging
import lxml.etree
from memmapparser import parse_e820, e820
from extractors.helpers import get_node, add_child
def extract_layout(memory_node):
e820_table = parse_e820()
for e820_entry in e820_table:
if e820_entry.type == e820.E820_TYPE_RAM:
start = "0x{:016x}".format(e820_entry.start)
end = "0x{:016x}".format(e820_entry.end)
size = e820_entry.end - e820_entry.start + 1
add_child(memory_node, "range", start=start, end=end, size=str(size))
def extract(board_etree):
memory_node = get_node(board_etree, "//memory")
extract_layout(memory_node)