news 2026/4/29 11:49:28

Firefly RK3399开发板:从官方镜像到自编译uboot,一个嵌入式小白的踩坑与填坑全记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Firefly RK3399开发板:从官方镜像到自编译uboot,一个嵌入式小白的踩坑与填坑全记录

Firefly RK3399开发板:从官方镜像到自编译uboot的实战指南

第一次拿到Firefly RK3399开发板时,我和大多数嵌入式新手一样,只会用官方提供的镜像文件进行烧录。直到某天突发奇想——为什么不试试自己编译uboot?这个决定让我在接下来两周里经历了无数次环境配置失败、编译报错和深夜debug。本文将用真实踩坑记录,带你走通这条充满挑战却收获满满的技术路径。

1. 环境准备:工具链与依赖项

1.1 交叉编译工具链配置

Arm架构的开发板需要专用的交叉编译工具链。我选择了Arm官方提供的arm-gnu-toolchain-13.2.Rel1版本,这个选择后来证明非常关键——太旧的版本会导致后续编译出现兼容性问题。

wget https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-linux-gnu.tar.xz sudo tar -xvf arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-linux-gnu.tar.xz -C /usr/local/arm

环境变量配置是第一个坑点。很多教程建议修改/etc/profile,但这可能导致系统级影响。更安全的做法是在用户目录的.bashrc中添加:

echo 'export PATH=/usr/local/arm/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-linux-gnu/bin:$PATH' >> ~/.bashrc source ~/.bashrc

验证安装时,别被简单的版本检查迷惑:

aarch64-none-linux-gnu-gcc -v # 应该看到类似输出: # gcc version 13.2.1 20231011 (Arm GNU Toolchain 13.2.rel1)

1.2 Python环境陷阱

编译uboot时遇到的第一个"惊喜"是Python依赖问题。现代uboot的某些组件需要Python 3.6+环境,而Ubuntu 18.04等老系统默认版本可能不满足要求。

典型错误示例

ModuleNotFoundError: No module named 'setuptools'

解决方案是安装完整的Python开发环境:

sudo apt update sudo apt install python3-setuptools python3-pip swig python3-dev pip3 install pyelftools --user

注意:务必使用pip3而非pip,避免与系统Python 2.x环境冲突

2. uboot源码配置的艺术

2.1 获取与解压源码

官方uboot源码更新频繁,我选择2023.07这个稳定版本:

wget https://ftp.denx.de/pub/u-boot/u-boot-2023.07.tar.bz2 tar -jxf u-boot-2023.07.tar.bz2 cd u-boot-2023.07

2.2 关键配置调整

Firefly RK3399有官方提供的默认配置:

make firefly-rk3399_defconfig

但以下几个定制化配置直接影响启动成功率:

  1. 串口波特率调整

    Device Drivers → Serial → (1500000) Default baudrate

    Firefly开发板默认使用1.5M波特率而非常见的115200

  2. eMMC配置优化

    Device Drivers → MMC Host controller Support → [ ] enable HS400 support [ ] Support SDHCI SDMA

    关闭这两项可避免早期启动阶段的eMMC读取问题

  3. FIT镜像生成脚本: 需要从Rockchip官方仓库获取专用脚本:

    git clone https://github.com/rockchip-linux/u-boot.git cp rockchip-linux/u-boot/arch/arm/mach-rockchip/make_fit_atf.py ./arch/arm/mach-rockchip/

    然后在menuconfig中指定路径:

    Boot options → Boot images → [*] Use a script to generate the .its script (.its file generator script for U-Boot FIT image) arch/arm/mach-rockchip/make_fit_atf.py

3. ATF(ARM Trusted Firmware)集成

RK3399启动流程中,BL31(ARM Trusted Firmware)是uboot的前置条件。虽然可以跳过自编译直接使用预编译版本,但了解整个过程很有必要。

3.1 获取BL31的两种方式

方法一:官方预编译版本(推荐新手)

git clone https://github.com/rockchip-linux/rkbin.git cp rkbin/bin/rk33/rk3399_bl31_v1.36.elf ./ mv rk3399_bl31_v1.36.elf atf-bl31

方法二:自行编译(适合深入学习)

git clone https://github.com/ARM-software/arm-trusted-firmware.git --depth 1 cd arm-trusted-firmware make CROSS_COMPILE=aarch64-none-linux-gnu- PLAT=rk3399

需要额外安装gcc-arm-none-eabi工具链

3.2 常见编译错误解决

当看到如下错误时:

fatal error: Python.h: No such file or directory

需要安装Python开发头文件:

sudo apt install python3.8-dev # 根据系统Python版本调整

4. 编译与生成启动镜像

4.1 完整编译命令

make ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- -j$(nproc)

关键产物:

  • tpl/u-boot-tpl.bin:初始内存控制器初始化代码
  • spl/u-boot-spl.bin:二级加载程序
  • u-boot.itb:包含完整uboot的FIT镜像

4.2 生成idbloader.img

这是Rockchip平台特有的启动镜像组合:

tools/mkimage -n rk3399 -T rksd -d tpl/u-boot-tpl.bin idbloader.img cat spl/u-boot-spl.bin >> idbloader.img

参数说明:

  • -n rk3399:指定芯片型号
  • -T rksd:Rockchip SD卡启动格式
  • -d:指定输入文件

5. 烧录实战:两种方法对比

5.1 使用AndroidTool烧录(Windows环境)

  1. 开发板进入Loader模式:

    • 按住Recovery键
    • 插入USB线
    • 保持按键3秒后松开
  2. 烧录配置:

    文件类型起始扇区对应文件
    IDBLoader0x40idbloader.img
    U-Boot FIT0x4000u-boot.itb

5.2 直接在Linux系统下烧写eMMC

如果开发板已运行Linux系统,可以直接使用dd命令:

sudo dd if=idbloader.img of=/dev/mmcblk0 seek=64 conv=notrunc sudo dd if=u-boot.itb of=/dev/mmcblk0 seek=16384 conv=notrunc

重要提示:务必确认/dev/mmcblk0是eMMC设备而非主机SD卡!

6. 启动验证与调试技巧

成功烧录后,通过串口观察启动日志(波特率1500000):

U-Boot SPL 2023.07 (Oct 15 2023 - 16:20:33 +0800) Trying to boot from MMC1

常见问题排查

  1. 卡在TPL阶段

    • 检查DDR初始化配置
    • 确认idbloader.img生成正确
  2. SPL加载失败

    • 验证eMMC/SD卡读写配置
    • 检查烧录的扇区位置是否正确
  3. uboot无法启动

    • 确认u-boot.itb包含所有必要组件
    • 检查FIT镜像生成脚本路径

7. 进阶:自定义启动参数

修改include/configs/firefly-rk3399.h可以定制默认环境变量:

#define CONFIG_BOOTCOMMAND \ "mmc dev 0; " \ "ext4load mmc 0:1 0x00200000 /boot/Image; " \ "ext4load mmc 0:1 0x08300000 /boot/rk3399-firefly.dtb; " \ "booti 0x00200000 - 0x08300000"

这个配置让开发板直接从eMMC加载内核和设备树。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 11:47:23

免费快速配置APA第7版格式:Word用户5分钟终极指南

免费快速配置APA第7版格式:Word用户5分钟终极指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 还在为学术论文的参考文献格式而烦恼吗&a…

作者头像 李华
网站建设 2026/4/29 11:42:39

终极MiniDisc音乐管理指南:Platinum-MD让复古音乐焕发新生

终极MiniDisc音乐管理指南:Platinum-MD让复古音乐焕发新生 【免费下载链接】platinum-md Minidisc NetMD Conversion and Upload 项目地址: https://gitcode.com/gh_mirrors/pl/platinum-md 想要在2024年重新体验90年代的MiniDisc音乐魅力吗?Plat…

作者头像 李华
网站建设 2026/4/29 11:42:24

5分钟快速上手SPIRE:构建你的第一个安全微服务集群

5分钟快速上手SPIRE:构建你的第一个安全微服务集群 【免费下载链接】spire The SPIFFE Runtime Environment 项目地址: https://gitcode.com/GitHub_Trending/sp/spire SPIRE(The SPIFFE Runtime Environment)是一个开源工具链&#x…

作者头像 李华
网站建设 2026/4/29 11:41:23

WorkshopDL:3步免费下载Steam创意工坊模组的终极指南

WorkshopDL:3步免费下载Steam创意工坊模组的终极指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games Store或GOG平台购买了游戏,却发…

作者头像 李华
网站建设 2026/4/29 11:39:26

如何快速上手PyMARL:10分钟搭建你的第一个多智能体AI

如何快速上手PyMARL:10分钟搭建你的第一个多智能体AI 【免费下载链接】pymarl Python Multi-Agent Reinforcement Learning framework 项目地址: https://gitcode.com/gh_mirrors/py/pymarl PyMARL是一个强大的Python多智能体强化学习框架,能够帮…

作者头像 李华