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.硬件资源4.环境准备
进行调试之前,需要安装好Linux虚拟机等相关开发环境,具体可以参考《MYD-YG2LX_Linux软件开发指南》的2.0章节。
5.启动时间优化
5.1.1. TFA优化TFA引导启动的log主要有以下,如果我们认为不是太美观,可以到TFA源码中使用grep命令去搜索关键的信息打印,然后把相关的打印去掉,这可能需要花点功夫去寻找。
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即可。
5.1.3. Kernel优化Kernel典型的修改主要有以下:
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即可看到启动时间,效果如下:
作者: 米尔电子嵌入式, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3881300.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论