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等外设接口,在工业、医疗、电力等行业都得到广泛的应用。
本文主要介绍基于MYD-YG2LX开发板进行系统启动时间优化的调试案例,一般启动方式有去掉常规uboot,直接使用SPL加载内核和保留常规uboot加载内核的方式,MYD-YG2LX目前使用的是保留常规uboot的方法启动,启动时间20s+,接下来介绍的主要包括TFA、Uboot、Kernel和文件系统时间优化。
USB-TTL调试串口线一根
MYD-YG2LX开发板一块
12V电源适配器一个
Linux虚拟机
米尔提供的SDK交叉工具链
Linux5.10.83
4.环境准备
进行调试之前,需要安装好Linux虚拟机等相关开发环境,具体可以参考《MYD-YG2LX_Linux软件开发指南》的2.0章节。
5.启动时间优化
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以及更新即可。
最后编译与更新uboot即可。
简单:通过在 cmdline 中添加 quiet 来减少控制台消息
适度:通过移除驱动程序、文件系统、子系统来精简内核,从减少内核解压或加载的时间
适度:通过移除未使用的硬件接口精简设备树
棘手:开始优化行为不良的驱动程序,这是一个相对复杂和困难的任务。优化驱动程序可以提高其性能、稳定性和兼容性,从而改善系统的整体表现。然而,如果驱动程序的行为不良,例如出现崩溃、卡顿或冲突等问题,那么进行优化就会变得更加棘手和挑战。这需要深入分析和修复驱动程序的问题,调整其代码和算法,以使其更加高效和可靠。
使用Bootgraph分析内核启动的调用时间,移除花费时间长的驱动和优化需要使用的驱动
去掉kernel的打印等级,需要到内核源码下屏蔽掉log属性和到uboot源码下把log等级升高,内核修改如下:
关掉kernel不需要的一些外设资源,缩小内核大小(需要根据自己的情况来进行修改)
使用Bootgraph分析内核启动的调用时间,移除花费时间长的驱动和优化需要使用的驱动。
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查看花费时间最大的驱动调用,没用的就关闭,需要用的就优化。
最后编译以及更新内核即可。
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即可看到启动时间,效果如下:
楼主最近还看过