RK3588 启动优化与平台关联详解
源码路径:
rk3588/kernel-6.1/init/main.c、init/initramfs.c、mm/memblock.c
内核版本:Linux 6.1(RK3588 / ARM64)
文档目录:linuxDoc/init/
目录
一、原理
Rockchip 在 通用 Linux 启动路径 上增加少量钩子,目标集中在:
- 可观测性:长
bootargs完整打印 - 时延:Thunder Boot 下 推迟大块 memblock→buddy、硬件解压 initramfs
- 与 mm 协同:延迟释放在独立线程执行,不阻塞
kernel_init_freeable关键路径上的 initcall/挂根
init/ 本身 不包含 clock、pinctrl、display 驱动;这些仍通过 initcall 在 drivers/ 注册。
二、实现方式
2.1 分段打印命令行(CONFIG_ARCH_ROCKCHIP)
1 | #ifdef CONFIG_ARCH_ROCKCHIP |
场景:DT chosen/bootargs 很长(多路摄像头、内存预留、调试开关)时,单次 printk 无法完整记录,影响现场分析。
2.2 延迟释放 memblock(CONFIG_ROCKCHIP_THUNDER_BOOT_DEFER_FREE_MEMBLOCK)
触发点(kernel_init_freeable,smp_init 之后):
1 | kthread_run(defer_free_memblock, NULL, "defer_mem"); |
实现(mm/memblock.c):
1 | int __init defer_free_memblock(void *unused) |
原理:引导期登记的部分物理页 不立即 全部交给 buddy,而在 defer_mem 线程 中批量 __free_pages_memory,使 start_kernel→userspace 关键路径上的 页分配初始化 更短。
与 linuxDoc/mm/01 中 Rockchip memblock 钩子同一特性链。
2.3 initramfs 硬件解压等待
1 | #if defined(CONFIG_ROCKCHIP_THUNDER_BOOT) && defined(CONFIG_ROCKCHIP_HW_DECOMPRESS) |
解压由 Rockchip 硬件引擎 完成时,CPU 侧 cpio 解析前必须同步,避免读到未完成缓冲区。
2.4 启动链总览(RK 钩子标注)
三、配置项对照
| 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 可能稍后增长;监控脚本勿在极早瞬间采内存 |
| 根文件系统 | 仍依赖 04 的 root= / initramfs |
| 安全启动 | AVB/dm-verity 在 init 之前或 initramfs 完成;integrity_load_keys 在 kernel_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_mem(ps 仅在 userspace 后可见;此前用 dmesg)。
附录:关联文档
| 文档 | 内容 |
|---|---|
| 01 start_kernel | cmdline 打印位置 |
| 05 initramfs | HW decompress |
| linuxDoc/mm/01 | memblock 延迟释放细节 |
| linuxDoc/certs | integrity_load_keys |
正在加载留言…