Heterogeneous multiprocessor SoCs are becoming more common for use in application areas such as advanced driver assistance systems (ADAS) and autonomous vehicles, networking, industrial automation, security, video analytics and machine learning. These SoCs often have GPUs and/or hardware accelerator units that work together on a common set of data, however, the simplest coherent processing systems use multiple clusters of CPUs. These CPU clusters can be homogeneous, or heterogeneous, such as Imagination’s MIPS I6500 architecture.
Linux has become the general purpose operating system of choice for embedded systems, and now for these heterogeneous multi-cluster architectures Linux needs to be modified to support the coherence between the clusters, as well as whatever differences exist between the clusters in terms of number of processors, processor type, and other features and capabilities. Most vendors use an open source Linux distribution from their processor IP vendor, then build a custom distribution representing the cluster/processor configuration and device tree supported for the specific SoC. This custom Linux distribution needs to include the necessary drivers for the peripherals on the SoC, as well as supporting other customizations and unique features. Obviously, this gets quite complex, and the complexity keeps increasing with increasing device complexity, including coherence.
This need to port, customize and bring up Linux on these heterogeneous SoCs requires significant engineering effort by the SoC developer. Also, their customers do not always reward this effort by paying more for the SoCs. So how can the semiconductor vendors make this Linux task more efficient? What are the best practices for Linux porting and bring up on heterogeneous multi-cluster/multiprocessor SoCs?
John Min, Solution Engineer at Imagination Technologies, covers components of the basic Linux kernel, device trees and other customizations, SMP variations, static and dynamic drivers, and coherency for multi-cluster architectures. The methodology used for bring up of the Linux kernel, starting with boot loaders including U-boot, on hardware is presented.
Simon Davidmann, CEO of Imperas Software, discusses a robust debug and test environment based on virtual platform technology. Virtual platforms provide a complementary approach to porting and bring-up on hardware, with benefits of controllability, observability and repeatability. Virtual platforms also enable easy automation of testing, as needed for an Agile Continuous Integration (CI) development and test methodology. Specific OS-aware tools are also highlighted, plus non-intrusive memory monitors, the use of software assertions, and code and functional coverage techniques for operating systems and drivers.