RK3576 Android 14 SD卡启动实战:3处源码修改与V1.78工具制作全流程
RK3576 Android 14 SD卡启动全流程实战指南
1. 环境准备与硬件选型
在开始RK3576平台的SD卡启动调试前,确保您已准备好以下硬件和软件环境:
硬件清单:
- RK3576 EVB开发板(带SD卡槽)
- 符合规格的SD卡(建议选择工业级产品)
- 容量:8GB-32GB(实测64GB部分型号也可用)
- 速度等级:Class10/UHS-I及以上
- 推荐品牌:SanDisk Extreme、Samsung Pro Endurance
软件工具:
# 工具链验证命令 $ git --version git version 2.25.1 $ repo --version repo version v2.4.3开发环境配置要点:
- 推荐Ubuntu 20.04 LTS作为编译主机
- 磁盘空间至少预留200GB(Android源码约150GB)
- 安装必要依赖包:
sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \ lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev \ libgl1-mesa-dev libxml2-utils xsltproc unzip2. 源码修改关键步骤
2.1 Android层配置修改
进入device/rockchip/rk3576目录,修改BoardConfig.mk:
# 修改前 PRODUCT_BOOT_DEVICE := 2a2d0000.ufs,2a330000.mmc PRODUCT_SDMMC_DEVICE := 2a310000.mmc # 修改后 PRODUCT_BOOT_DEVICE := 2a2d0000.ufs,2a330000.mmc,2a310000.mmc # PRODUCT_SDMMC_DEVICE := 2a310000.mmc修改说明:
- 在PRODUCT_BOOT_DEVICE中添加SD控制器节点2a310000.mmc
- 注释掉PRODUCT_SDMMC_DEVICE定义(避免冲突)
- 保留AVB相关配置(如BOARD_AVB_ENABLE)
2.2 Kernel设备树调整
修改内核设备树文件(如rk3576-evb1.dtsi):
&sdmmc { + supports-emmc; status = "okay"; };关键参数解析:
| 参数 | 作用 | 推荐值 |
|---|---|---|
| supports-emmc | 启用eMMC兼容模式 | 必须添加 |
| max-frequency | SD卡工作频率 | 150000000 |
| bus-width | 数据总线宽度 | 4 |
| cap-sd-highspeed | 高速模式支持 | 1 |
3. 固件编译与验证
3.1 完整编译流程
# 初始化repo repo init -u https://github.com/rockchip-linux/manifests -b android-14.0 # 同步代码 repo sync -j8 --no-tags --no-clone-bundle # 应用修改后编译 source build/envsetup.sh lunch rk3576_evb-userdebug make -j$(nproc) update.img编译产物验证:
$ ls -lh out/target/product/rk3576/update.img -rw-r--r-- 1 user user 1.8G Jul 15 10:30 update.img3.2 编译常见问题处理
问题1:SD控制器未识别
[ 2.345678] mmc1: error -110 whilst initialising SD card解决方案:
- 检查设备树sdmmc节点配置
- 验证硬件原理图电压切换电路
- 更换SD卡测试
问题2:启动卡在uboot阶段
MMC: no card present解决方案:
// 修改uboot配置 + CONFIG_MMC_DW_ROCKCHIP=y + CONFIG_MMC_SDHCI_ROCKCHIP=y4. SD卡制作工具实操
使用瑞芯微SD卡制作工具V1.78的具体步骤:
工具准备:
- 下载SD_Firmware_Tool_v1.78.zip
- 解压后以管理员身份运行SD_Firmware_Tool.exe
制作流程:
- 插入SD卡到读卡器
- 选择正确的磁盘设备(务必确认避免误操作)
- 勾选"SD启动"模式
- 选择编译生成的update.img
- 点击"开始创建"按钮
操作界面关键区域说明:
+-----------------------------+ | ① 设备选择下拉框 | | ② 工作模式单选按钮 | | ③ 固件选择按钮 | | ④ 进度条显示区域 | | ⑤ 操作日志输出框 | +-----------------------------+5. 上电验证与调试
5.1 启动流程检查
正常启动日志应包含以下关键节点:
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [ 0.220000] mmc1: new high speed SDHC card [ 0.250000] mmcblk1: mmc1:0001 SD32G 29.7 GiB [ 1.800000] android: mounting /mnt/runtime/default/emulated5.2 常见故障排查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 卡在uboot | 设备树配置错误 | 检查sdmmc节点status |
| 反复重启 | 电源不稳定 | 测量3.3V/1.8V电压 |
| 识别为只读 | 文件系统损坏 | 重新制作SD卡 |
| 速度异常慢 | 时钟配置问题 | 检查max-frequency参数 |
6. 高级配置与优化
6.1 双启动配置方案
通过修改parameter.txt实现SD卡与eMMC双启动:
FIRMWARE_VER: 1.0 MACHINE_MODEL: RK3576 MACHINE_ID: 007 BOOT_FROM: sdmmc启动优先级配置:
- 同时插入SD卡和eMMC时
- 修改BOOT_FROM字段:
sdmmc:优先SD卡emmc:优先eMMCauto:自动选择
6.2 性能优化参数
在kernel的dts中添加SD卡性能优化配置:
&sdmmc { clock-frequency = <150000000>; supports-sd; bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed; disable-wp; sd-uhs-sdr104; vqmmc-supply = <&vccio_sd>; vmmc-supply = <&vcc_sd>; };7. 工程实践建议
批量生产方案:
- 使用
dd命令制作镜像模板:
dd if=/dev/sdb of=sd_boot.img bs=4M status=progress- 通过USB集线器同时烧录多张SD卡
- 使用
温度适应性测试:
- 工业级应用需验证-40℃~85℃工作范围
- 关注低温下的SD卡初始化成功率
长期运行稳定性:
- 建议启用内核错误检测:
CONFIG_MMC_DEBUG=y CONFIG_MMC_BLOCK_DEFERRED_RESUME=y
提示:实际项目中遇到SD卡频繁掉卡的情况,可尝试在电源滤波电路添加100nF+10uF组合电容,这种设计在多个工业现场验证有效。
