RK3588 启动优化与平台关联详解

RK3588 启动优化与平台关联详解

源码路径rk3588/kernel-6.1/init/main.cinit/initramfs.cmm/memblock.c
内核版本:Linux 6.1(RK3588 / ARM64)
文档目录linuxDoc/init/


目录


一、原理

Rockchip 在 通用 Linux 启动路径 上增加少量钩子,目标集中在:

  1. 可观测性:长 bootargs 完整打印
  2. 时延:Thunder Boot 下 推迟大块 memblock→buddy硬件解压 initramfs
  3. 与 mm 协同:延迟释放在独立线程执行,不阻塞 kernel_init_freeable 关键路径上的 initcall/挂根

init/ 本身 不包含 clock、pinctrl、display 驱动;这些仍通过 initcall 在 drivers/ 注册。


二、实现方式

2.1 分段打印命令行(CONFIG_ARCH_ROCKCHIP

1
2
3
4
#ifdef CONFIG_ARCH_ROCKCHIP
const char *s = saved_command_line;
// pr_notice 首段后 pr_cont 循环输出
#endif

场景:DT chosen/bootargs 很长(多路摄像头、内存预留、调试开关)时,单次 printk 无法完整记录,影响现场分析。

2.2 延迟释放 memblock(CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK

触发点kernel_init_freeablesmp_init 之后):

1
kthread_run(defer_free_memblock, NULL, "defer_mem");

实现mm/memblock.c):

1
2
3
4
5
6
int __init defer_free_memblock(void *unused)
{
for (i = 0; i < rk_dhpi_num; i++)
nr_pages += rk_deferred_init_pages(zone, start_pfn, end_pfn);
// __free_pages_memory、totalram_pages_add ...
}

原理:引导期登记的部分物理页 不立即 全部交给 buddy,而在 defer_mem 线程 中批量 __free_pages_memory,使 start_kernel→userspace 关键路径上的 页分配初始化 更短。

linuxDoc/mm/01 中 Rockchip memblock 钩子同一特性链。

2.3 initramfs 硬件解压等待

1
2
3
#if defined(CONFIG_ROCKCHIP_THUNDER_BOOT) && defined(CONFIG_ROCKCHIP_HW_DECOMPRESS)
wait_initrd_hw_decom_done();
#endif

解压由 Rockchip 硬件引擎 完成时,CPU 侧 cpio 解析前必须同步,避免读到未完成缓冲区。

2.4 启动链总览(RK 钩子标注)

start_kernelRK: 分段 cmdlinerest_initkernel_init_freeableRK: defer_mem 线程do_initcallswait_for_initramfsRK: HW decompress waitprepare_namespaceexec init

三、配置项对照

Kconfig 影响文件
ARCH_ROCKCHIP main.c cmdline 打印
ROCKCHIP_THUNDER_BOOT 快启总开关(与 BSP 相关)
ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK main.c + memblock.c
ROCKCHIP_HW_DECOMPRESS initramfs.c + 驱动

具体是否启用以 RK3588 defconfig / 设备树 为准,不同产品(编解码盒、平板)可能只开子集。


四、与 SeagullYpcEncode 场景

关注点 说明
启动到编码服务 defer_mem 缩短内核态时间;用户态 systemd 启动 VPU/RGA 服务仍占主要时延
内存可见性 延迟释放期间 MemTotal 可能稍后增长;监控脚本勿在极早瞬间采内存
根文件系统 仍依赖 04root= / initramfs
安全启动 AVB/dm-verity 在 init 之前或 initramfs 完成;integrity_load_keyskernel_init_freeable 末尾

五、调试与观测

1
dmesg | grep -E 'defer_mem|defer_free|Kernel command line|initrd|populate_rootfs'
现象 方向
MemTotal 启动后跳变 defer_free_memblock 日志
initramfs 损坏 关闭 HW decompress 对比软件解压
cmdline 仍不全 检查串口工具缓冲,非内核问题

线程名defer_memps 仅在 userspace 后可见;此前用 dmesg)。


附录:关联文档

文档 内容
01 start_kernel cmdline 打印位置
05 initramfs HW decompress
linuxDoc/mm/01 memblock 延迟释放细节
linuxDoc/certs integrity_load_keys

文章互动

阅读 --

留言

0 条留言

正在加载留言…