SMP Support — Usage


Support is available for SMP operation of the four CPUs available in the Pi2, Pi3 and CM3 variants. However, debugging support is restricted to using an external SMP-aware JTAG debugger like ARM's DS-5 or a Lauterbach Power Debug probe. RedBoot does not have support for multi-core debugging.

A board intended to be used for SMP development should be initialized in the same way as a single core board by installing the same standard RedBoot SD card image.

SMP support is enabled by setting CYGPKG_HAL_KERNEL_SUPPORT to true. SMP applications should only be built using either ROM, JTAG or SMP startup types. ROM applications can be loaded from the SD card in place of RedBoot. The SMP startup is identical to a ROM startup except that the load address is set to allow the application to be loaded into a higher location in RAM from RedBoot. All application types may also be loaded via a JTAG debugger.

Loading an SMP startup application via RedBoot can be done from the RedBoot command line via serial. It may also be loaded via a GDB connection on serial. However, once started running the SMP application will take full control of the system, including redirecting all interrupt sources, exception vectors and virtual vector table entries. This means that RedBoot will no-longer be active. Any breakpoints planted by GDB will result in an exception to the application, Ctrl-C will not work, any Ethernet connections will be lost and serial output will come from the application in plain ASCII. Any GDB connection will be lost and GDB may start reporting packet errors.

It is possible to load an SMP startup program via GDB and have its output displayed on the GDB console. To do this set CYGSEM_HAL_DIAG_MANGLER to "GDB", and CYGDBG_HAL_DIAG_TO_DEBUG_CHAN to 1. The application will still not be controllable from GDB, but this does simplify the running of test code; avoiding the need to disconnect GDB and connect a terminal emulator to capture or view the output.

SMP development has been tested using the Lauterbach TRACE32 debugger. While DS-5 should also work, given appropriate configuration, this has never been tested. GDB working through a JTAG debugger such as OpenOCD may work, but support for debugging multiple cores is poor.