当前位置: 首页 > web >正文

如何优化系统启动时间--基于米尔瑞萨MYD-YG2LX开发板

1.概述

MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600 / DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、SD卡、MIPI-CSI等外设接口,在工业、医疗、电力等行业都得到广泛的应用。

米尔基于瑞萨RZ/G2L开发板

本文主要介绍基于MYD-YG2LX开发板进行系统启动时间优化的调试案例,一般启动方式有去掉常规uboot,直接使用SPL加载内核和保留常规uboot加载内核的方式,MYD-YG2LX目前使用的是保留常规uboot的方法启动,启动时间20s+,接下来介绍的主要包括TFA、Uboot、Kernel和文件系统时间优化。

2.硬件资源

  • USB-TTL调试串口线一根

  • MYD-YG2LX开发板一块

  • 12V电源适配器一个

3.软件资源

  • Linux虚拟机

  • 米尔提供的SDK交叉工具链

  • Linux5.10.83

4.环境准备

进行调试之前,需要安装好Linux虚拟机等相关开发环境,具体可以参考《MYD-YG2LX_Linux软件开发指南》的2.0章节。

5.启动时间优化

5.1.1. TFA优化

TFA引导启动的log主要有以下,如果我们认为不是太美观,可以到TFA源码中使用grep命令去搜索关键的信息打印,然后把相关的打印去掉,这可能需要花点功夫去寻找。

例如(grep -rn “BL2:”)搜索到关键的文件(以下图示只是其中的一个地方),然后屏蔽即可。

另外,需要检查源码下面的这个寄存器有没有设置,有则忽略,没有则需要打开,这样会减少系统在启动中的时间。

static void cpu_cpg_setup(void)
{
while ((mmio_read_32(CPG_CLKSTATUS) & CLKSTATUS_DIVPL1_STS) != 0x00000000);
mmio_write_32(CPG_PL1_DDIV, PL1_DDIV_DIVPL1_SET_WEN | PL1_DDIV_DIVPL1_SET_1_1);
while ((mmio_read_32(CPG_CLKSTATUS) & CLKSTATUS_DIVPL1_STS) != 0x00000000);
}
void cpg_early_setup(void)
{cpu_cpg_setup();
cpg_ctrl_clkrst(&early_setup_tbl[0], ARRAY_SIZE(early_setup_tbl));
}

最后编译TFA以及更新即可。

5.1.2. Uboot优化

正常的启动log如下,我们需要对这部分进行优化,优化可以从下面3个点出发。

  • 裁剪uboot,减少uboot大小。

MYD-YG2LX平台的2G DDR配置文件在configs/myc-rzg2l_defconfig,1G DDR的配置文件在configs/myc-rzg2l_ddr1gb_defconfig,可以在这个配置文件中屏蔽掉一些自己不需要的功能,这个需要根据实际情况删除不需要的功能,例如:

    • 移除bootdelay的倒计时时间

    bootdelay一般默认都是2-3s,移除可以直接修改include/configs/myc-rzg2l.h文件,例如:

    • 关闭uboot的打印log

    关闭uboot相关的日志打印,可以到uboot的源码路径下搜索关键的信息,然后进行屏蔽即可(以下图示只是其中的一个地方),例如:

    最后编译与更新uboot即可。

    5.1.3. Kernel优化

    Kernel典型的修改主要有以下:

    • 简单:通过在 cmdline 中添加 quiet 来减少控制台消息

    • 适度:通过移除驱动程序、文件系统、子系统来精简内核,从减少内核解压或加载的时间

    • 适度:通过移除未使用的硬件接口精简设备树

    • 棘手:开始优化行为不良的驱动程序,这是一个相对复杂和困难的任务。优化驱动程序可以提高其性能、稳定性和兼容性,从而改善系统的整体表现。然而,如果驱动程序的行为不良,例如出现崩溃、卡顿或冲突等问题,那么进行优化就会变得更加棘手和挑战。这需要深入分析和修复驱动程序的问题,调整其代码和算法,以使其更加高效和可靠。

    • 使用Bootgraph分析内核启动的调用时间,移除花费时间长的驱动和优化需要使用的驱动

    总之优化还算是一项蛮复杂的项目,我们此次主要从以下几点优化:

    • 去掉kernel的打印等级,需要到内核源码下屏蔽掉log属性和到uboot源码下把log等级升高,内核修改如下:

    Uboot修改如下:

    • 关掉kernel不需要的一些外设资源,缩小内核大小(需要根据自己的情况来进行修改)

    可以到设备树中屏蔽掉一些不需要的接口和到内核配置文件中屏蔽掉一些不需要的驱动配置,例如:

    • 使用Bootgraph分析内核启动的调用时间,移除花费时间长的驱动和优化需要使用的驱动。

    首先需要在uboot加上时间戳和init debug调用:

    setenv bootargs 'rw rootwait earlycon root=/dev/mmcblk0p2 printk.time=1 initcall_debug=1'

    然后启动内核,采集启动log,如下:

    dmesg > boot-kernel.log

    返回内核源码目录,进入内核源码scripts目录,只需下面命令,生成直观图形,如下:

    ./bootgraph.pl boot-kernel.log > boot-kernel.svg

    然后打开boot.svg查看花费时间最大的驱动调用,没用的就关闭,需要用的就优化。

    最后编译以及更新内核即可。

    5.1.4. 文件系统优化

    MYD-YG2LX的文件系统是基于yocto构建的,关于yocto如何构建可以参考《MYD-YG2LX_Linux软件开发指南》的3.0章节。

    文件系统主要使用下面这3个命令就可以找到花费时间最多的服务,然后可以根据实际情况优化。当然也可以把所有的服务以图形的形式表现出来,这样更加直观,采用systemd-analyze plot > boot.svg 可以把每个服务启动顺序和消耗时间显示出来,针对这些服务,移除掉不需要的或者调整服务之间的启动顺序。

    systemctl list-unit-files --state=enabled #查看所有开机自启的服务
    systemd-analyze blame #查看服务的初始化时间
    systemd-analyze critical-chain #查看启动花费时间最多的

    5.1.5. 启动测试

    经过以上的优化后可以打包一个sd卡刷机包并刷到板子的emmc,关于如何打包可以参考《MYD-YG2LX_Linux软件开发指南》的4.3章节,最后再启动测试,执行systemd-analyze即可看到启动时间,效果如下:

    http://www.xdnf.cn/news/5023.html

    相关文章:

  • linux ptrace 图文详解(八) gdb跟踪被调试程序的子线程、子进程
  • Python 中方法命名中下划线的使用规则
  • 深入解析:思维链模型在大语言模型中的应用与实践
  • 力扣-21.合并两个有序链表
  • 抓取大站数据与反爬策略
  • 掌握单元测试:提升软件质量的关键步骤
  • 基于HTML+JavaScript+CSS实现教学网站
  • 免布线视频桩:智慧城市停车降本增效的破局利器
  • 进入虚拟机单用户模式(Linux系统故障排查)
  • 用前端视角理解 GraphQL 与 REST 的互补逻辑
  • AD原理图复制较多元器件时报错:“InvalidParameter Exception Occurred In Copy”
  • 神经元和神经网络定义
  • 设置GO程序在离线情况下读取本地缓存的模块
  • Rust 中的 Move、Copy 和 Clone:深度剖析
  • 深入探索Laravel框架中的Blade模板引擎
  • python中的celery和其他分布式任务队列
  • 数据结构每日一题day17(链表)★★★★★
  • 公开模型一切,优于DeepSeek-R1,英伟达开源Llama-Nemotron家族
  • Linux系统使用vscode格式化shell脚本
  • spring5.x讲解介绍
  • LeetCode-双指针-盛最多水的容器
  • Power Apps:Patch函数添加人员或组列的项
  • 在js中大量接口调用并发批量请求处理器
  • Node.js 24.0 正式发布:性能跃升与开发体验全面升级
  • FPGA:如何提高RTL编码能力?
  • p2p虚拟服务器
  • SSTI模版注入
  • excel单元格如果是日期格式,在C#读取的时候会变成45807,怎么处理
  • 更换芯片后因匝数比变化,在长距离传输时出现通讯问题。我将从匝数比对信号传输的影响、阻抗匹配等方面分析可能原因,并给出相应解决方案。
  • 拉西坦类促智药物的异同