ESM8400工控主板3.8秒快速启动Linux系统

 2025-1-17 15:27:50     作者:黄志超     联系作者    

ESM8400是英创基于NXP i.MX8M Plus开发的4核Cortex-A53 64位高性能工控主板,主频1.6GHz,同时包含了GPU、VPU、NPU。ESM8400接口资源丰富,支持双千兆以太网、6串口、双CAN总线接口、PCIe3.0、SPI、I2C等接口,支持LVDS、HDMI显示。


可以支持的系统有Linux-6.6.23,Ubuntu-24.04,Debian 12以及Windows 10 IoT企业版操作系统,其中Linux-6.6.23,Ubuntu-24.04以及Debian 12系统可以通过专门的设置,来实现上电后的快速启动。通过优化启动时间的主板经过测试,从上电到用户的程序启动,能够从12秒缩短到3.8秒左右。为了实现快速启动,我们从三分方面来优化了启动时间,分别是bootloader阶段的启动时间(即引导Linux内核启动的阶段),Linux内核启动时间以及应用层服务启动的时间。


bootloader阶段的启动时间

ESM8400主板是使用U-Boot作为bootloader,通常情况下U-Boot包含了SPL和U-Boot proper两部分。SPL是一组可以放在CPU内部SRAM中运行的最小启动代码,主要负责初始化内存,以及读取ATF和U-Boot proper到内存(DRAM)中。ATF负责加载ARM安全性相关的功能,这部分涉及的内容较多且复杂,这里就不详细介绍了。U-Boot proper负责初始化部分外设,以及引导Linux Kernel启动,它提供了灵活的方法加载和启动 Linux 内核,并提供了一些常用的工具,可以通过命令行界面与主板进行交互。因此相比SPL来说U-Boot proper的体量更大,无法放在SRAM中,而需要放在内存中运行。整个流程如下图所示:

图片1.png


这个阶段采用的优化方案是通过SPL直接引导Linux Kernel启动,省去了U-boot proper的读取以及启动时间,优化后的启动流程如下:

图片2.png


Linux内核的启动时间

Linux内核的启动时间主要是通过两点来优化。第一点是去掉了多余的打印信息,主板因为是通过115200波特率的串口终端打印,通过计算就可以得出大约每1ms能够打印10个字节的数据,因此输出得信息过多会占用相当长的时间。


第二点是利用Linux内核的模块化设计,将用户不需要使用到的功能精简掉,这样内核在启动过程中,就会减少加载对应的驱动模块,启动时间自然就变快了。不过这部分的优化需要用户和英创的工程师充分沟通,才能在保证不影响功能的情况下,将启动时间最大程度的优化。


应用层服务启动的时间

现在的Linux系统,包括各个发行版的Linux系统(包括Ubuntu和Debian),都采用的systemd来启动服务,同样的可以通过客户的需求来精简掉不需要的服务,或者调整优化启动的顺序,这样可以保证让用户的应用程序尽快的启动。


经过上面介绍的三个方面的优化,ESM8400主板的从上电到用户程序的启动时间能够得到较大的提升,不过Linux内核的启动时间和应用层服务的启动时间还跟用户所需的功能有一定的关系,如果实际使用中依赖的功能少,就意味着可以精简掉的功能就更多,可以节约出更多的时间,下图是做的一个基本测试,主要是优化了bootloader阶段的启动时间和应用层服务启动的时间,Linux内核保持出厂默认配置没有做进一步精简:

图片3.png


可以看到从上电开始计算,到应用程序输出第一条信息大约为3.8秒的时间。对比优化前的启动时间12秒来说,有了三倍多的提升。


感兴趣的用户可以跟英创的工程师联系,获取此方案更多详细的信息。