RK3588 Linux启动优化至亚秒级全链路剖析

啊,RK3 5 8 8 的Linux启动优化好像还挺复杂的。
需要对从硬件到软件的整个链路进行优化。
上周有客户问我一个问题,我简单解释了一下。

首先,RK3 5 8 8 的启动过程极其漫长,从BL1 到用户空间一共经历了6 个阶段。
其中,主要瓶颈为DDR初始化、ATF安全世界切换、U-Boot功能冗余、内核镜像加载、用户空间服务启动等。

要优化,需要从几个方面入手。

1 . SPL和DDR初始化优化:合并TPL和SPL功能,优化DDR调频参数。
2 . 简化ATF配置。
禁用不必要的安全功能并调整日志记录级别。
3 . U-Boot调优和加速:简化功能模块、合并镜像、使用DMA加速。
4 .内核启动优化:压缩内核镜像,优化初始化流程。
5 . AMP双系统资源分配策略:调整内核参数,优化实时系统启动过程。

客人一听,一脸疑惑,我就说:“你看,这就像做饭一样,从选料到烹饪,方方面面都要讲究。

最后他还想了解具体的优化参数和配置示例,所以我列出了一些,包括U-Boot调优设置、调优内核参数、关闭ATF日志等。

在验证和调试方面,您应该使用 dmesg、printk、逻辑分析仪等工具。
对于性能分析,请使用 ftrace 进行内核分析,使用 systemd-analyze 进行用户空间分析。

无论如何,这取决于你。
这种优化是一项技术任务,应该随着时间的推移完成。
我还在思考如何更有效地优化这个问题。

Linux启动过程与级别,以ARM-RK3566开发板系统为例

Linux启动分为三个阶段:BootLoader->kernel->RootFilesystem。

bootloader负责加载内核。
U-Boot常用于RK3 5 6 6 开发板。
初始化内核硬件。
检测CPU、内存、外设。
RK3 5 6 6 是ARM架构。

init 程序接管并启动。
systemd 是主要的。
传统的 SysVinit 已被删除。
有七个运行级别:
0:关机模式(无需设置)
1 :单用户模式(用于维护)
2 :多用户命令行(不带NFS)
3 :完整的多用户命令行(带 NFS)
4 :保留模式
5 :图形界面模式(X1 1 )
6 :重置状态(无需配置)
systemd 使用目标而不是运行级别。
多用户。
目标是命令行。
图形化。
目标是图形界面。
默认 ln 为 default.target。

查看默认值:目标: cat /etc/systemd/default/default.target
更改当前服务: systemctlisolategraphic.target
按依赖顺序启动systemd。
multi-user.target 取决于网络、服务等。

您可以尝试查看 rk3 5 6 6 启动日志吗?

Linux启动过程与级别,以ARM-RK3566开发板系统为例

Linux启动过程分为几个步骤,ARM-RK3 5 6 6 开发板也是如此。
主要分为三个阶段:BootLoader、Kernel 和 RootFilesystem。

1 . Linux启动过程
1 .引导装载程序 在ARM-RK3 5 6 6 开发板上,BootLoader是U-Boot。
它负责初始化硬件,例如CPU和内存。
U-Boot会检测系统资源并找到启动设备,例如eMMC或SD卡。
然后它将 MBR 加载到内存中并将控制权传递给 MBR。
此步骤可能需要几秒钟,具体取决于您的硬件速度。

2 核心 内核获得控制权后,它开始初始化硬件和驱动程序。
例如,识别板上的网卡和USB设备。
内核还会在/sbin下找到并运行“init”程序,这是Linux的主进程。
在 ARM-RK3 5 6 6 上,此步骤通常在 1 -2 秒内完成。

3 根文件系统 init程序会读取/etc/inittab文件,或者使用systemd或其他方法来确定系统的默认运行级别。
例如,将其设置为运行级别3 然后init会启动相应的服务和脚本并挂载必要的文件系统。
整个RootFilesystem阶段可能需要5 -1 0秒。

2 Linux系统启动级别
Linux有七个启动级别,从0到6 每个级别代表系统状态:

runlevel0:系统已关闭,不能设置为默认值。

runlevel1 :单用户模式,只有root可以登录,用于维护。

runlevel2 :多用户命令行模式,不支持NFS。

runlevel3 :完整的多用户命令行模式,常用于服务器上。

runlevel4 :未使用,保留。

runlevel5 :图形界面模式,登录后进入GUI。

runlevel6 :重启,不能设置为默认。

在 ARM-RK3 5 6 6 上,这些级别适用。
但具体实现可能会有所不同,例如使用systemd。

3 systemd服务
现在很多系统都使用systemd,包括ARM-RK3 5 6 6 systemd 比传统的 SysVinit 更好,启动速度更快,功能更多。
您可以使用 systemctl get-default 查看当前的默认运行级别。
例如,systemctl set-default multi-user.target 默认为多用户模式,没有图形界面。

4 启动过程详解(以systemd为例)
1 .系统启动 当系统启动时,内核将启动systemd作为第一个用户空间进程。

2 读取配置 systemd 将读取配置文件并确定默认目标(运行级别)。

3 处理依赖关系 systemd 将处理目标的依赖关系并启动必要的服务和守护进程。

4 启动服务和守护进程 根据依赖关系和配置,systemd 将启动网络、登录和其他服务。

5 用户登录 最后系统会给出登录请求,用户即可登录并使用。

在ARM-RK3 5 6 6 上,如果使用systemd,流程是一样的。
用户可以更改系统配置来调整启动行为。

5 图片视图
下面是一些图片,可以更直观的理解:

Linux启动过程示意图,从BootLoader到RootFilesystem。

systemd配置示例,如何设置默认目标。

systemd目标关系图,不同目标之间的依赖关系。

这些图像可以帮助人们了解启动过程和系统配置。

如何进入linux