Case Study: HMI Boot time reduction

For an Linux based In-Vehicle-Infotainment (IVI) platform, Client expected us reduce the 22 Sec boot-time of the HMI, and get the Rear View Camera to be coming up within 4 Sec and the HMI component to be up by 8 Sec.

Problem

For an Linux based In-Vehicle-Infotainment (IVI) platform, Client expected us reduce the 22 Sec boot-time of the HMI, and get the Rear View Camera to be coming up within 4 Sec and the HMI component to be up by 8 Sec.

Solution

We have split our effort to first to measure and analyze the time taken by each component of the system, in the boot sequence.

We broke down effort to measure timing of U-Boot, Kernel & Rootfs applications.

In u-boot, we started reducing the banner displays, optimized the NAND timing by increasing the clock-rate, enabling the DDR mode in NAND controller and fixing copy overheads in the NAND driver of the uboot code.

The kernel boot time we measured and we started trimming down the drivers which were not required by our system, then we started moving few kernel modules which were not required at boot time as loadable kernel module. Made the kernel console logs to be quiet. Fixed the NAND driver kernel to support higher clock rate and DDR mode.

Made an initramfs to be thin to have the RVC code and start the RVC application as a first app and spawning the init from it.

Full rootfs had the systemd as init system, measured the systemd boot time using systemd-analyze and started disabling the services which were not required for the system. Reordered the services to get the HMI earlier in the boot sequence.

The next major chunk was filesystem mounting time, which we optimized by analysing the required components and their dependency graph in Yocto, started trimming the components and reducing the rootfs size then, split down the rootfs into two partition so the primary partition has thin rootfs, so mount time was less.

Expertise Exercised

  • Our Understanding on uboot build, NAND driver and NAND bus interface

  • Our knowledge in Linux kernel build, boot flow and MTD driver code modification

  • Our expertise in systemd like boot sequence, modifying and writing custom service files.

  • Our hands-on experience in the Yocto recipe development, package-group and image recipe optimization, machine and BSP’s meta-layer tuning.