Understanding the MPF boot up / start process

A user runs "mpf" from the command line, which is registered as a console script entry point when MPF is installed. That entry point calls the function run_from_command_line in mpf.commands.__init__ module.

That module parses the command line arguments, figures out the machine path that's being executed, and figures out which MPF command is being called. (MPF commands are things like "both" or "mc".)

Some commands are built-in to MPF (in the mpf/commands folder), and others are registered as MPF via plugin entry points when other packages are installed. (For example, MPF-MC registers the "mc" command, the MPF Monitor registers the "monitor" command, etc.)

When you launch MPF (via mpf game or just plain mpf), the mpf.commands.game module's Command class is instantiated. This class processes the command line arguments, sets up logging, and then creates an instance of the mpf.core.machine.MachineController class.

(This class is run inside a try: block, with all exceptions captured and then sent to the log. This is how MPF is able to capture crashes and stack traces into the log file when it crashes.

The Machine Controller

The Machine Controller can be thought of as the main "kernel" of MPF. It does a lot of things, including:

  • Loading, merging, & validating the config files
  • Setting up the clock
  • Loading platform modules (based on what's used in the configs)
  • Loading MPF core modules
  • Loading MPF plugins
  • Loading scriptlets and custom machine code
  • Stepping through the initialization and reset phases