嵌入式 ARM Linux T113 快速启动思路
·
文章目录
1、环境介绍
平台:T113 Buildroot + Qt 5.15.9
SDK:Tina5.0 V1.2
存储介质:SPI NAND Flash
2、前言
这里讨论的启动速度,指的是设备上电到应用桌面显示的整个时间。关于启动速度优化,总结下来,可以分为两个部分:第一种是常规的优化,关闭打印,关闭多余的外设驱动等;第二种需要结合自己的应用,看看哪里卡的比较久,可以优先让桌面先显示出来,其它服务器再后开。
3、优化前的启动时间
设备上电到显示 Qt 桌面的时长:15 ~ 22 秒之间(记忆值)
4、常规优化
4.1、U-Boot
4.1.1、配置裁剪
- 查看 uboot 设备树,把不需要的设备 disabled。
- 查看 uboot 配置单,把不需要的驱动直接关掉。可以借助 AI 来判断。比如关掉用不到的屏幕驱动。
- 通过查看启动 log 的打印,再次确认大幅影响启动速度的配置,然后针对性修改,修改范围包括但不限于程序、设备树、配置单。
4.1.2、关闭日志打印
- 上一步完成后,现在可以关闭打印:
<sdk>/device/config/chips/t113/configs/xiaozhi/sys_config.fex

<sdk>/device/config/chips/t113/configs/xiaozhi/uboot-board.dts

- 调整 bootdelay:
<sdk>/device/config/chips/t113/configs/xiaozhi/buildroot/env.cfg

4.2、内核
4.2.1、配置裁剪
和 U-Boot 同理。
4.2.2、关闭日志打印
<sdk>/device/config/chips/t113/configs/xiaozhi/buildroot/env.cfg

4.2.3、优化随机数子系统
禁用内核随机数子系统的启动期阻塞策略:
<sdk>/kernel/linux-5.4/drivers/char/random.c

4.2.4、优化 MIPI 屏初始化序列
修改 MIPI 初始化序列,降低延时:

uboot 驱动需要同步修改。
4.3、系统层
先启动 APP 再启动系统服务:
/etc/inittab

# /etc/init.d/rcS 里可以加个延时,延后执行
/etc/init.d/rcS

5、测试
经过上面的调整,测试结果如下:
- 设备插上电 ----> boot0 ----> uboot ----> 内核开始启动:平均耗时 2.7s 左右
- 内核开始启动 ----> 内核启动结束 ----> 文件系统开机脚本被执行:1.8s 左右
- 文件系统开机脚本被执行 ----> UI 桌面出来:5~6s 左右
整体需要 10s 左右。
6、继续优化
6.1、U-Boot
uboot 阶段目前是 2.7s 左右,可以把显示驱动关掉,大概可以再快 1s 左右,缺点是无法显示 logo:
CONFIG_DISP2_SUNXI=n
CONFIG_BOOT_GUI=n
CONFIG_CMD_SUNXI_BMP=n
这部分的优化我最后取消了。
6.2、启动顺序优化
秉承一个思想:所有无关紧要的东西都可以放在桌面出来后再去启动。
6.3、Qt 程序优化
- 之前的 qt 程序启动时,会报警告:
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
这是因为 Qt 在转换字符编码时调用 iconv 库失败,通常因为交叉编译时未启用 iconv 或目标系统缺少 locale 支持,Qt 回退使用 Latin-1 编码。需要在编译 Qt 时指定 -no-iconv。这个警告解决后,可以提升 1s。
- Qt main.c 程序中,可以使用
事件循环延迟执行机制, 将耗时初始化延迟到事件循环中执行:
QTimer::singleShot(0, [&]() {
...
})

7、继续测试
- 设备插上电 ----> boot0 ----> uboot ----> 内核开始启动:平均耗时 2.7s 左右
- 内核开始启动 ----> 内核启动结束 ----> 文件系统开机脚本被执行:1.8s 左右
- 文件系统开机脚本被执行 ----> UI 桌面出来:3.5s 左右

总体耗时大概在 8s 左右。如果关闭 uboot 显示驱动,大概在 7s 左右。
8、参考文章
https://www.sohu.com/a/736576759_120104787
9、总结
以上的操作都还算是触手可及的,对于更极致的快启追求,可以根据 Linux 启动流程原理,在每个环节的引导过程中再做优化。
嵌入式Linux学习交流群:424571391
更多推荐


所有评论(0)