RK3568启动和引导过程摘要,包括依赖关系和日志摘录

作者:Zhanglong
日期:2025年4月30日
标签: RK3568 嵌入式linux uboot kernel rootfs

1. 概述

  • 设备:Rockchip RK3568 EVB1 DDR4 V10
  • 内核版本:Linux 5.10.198(2025-04-30)
  • 启动介质:eMMC
  • 日志:分析日志 ,涵盖硬件初始化(DDR、eMMC、CPU)、外设(显示、触摸屏、摄像头)和问题(触摸屏、SDMMC 冲突等)。
  • 目标:明确启动流程的每个阶段,描述相邻步骤的依赖关系,提取日志 的关键代码片段,总结细节,助力嵌入式开发与调试。

2. 启动流程与依赖关系

以下表格按启动阶段列出步骤的功能、依赖关系和日志 的关键日志片段。每步骤明确依赖前一步的输出或状态,并引用日志中的代码片段。

阶段 步骤 功能 依赖关系 日志 关键片段 说明
1. 预启动(ROM 引导) ROM 引导 SoC ROM 代码识别 eMMC,加载 U-Boot SPL 到 SRAM。 无(硬件固化,流程起点)。 无日志(ROM 阶段无输出)。 ROM 阶段为硬件固化,无用户可见日志。
2. SPL(U-Boot SPL) SPL 初始化 U-Boot SPL 初始化时钟、电源,为 DDR 初始化准备。 依赖 ROM 加载 SPL 到 SRAM。 <br>SPL: v1.13 (Sep 25 2023 - 09:09:42)<br> SPL v1.13 初始化硬件环境。
DDR 初始化 配置 DDR 控制器,设置频率(324 MHz → 1560 MHz)、时序,确保内存可用。 依赖 SPL 提供的时钟和电源稳定性。 <br>DDR4, 324MHz<br>BW=32 Col=10 Bk=4 BG=2 CS0 Row=17 CS=1 Die BW=16 Size=4096MB<br>[...]<br>DRAM: 4 GiB<br> 初始化 DDR4,4 GiB,单片选,1560 MHz。
加载 U-Boot 从 eMMC 加载 U-Boot 镜像到 DRAM,跳转执行。 依赖 DDR 提供 DRAM,SPL 提供 eMMC 访问。 <br>Trying to boot from MMC1<br> 加载 U-Boot 镜像,跳转到主程序。
3. U-Boot 主程序 U-Boot 初始化 初始化 eMMC(HS200)、CPU、网络、LVDS 显示、触摸屏等,配置环境变量。 依赖 SPL 加载的 U-Boot 和 DRAM。 <br>U-Boot 2017.09 (Feb 25 2025 - 00:42:47 +0800), Build: jenkins-linux-build-v1.2-release-293<br>mmc0: new HS200 MMC card at address 0001<br>mmcblk0: mmc0:0001 TX2932 29.1 GiB<br>rockchip-drm display-subsystem: bound lvds (ops lvds_component_ops)<br>Goodix-TS-GT1X 1-0014: I2c transfer error! (-6)<br>rk_gmac-dwmac fe010000.ethernet: init for RGMII<br> 初始化 eMMC(29.1 GiB)、LVDS(1280x800)、触摸屏(失败)、双千兆以太网。
加载内核和设备树 从 eMMC 加载内核、设备树(DTB)和根文件系统镜像,传递控制权。 依赖 U-Boot 提供的 eMMC 访问和环境变量。 <br>Starting kernel ...<br> 加载内核和 DTB(含外设节点),传递给内核。
4. ARM Trusted Firmware (ATF) ATF 初始化(BL31) 初始化安全环境,设置 CPU 模式(EL2 → EL1),支持 OP-TEE。 依赖 U-Boot 加载的 ATF 镜像和 DRAM。 <br>NOTICE: BL31: v1.44(release):v1.44-dirty<br>NOTICE: BL31: Built : 17:12:09, Sep 19 2023<br>INFO: OP-TEE version: 3.13.0 (gcc version 9.3.0)<br> ATF v1.44 设置 ARMv8.2-A,启用 OP-TEE。
5. 内核启动 内核初始化 初始化 CPU(DVFS, 1.104 GHz)、eMMC、GPU(Mali-G52)、网络、外设(摄像头、触摸屏等),加载驱动。 依赖 ATF 设置的 EL1 模式,U-Boot 加载的内核和 DTB。 <br>[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050]<br>CLK: (sync kernel. arm: enter 816000 KHz, init 816000 KHz, kernel 0N/A)<br>armclk 1104000 KHz<br>[ 1.476435] mmc0: new HS200 MMC card at address 0001<br>[ 1.477203] mmcblk0: mmc0:0001 TX2932 29.1 GiB<br>[ 1.567322] rockchip-pinctrl pinctrl: pin gpio2-2 already requested by fe570000.can<br>[ 2.059074] Goodix-TS-GT1X: probe of 1-0014 failed with error -2147483644<br>[ 1.487651] os04a10 4-0036: Unexpected sensor id(000000), ret(-5)<br>[ 1.521579] ov5695 4-0036-1: Unexpected sensor id(000000), ret(-5)<br>Failed to detect Wi-Fi/BT chip!<br>[ 3.710100] rk-pcie 3c0800000.pcie: PCIe Link Fail, LTSSM is 0x0<br> 初始化 CPU(1.104 GHz)、eMMC(29.1 GiB)、GPU、网络,外设初始化多失败(触摸屏、摄像头、Wi-Fi、PCIe、SDMMC 冲突)。
根文件系统挂载 挂载 eMMC 上的 EXT4 文件系统(mmcblk0p6),启动用户空间进程。 依赖内核提供的 eMMC 驱动和文件系统支持。 <br>[ 1.480995] EXT4-fs (mmcblk0p6): mounted filesystem with ordered data mode<br> 挂载 EXT4 文件系统,外设失败可能影响用户空间。

3. 依赖关系说明

  • ROM 引导 → SPL 初始化:ROM 识别 eMMC并加载 SPL 到 SRAM,否则 SPL 无法运行。
  • SPL 初始化 → DDR 初始化:DDR 控制器依赖 SPL 配置的时钟和电源。
  • DDR 初始化 → 加载 U-Boot:U-Boot 镜像加载到 DRAM,依赖 DDR 提供内存。
  • 加载 U-Boot → U-Boot 初始化:U-Boot 初始化依赖 SPL 加载的镜像和 DRAM。
  • U-Boot 初始化 → 加载内核和设备树:内核和 DTB 加载依赖 U-Boot 的 eMMC 访问和环境变量。
  • 加载内核和设备树 → ATF 初始化:ATF 依赖 U-Boot 加载的 BL31 镜像和 DRAM。
  • ATF 初始化 → 内核初始化:内核依赖 ATF 设置的 EL1 模式和安全环境。
  • 内核初始化 → 根文件系统挂载:文件系统挂载依赖内核的 eMMC 驱动和文件系统支持。

4. 日志 分析

  • 硬件配置
    • DDR:4 GiB DDR4,1560 MHz,单片选(CS=1)。
    • eMMC:29.1 GiB(TX2932),HS200,EXT4 文件系统。
    • CPU:4 核 Cortex-A55,1.104 GHz(支持 2.0 GHz),ARMv8.2-A。
    • 外设:LVDS 显示(1280x800)、触摸屏(Goodix GT1X)、摄像头(GC8034 成功,OS04A10/OV5695 失败)、双千兆以太网、Wi-Fi/蓝牙(失败)。
  • 问题
    • 触摸屏初始化失败(I2C 错误)。
    • SDMMC 引脚冲突(gpio2-2 与 CAN 冲突)。
    • 摄像头检测失败(OS04A10、OV5695)。
    • Wi-Fi/蓝牙检测失败。
    • PCIe 初始化失败(无设备或电源问题)。
  • 特点:外设初始化全面,问题较多,适合功能测试。

5. 验证与建议

  • 验证命令
    • DDR:
      dmesg | grep -i ddr
      cat /sys/devices/platform/dmc/devfreq/dmc/status
      
    • eMMC:
      mount | grep mmcblk0
      
    • CPU 频率:
      cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
      
    • 外设:
      i2cdetect -y 1  # 触摸屏
      i2cdetect -y 4  # 摄像头
      lspci           # PCIe
      
  • 优化建议
    • 触摸屏:检查 I2C 硬件,修正设备树:
      &i2c1 {
          goodix_ts@14 {
              compatible = "goodix,gt1x";
              reg = <0x14>;
              vdd_ana-supply = <&vdd_ana>;
          };
      };
      
    • SDMMC 冲突:禁用 CAN:
      &can0 {
          status = "disabled";
      };
      
    • 摄像头:验证电源和 I2C:
      i2cdetect -y 4
      
    • PCIe:检查设备和电源:
      &pcie0 {
          status = "okay";
          vcc3v3_pcie-supply = <&vcc3v3_pcie>;
      };
      
    • 性能:测试 2.0 GHz,优化 eMMC:
      echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
      mount -o remount,noatime /dev/mmcblk0p6 /mount_point
      

6. 结论

RK3568(日志 )的启动流程遵循 ROM → SPL → U-Boot → ATF → 内核的链条,依赖关系清晰(ROM 加载 SPL,SPL 启用 DDR,U-Boot 加载内核,ATF 设置 EL1,内核挂载文件系统)。日志片段展示了 DDR(4 GiB)、eMMC(29.1 GiB)、CPU(1.104 GHz)和外设的初始化。外设问题(触摸屏、SDMMC、摄像头、PCIe)可通过设备树优化和硬件检查解决,适合功能测试和系统调试。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐