Many projects assume optimization for one, specifically defined task. One-track solutions are selected to eliminate costs, unfortunately at the price of difficult development and lack of flexibility. Sometimes you need a completely different approach and a decision to be versatile, which may prove to be the key to rise the development process to a whole new level.

IDO Electronics is able to focus on the universality of the fundamental stages of manufactured devices. The main assumption is to develop a uniform system of implementing subsequent tools constituting the basis for many different solutions. Following this proven methodology will dramatically increase the pace of implementation and ensure the stability of a project at any stage of development.


The basis of the entire family of electronic devices is prepared by us for the replacement assembly of individual components. Instead of one physical implementation of the interface, another can be installed, depending on the emerging needs. It is enough to make a simple change in the product documentation (BOM) and produce the selected hardware variant.

The common part representing our product line is the NXP i.MX6 processor based on the Arm Cortex®-A7 core. It is an integrated circuit ideal for the implementation of multimedia projects with wide functionality. Thanks to the integrated support for many different interfaces, it allows you to build a family of devices without the need to redesign them from scratch. Depending on the application, we can choose a processor variant that performs a specific set of tasks from a number of available options.

    • Memory: LP DDR2, DDR3, DDR3L, NAND flash, NOR flash, eMMC.
    • Peripheral interfaces: SPI, Quad SPI, I2C, PWM, ADC/DAC, CAN, USB OTG, UART, RS232/485 (indirect).
    • Network interfaces: Ethernet, WLAN, Bluetooth ™, GPS.
    • Integrated support for displays, sensors, image sensors.
A view of electronic device using i.MX6

After loading the image, you should wait about 20 seconds for the model to fully load.


U-Boot stands for Universal Boot Loader. The very name of this software indicates its versatility. It allows you to load the system Kernel from commonly used data carriers, such as SATA, flash, USB flash drive, or SD card. It is adapted to support a variety of file systems. In addition, our bootloader has been enriched with the ability to upload a system image in the OTA network mode – TFTP/NFS. In the same way, we carry out automatic U-Boat updates of devices with Internet access.

Holding the button on the board or pressing any key while the device is booting breaks the automatic boot process. Communication with the bootloader is exposed to the serial port, enabling its further handling. The basic data exchange takes place using the default configuration, which means a throughput of 115200 bit/s, 8 data bits, no flow control, and the parity bit. U-boot supports input devices connected to the USB port and has implemented support for displays and monitors, so there is no need to upload ready-made scripts on an image medium or to connect an additional computer that enables communication.

What’s important is that the bootloader works regardless of the hardware version it supports. Additionally, it performs the function of recognizing the hardware configuration in a given product variant. The processor communicates with the individual integrated circuits, thus creating a reference point for system image compatibility to be loaded.


The kernel of the system requires proper configuration for a specific hardware solution. To achieve this, we create the Device Tree structure. That means a list of data used to describe the hardware configuration. By defining the peripherals needed for the proper operation of the system in its own resources, we ensure the universality of low-level bootloader software.

The next step in the Kernel configuration process is to add hardware drivers that are usually compiled as kernel modules. Many processes are also optimized for the resources of a specific computing unit. We carry out the configuration of network support, ports, peripherals, and the file system controlling the flow and data structure. The Kernel is the main part of the operating system responsible for providing resources to all higher processes. Due to its intended use, the most important instructions require access to all areas of memory and commands. The appropriate configuration ensures the stability of the entire device. Linux system mascotte - a penguin named Tux

In the process of building the system environment, we use and develop flexible tools that make up our toolchain. Depending on the project needs, we modify libraries, cross-compiler, or debugger separately, and sometimes we decide on ready-made comprehensive Buildroot/Yocto solutions. A carefully organized Kernel configuration procedure allows us to very efficiently implement subsequent projects from the same family of devices.

User space

Thanks to the planning of versatility from the very beginning of hardware design and ensuring the flexibility of the kernel configuration process, we can accomplish many new tasks with a minimal amount of further work. Depending on the final purpose of the system, we select the appropriate system distribution or, if necessary, build our own, tailored to specific tasks. For this purpose, we most often use the available resources of the Yocto project, which provides a set of tools for creating custom versions of the operating system. The flexibility of the rest of the project phases ensures compatibility with a wide set of distributions.

The separation of the kernel and user space ensures security and improve stability. In the user space area, application processes are primarily performed. Thanks to this, the direct impact of errors and program defects on the operation of the operating system is eliminated. Also at this stage of the entire project implementation, we ensure the universality of our tools. The applications and high-level drivers we create are independent of the target distribution and work properly on many different platforms.