我正在开发一个嵌入式系统。操作系统是 yocto 项目(Ubuntu)。我的目标硬件必须在开机后启动动画应用程序。我将我的动画应用程序作为 basic.target 下的 systemd 服务启动。
但是,一旦我打开电路板电源,屏幕就会闪烁约 500 毫秒,然后光标会闪烁 10 秒,然后我的动画应用程序就会启动。所以我的动画应用程序需要大约 13 秒才能开始显示在屏幕上。
我想消除闪烁的屏幕和光标。我该怎么办?有什么方法可以最大限度地缩短内核启动时间吗?
systemd-analyze blame的结果如下:
1.065s dev-mmcblk1p1.device
1.004s launchHMIUSB.service
518ms launchWeston.service
437ms node-startup-controller.service
287ms kmod-static-nodes.service
286ms systemd-remount-fs.service
279ms pas-daemon.service
254ms systemd-modules-load.service
245ms alsa-restore.service
219ms systemd-journal-flush.service
219ms connman.service
207ms systemd-udev-trigger.service
202ms dev-hugepages.mount
190ms systemd-journald.service
138ms systemd-sysctl.service
133ms ofono.service
127ms systemd-vconsole-setup.service
121ms tmp.mount
120ms systemd-update-utmp.service
117ms dev-mqueue.mount
102ms systemd-logind.service
101ms node-health-monitor.service
93ms sys-fs-fuse-connections.mount
90ms sys-kernel-config.mount
90ms sys-kernel-debug.mount
88ms systemd-tmpfiles-setup-dev.service
74ms [email protected]
68ms wpa_supplicant.service
67ms systemd-udevd.service
60ms nodestatemanager-daemon.service
53ms systemd-update-utmp-runlevel.service
31ms systemd-random-seed.service
31ms systemd-user-sessions.service
18ms sshd.socket
16ms systemd-tmpfiles-setup.service
16ms Data-mnttemp.mount
15ms var-volatile.mount
答案1
最小化启动时间是第 3 步。第 1 步和第 2 步正在弄清楚什么实际上需要很长时间,为什么。
启动过程并不像“电源按钮 → 内核 → 您的应用”那么直接。在前 500 毫秒内,您将获得初始固件;引导加载程序(如果有);以及加载图形驱动程序的 Linux 内核。其余部分是“init”(systemd)启动各种服务,直到它甚至可以开始启动您的应用。
- 检查系统日志来寻找最明显的故障。
- 检查 的输出
systemd-analyze blame
,systemd-analyze critical-chain
查看哪些 systemd 单元启动时间最长。找出每个单元启动缓慢的原因,以及是否有必要启动。(大多数单元以并行组的形式启动。有些单元是串行启动的,但有时没有必要。) - 使用类似工具引导图表在系统启动期间监控资源。例如,可能是您的存储太慢,或者某个服务占用 CPU 的时间太长。
答案2
通过传递 vt.global_cursor_default=0,光标闪烁已被消除
setenv bootargs 'vt.global_cursor_default=0'
saveenv