Provisioning Embedded Linux – Part 1

Development of various Embedded Hardware in market based on various architectures are currently available as various consumer to industrial solutions. Hardware manufacturer also provide Board Supported Package (BSP) to get the hardware up and running with basic system software. Based on various requirements and use cases, these software are engineered in various ways and customized for specific purposes. Deployment of software to those hardware can be achieved in various ways based on hardware and System on Chip (SoC).

 

What is Provisioning?

Custom hardware are build and manufactured and then shipped to customer. But the deployment of software also needs to be done after the production. Usually the hardware come out of production will be bare meta (without any software) and in some cases, the manufacturer or vendor will flash basic Bootloader to get the software deployment started. In both the case, the deployment of software is a separate task and we call it as Provisioning.

 

Problem with Provisioning

The main challenge which is faced during provisioning is to handle multiple targets at the same time. Companies often need to ship millions of units to customers within weeks or in small use cases, this range will around hundreds. Large manufacturing and provisioning chain also includes automated mechanisms to flash the software to storage. In some cases, storage units like eMMC are pre-flashed before deploying/placing it in actual custom hardware. But having such setup is time consuming and not cost effective. Companies which supplies hardware in hundreds will not be able to have such huge setup and tend to involve huge manual efforts to get the hardware provisioned.

 

Use case:

As provisioning the bare metal hardware is specific to hardware or SoC, we will narrow down the real use case for below hardware platform.

Hardware Platform: Phytec Phycore imx6UL/ULL

Primary Storage: eMMC

 

Serial Download Protocol (SDP):

To understand our use case and provisioning process, we need to first understand the Freescale imx6 boot process. This is well documented as part imx6 Technical Reference Manual Chapter 8: System Boot and also there are many articles in internet which explains the boot process.

The overview of boot process is, when the SoC is powered the Boot ROM code will kick start and will look for bootable image from storage mediums like SD, eMMC and so on. If ROM finds correct bootable image, it will load the image into SRAM (inside SoC) or RAM based on configuration and execute it. It most cases the first program to load and run will be bootloader (like U-Boot, Barebox).

In case of newly manufactured hardware without pre-flashed software, there is special software loading option which is present in imx6, which is Serial Download Protocol (SDP) i.e in short Serial loading of software. When ROM couldn’t find any software in all the boot medium it will enter into SDP mode. Typically SDP can be achieved over UART and USB, so the boot ROM will look for bootable image by scanning the USB and UART.

 

Conclusion

Bare metal hardware can be loaded with bootable image using Serial Download Protocol and further our actual production/deployment image can be flashed into storage mediums like SD, eMMC. We will explore this in detail with necessary tools by manually loading and provisioning it. Later we will extend this solution in cheap or low cost automated way.

One thought on “Provisioning Embedded Linux – Part 1”

Comments are closed.