在ARMv7-A CPU上以528 MHz的速度在0.37秒内启动嵌入式Linux

2020-06-18 06:03:04

基于嵌入式Linux的系统在开机后0.33秒进入用户空间。EXT4文件系统在0.37秒内准备就绪,在2.2秒内完成联网。具有528 MHz ARMv7-A CPU、1 GB DDR3 RAM和4 GB eMMC的i.MX6UL SoC令人印象深刻!重新启动甚至更快,从发出重新启动到进入用户空间只需要0.26秒。

请注意,除EXT4文件系统之外的所有软件都是安全引导链的一部分。如果没有安全引导,系统的引导速度会更快,但幸运的是我没有机会尝试。

首先,电源打开了。大约1毫秒后,硬件将重置释放到i.MX6UL,很快ROM代码从eMMC读取引导加载程序,验证其完整性并跳转到它。它产生185毫秒的时间,远远超过预期。这是很难做任何事情,因为这是正版恩智浦软件。

Punchboot引导加载程序开箱即用速度非常快,为了使其更快,删除了设备树修补程序(现在已完成编译时),并将eMMC类型从DDR52更改为HS200。引导加载程序从eMMC读取Linux内核(3.5MB)、内存磁盘(1.4MB)和设备树(8kB),并在86毫秒内验证它们。然后它启动Linux内核。没有其他引导加载程序浪费,甚至U-Boot也没有。

该系统的微型Linux内核(版本4.14.78)在大约62毫秒内启动,这是非常快的。这是通过最小的内核配置、几个补丁、最小的设备树以及未压缩的内核和内存镜像来实现的。

消除了MMC驱动程序中不必要的延迟(我希望如此)。这是可能的,因为我们非常清楚哪个MMC安装在电路板上,并且它始终处于通电状态。

以MMC时钟频率52 MHz开始,安装400 kHz。就像上一颗子弹一样。

10 Hz以太网PHY轮询,而不是1 Hz。如果PHY在其链路连接时发送中断,则不需要。

静态链接的初始化进程是ramdisk的一部分,它包含整个应用程序。它是用C语言实现的,开销低,内存和CPU时间都很短。没有叉子。没有剧本。没有共享库。然而,它不包含cURL和其他库,这使得它大约800kB。

EXT4文件系统(不使用dmverity进行完整性检查)在进入用户空间后40ms内挂载。启用程序是提前启动自定义的MMC驱动程序。

到目前为止,联网需要最长的时间来做好准备。主要原因是以太网自动协商需要相当长的时间,大约1到3秒。不需要以太网或可以使用无线链路配置的用户可以节省大量时间。

下面是Linux内核日志中的精选消息,以更好地了解正在发生的事情。日志中也有一些用户空间消息。

[0.000000]物理CPU0x0[0.000000]Linux4.14.78版(ERIK@ERIK-GR8)(GCC 9.1.0版(GCC))#1星期二16 19:18:46 UTC 2020[0.022802]解包initramf.[0.025535]mmc0:2190000.usdhc[2190000.usdhc]上的sdhi控制器使用adma[0.034262]释放initrd内存:1416K[0.035840]释放未使用的initrd内存。/ROOT/fe.ko';.[0.053621]1970-01-01 00:00:00:00 INFO DEFAULT已成功插入';/ROOT/ext4.ko';.[0.057696]fec 218800。以太网eth0:已注册的PHC设备0[0.058009]mmcblk0:p1 p2 p3 p4 p5 p6[0.076813]ext4-fs(Mmcblk0p3):使用有序数据模式挂载的文件系统。选项:(NULL)[0.082744]1970年-01-01 00:00:00信息默认值/ext4fs/自述文件:+-+[0.082812]1970-01-01 00:00:00信息默认值/ext4fs/自述文件:|Monolinux Jiffy|[0.082869]1970-01-01 00:00:00信息默认值/ext4fs/自述文件:+。LAN8710/LAN8720 218800。以太网-1:01:连接的PHY驱动程序[SMSC LAN8710/LAN8720](MII_Bus:PHY_Addr=218800。以太网-1:01,IRQ=轮询)[0.114607]ipv6:addrconf(Netdev_Up):eth0:链路未就绪[1.892754]fec 218800。以太网eth0:链路打开-100 Mbps/全流控制rx/tx[1.892791]ipv6:addrconf(Netdev_Change):eth0:链路就绪[1.893268]1970-01-01 00:00:01 info dhcp_client从接口'开始;eth0';.[1.900520]1970年-01-01 00:00:01信息dhcp_client已收到报价数据包。

硬件:RST_N高ROM代码:GPIO低引导加载器:GPIO高Linux:";Main";printedFilessystem:dmesg";已装载.";-dmesg";正在释放.";+";Main";printedNetwork:dmesg";收到报价.";-dmesg";正在释放.";+";Main"