]> git.codelabs.ch Git - muen/mugenhwcfg.git/summary
descriptionMuen hardware config generator
ownerReto Buerki
last changeThu, 7 Dec 2023 13:58:51 +0000 (14:58 +0100)



mugenhwcfg is a Python tool developed to support the Muen Project. It retrieves hardware information from a running Linux system and produces a Muen hardware configuration file in XML format.


mugenhwcfg requires Python 3. It also requires iasl (part of the acpica-tools package) and cpuid to be installed:

$ sudo apt-get install acpica-tools cpuid

Optionally, mugenhwcfg also uses the Python Package lxml to format the generated XML file. You can get it (if not yet installed) with either:

$ sudo apt-get install python3-lxml


$ sudo pip install lxml

Installing mugenhwcfg

mugenhwcfg can be obtained from the repository with the command:

$ git clone --recursive https://git.codelabs.ch/git/muen/mugenhwcfg.git

This clones all submodules required by the tool as well as the source files.

Running mugenhwcfg

After installation, mugenhwcfg can be run with the following commands:

$ sudo modprobe msr
$ cd mugenhwcfg
$ sudo ./mugenhwcfg.py

Root user permissions are necessary to allow mugenhwcfg to examine system data.


After running the tool, the output XML file will be produced in the tool directory and will be named output.xml.

Any errors encountered by the tool will (by default) prevent the output file from being generated. The tool can attempt to generate an output file anyway (for manual editing) using the -f / --force argument.


As the tool relies on external files (such as the pci.ids repository), some of these files might need to be updated to retrieve accurate information. You can utilise the -u / --update argument to download and update these files automatically.

Optional Arguments

More about mugenhwcfg

How it works

mugenhwcfg scans Linux system files (/sys, /proc, /dev) for processor, memory and device information needed by the Muen kernel. It then fills up PyXB Python objects with the information and creates an XML file.

Use of PyXB Library

mugenhwcfg utilises the PyXB package to generate a Python binding file from a hardware configuration schema file which should be included with the tool distribution at /schema/hardware_config.xsd. This generation happens the first time the tool is run, at the location /generated/hardware_config.py. This binding file is then used to create and fill objects that are later converted to XML in the output.

The PyXB package is included as a submodule in the mugenhwcfg repository at: /contrib/pyxb

Use of pci.ids

To decode device names, mugenhwcfg parses the pci.ids file in /data/pci.ids. pci.ids is a repository of PCI identification numbers maintained by the good people here.

Running Tests

The mugenhwcfg tests require the Python package pytest:

$ sudo apt-get install python3-pytest


$ sudo pip install pytest

After installing the required dependencies, the tests can be run with:

$ py.test-3

To produce a coverage report, execute the following commands:

$ sudo apt-get install python3-pytest-cov
$ py.test-3 --cov=src

Append the --cov-report html option if a html report instead of terminal output is desired.

Additional information on generated hardware file

mugenhwcfg alters the following in the XML output hardware file to match the requirements of the Muen Kernel:

Devices (PCI)
Devices (Serial)


You can drop an email to the Muen development team's mailing list at


or contact the author (Chen Chin Jieh) directly at



Big thanks to Adrian and Reto for their unending guidance and advice!

2023-12-07 Reto BuerkiAdd support for multiple MCFG tables devel master v0.7.2
2023-02-01 Reto BuerkiCollect TSC frequency in kHz v0.7.1
2023-01-04 Adrian-Ken... Gracefully handle non-existent/invalid legacy IRQ
2022-12-22 Adrian-Ken... Gracefully handle non-existent/invalid legacy IRQ
2022-11-22 Reto BuerkiVarious minor fixes and enhancements v0.7
2022-11-22 Reto BuerkiRun cpuid command on first core
2022-11-22 Adrian-Ken... Update pci.ids to version 2022.11.19
2022-11-16 Adrian-Ken... Collect additional VMX-related MSRs
2022-08-29 Reto BuerkiFix message count handling
2022-02-02 Reto BuerkiTwo fixups for python3 migration and CPUID/MSR values
2022-01-26 Reto BuerkiEnforce alphabetical ordering of attributes in output
2022-01-26 Reto BuerkiAdjust names of [cpuID|msr]Type types
2021-12-21 Adrian-Ken... Extract PCI Config Space size from MCFG table
2021-12-21 Adrian-Ken... Set the pciConfigSize attribute to the calculated value
2021-12-21 Adrian-Ken... Add getPciConfigSize() function
2021-12-20 Adrian-Ken... schema: Add pciConfigSize attribute to devices element
5 months ago v0.7.2 Mugenhwcfg version 0.7.2
15 months ago v0.7.1 Mugenhwcfg version 0.7.1
17 months ago v0.7 Mugenhwcfg version 0.7
2 years ago v0.6 Mugenhwcfg version 0.6
6 years ago PyXB-1.2.6 PyXB release 1.2.6
7 years ago PyXB-1.2.5 PyXB release 1.2.5
8 years ago v0.5 Mugenhwcfg version 0.5
9 years ago PyXB-1.2.4
10 years ago PyXB-1.2.3
11 years ago PyXB-1.2.2
11 years ago PyXB-1.2.1
11 years ago PyXB-1.2.0
11 years ago PyXB-1.1.5
11 years ago PyXB-1.1.4
12 years ago PyXB-1.1.3
13 years ago PyXB-1.1.2
5 months ago master
5 months ago devel
17 months ago devel-irq-collection