如何优化系统启动时间--基于米尔瑞萨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.mzph.cn/diannao/82381.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    QML 图像变换(缩放、平移、旋转)

    目录 引言相关阅读基础知识工程结构核心代码解析示例1:图像缩放(ImageScale.qml)代码说明运行效果 示例2:图像平移(ImageTransform.qml)代码说明运行效果 示例3:图像旋转(ImageRotat…

    Linux 系统命令使用指南1

    适用于 Red Hat / CentOS / Rocky Linux 等系统的基本初始化配置操作。 🔒 1. 关闭 SELinux(临时生效) setenforce 0⚠️ 注意:此命令仅临时关闭 SELinux,重启后可能恢复。要永久关闭,请修改 /etc/selinux…

    1.2.1 Linux音频系统发展历程简介

    Linux音频系统的发展经历了从最初的简单驱动到今天多层次、模块化音频架构。简要梳理其主要历程: 早期的OSS(Open Sound System) 在90年代及2000年代初,Linux主要使用OSS来支持音频。OSS直接为硬件设备(如声卡&#…

    【Linux操作系统】第一弹——Linux基础篇

    文章目录 💡 一. Linux的基本常识🪔 1.1 linux网络连接三种方式🪔1.2 虚拟机的克隆🪔1.3 虚拟机的快照🪔1.4 虚拟机的迁移和删除🪔1.5 vmtools工具 💡二. Linux的目录结构🪔2.1 Linu…

    STM32printf重定向到串口含armcc和gcc两种方案

    STM32串口重定向:MDK与GCC环境下需重写的函数差异 在嵌入式开发中,尤其是使用 STM32系列微控制器 的项目中,调试信息的输出是不可或缺的一部分。为了方便调试,开发者通常会选择将 printf 等标准输出函数通过 UART 串口发送到 PC …

    C++ 文本读写与二进制读写的底层机制

    1.文件的打开方式 1.文本打开 在windows中,写入时会将\n换成\r\n,读出时\r\n会读出\n linux对\n读写不做处理 2.二进制打开 对\n读写不做处理 2.文本读写 1.数据要先变成字符串再写进缓冲区 2.字符串直接写进缓冲区就是 3.c对文本读写的支持 istream/ostream中重载了对…

    02 mysql 管理(Windows版)

    一、启动及关闭 MySQL 服务器 1.1 通过 “服务” 管理工具 winr打开运行,输入services.msc 找到MySQL80,这个是我们在安装mysql的时候给的服务的名称,具体见文章mysql 安装 右键选择启动或者停止。 1.2 通过命令提示符 1.2.1 关闭命令…

    Elasticsearch知识汇总之 ElasticSearch高可用方案

    六 ElasticSearch高可用方案 6.1 高可用架构 请求协调节点根据负载均衡,转发给主分片节点,主分片同步复制给从节点,主从节点都写入完成返回客户端请求成功。对于读请求,协调负载到任意节点数据节点,数据节点把各自符合…

    H5 移动端适配最佳实践落地指南。

    文章目录 前言一、为什么需要移动端适配?二、核心适配方案1. 视口(Viewport)设置2. 三种适配方案 (仅供参考)(1)rem 适配方案(2)vw/vh 适配方案(3&#xff09…

    MySQL初阶:数据库约束和表的设计

    数据库约束 数据库约束是针对数据库中的表中的数据进行施加规则和条件,用于确保数据的准确性和可靠性。 数据库约束类型 1)not null 非空类型 :指定非空类型的列不能存储null,如果插入的数据是null便会报错。 2)de…

    LVGL- 按钮矩阵控件

    1 按钮矩阵控件 lv_btnmatrix 是 LVGL(Light and Versatile Graphics Library) v8 中提供的一个非常实用的控件,用于创建带有多个按钮的矩阵布局。它常用于实现虚拟键盘、数字键盘、操作面板、选择菜单等场景,特别适用于嵌入式设…

    excel 批量导出图片并指定命名

    一、开发环境 打开excel文件中的宏编辑器和JS代码调试 工具-》开发工具-》WPS宏编辑器 左边是工程区,当打开多个excel时会有多个,要注意不要把代码写到其他工作簿去了 右边是代码区 二、编写代码 宏是js语言,因此变量或者方法可以网上搜…

    yolov5基础--yolov5源码阅读(common.py)

    🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C,go语言的世界;在迷茫中寻找光芒…

    5.0.5 变换(旋转、缩放、扭曲)

    WPF变换可以产生特殊效果,如平移、旋转、扭曲。 变换类 描述TranslateTransform沿着X轴和Y轴平移ScaleTransform 沿着定义的中心点缩放RotateTransform沿着定义的中心点旋转SkewTransform 扭曲元素MatrixTransfrom提供3x3矩阵,用于定义一个自定义变换 1…

    如何设置内网映射端口到外网访问?哪些软件可以进行端口映射?

    大多数时候我们所使用的服务器都是在内网搭建的,而且内网是可以访问外网的,但外网是没法直接访问内网IP和端口服务的。也就是说外网无法直接访问到内网的网络地址,需要大家去搭建一个内外网互通的桥梁,把内网服务器指定端口映射到…

    养生:塑造健康生活的良方

    养生是一场贯穿生活的自我关爱行动,从饮食、运动、睡眠到心态调节,每一个环节都对健康有着深远影响。以下为你带来全面且实用的养生策略。 饮食养生:科学搭配,呵护肠胃 合理规划三餐,遵循 “早营养、午均衡、晚清淡”…

    YOLOv12云端GPU谷歌免费版训练模型

    1.效果 2.打开 https://colab.research.google.com/?utm_sourcescs-index 3.上传代码 4.解压 !unzip /content/yolov12-main.zip -d /content/yolov12-main 5.进入yolov12-main目录 %cd /content/yolov12-main/yolov12-main 6.安装依赖库 !pip install -r requirements.…

    机器人手臂的坐标变换:一步步计算齐次矩阵过程 [特殊字符]

    大家好!今天我们来学习如何计算机器人手臂的坐标变换。别担心,我会用最简单的方式解释这个过程,就像搭积木一样简单! 一、理解问题 我们有一个机器人手臂,由多个关节组成。每个关节都有自己的坐标系,我们需要计算从世界坐标系(W)到末端执行器(P₃)的完整变换。 二、已…

    CSS中的@import指令

    一、什么是import指令&#xff1f; import 是CSS提供的一种引入外部样式表的方式&#xff0c;允许开发者在CSS文件中引入其他CSS文件&#xff0c;或者在HTML的<style>标签中引入外部样式。与常见的<link>标签相比&#xff0c;import 提供了一种更“CSS原生”的样式…

    [学成在线]23-面试题总结

    1. 详细说说你的项目吧 从以下几个方面进行项目介绍: 项目的背景&#xff0c;包括: 是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。项目的业务流程项目的功能模块项目的技术架构个人工作职责个人负责模块的详细说明&#xff0c;包括模块的设计&#xff0c;所…