飞腾派4G版开发板U-Boot编译与交叉环境搭建指南
1. 飞腾派4G版开发板初体验与准备工作
作为一名长期从事ARM架构开发的工程师,最近拿到飞腾派4G版开发板时还是感到眼前一亮。这款基于飞腾E2000处理器的开发平台,搭载了4核ARMv8架构CPU,主频可达1.5GHz,板载4GB LPDDR4内存和32GB eMMC存储,最吸引我的是它原生支持4G LTE模块——这意味着可以轻松实现物联网项目的无线连接需求。
开箱后首先注意到的是开发板的接口布局:标准的40pin GPIO排针、USB3.0 Type-C接口、千兆以太网口、HDMI输出以及SIM卡槽都整齐排列在板子边缘。特别值得一提的是,飞腾派采用了12V/2A的DC供电设计,相比常见的5V供电方案,能够为4G模块提供更稳定的电压支持。
在开始uboot编译前,我们需要做好以下准备工作:
- 硬件连接:通过Type-C线连接开发板和主机,使用USB转串口工具连接UART调试口(波特率设置为115200)
- 开发环境:准备一台x86_64架构的Ubuntu 22.04主机(建议使用物理机而非虚拟机,因为后续交叉编译需要较高性能)
- 工具链安装:从飞腾官方仓库获取aarch64-linux-gnu交叉编译工具链
- 源码准备:下载飞腾派专用的uboot源码和ARM Trusted Firmware(ATF)
注意:飞腾派的UART调试口引脚定义与树莓派不同,TX/RX需要交叉连接,具体为开发板的UART0_TX连接调试器的RX,UART0_RX连接调试器的TX。
2. 交叉编译环境搭建详解
2.1 工具链的选择与安装
对于ARMv8架构的交叉编译,常见的有几种工具链方案:
- Linaro官方提供的aarch64-linux-gnu工具链
- ARM官方提供的arm-gnu工具链
- 飞腾定制优化的PhyGCC工具链
经过实测对比,我推荐使用飞腾官方维护的PhyGCC 10.3.3版本,它在处理飞腾特有的指令集优化方面表现更好。安装步骤如下:
# 添加飞腾软件仓库源 echo "deb [arch=amd64] https://repo.phytium.com.cn/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/phytium.list # 安装GPG密钥 wget -qO - https://repo.phytium.com.cn/phytium-key.gpg | sudo apt-key add - # 更新并安装工具链 sudo apt update sudo apt install phytium-gcc-10.3 phytium-g++-10.3安装完成后,可以通过以下命令验证:
aarch64-phytium-linux-gnu-gcc --version正常应该输出类似如下信息:
aarch64-phytium-linux-gnu-gcc (PhyGCC 10.3.3) 10.3.3 Copyright (C) 2020 Free Software Foundation, Inc.2.2 环境变量配置
为了让编译系统能正确找到交叉编译工具,需要设置以下环境变量:
export CROSS_COMPILE=aarch64-phytium-linux-gnu- export ARCH=arm64 export PATH=$PATH:/opt/phytium/gcc-10.3/bin建议将这些配置添加到~/.bashrc文件中,避免每次打开新终端都需要重新设置。可以通过创建一个环境设置脚本来管理不同项目的编译环境:
#!/bin/bash # setenv-phytium.sh export PHYTIUM_SDK=/opt/phytium/sdk export CROSS_COMPILE=aarch64-phytium-linux-gnu- export ARCH=arm64 export PATH=$PATH:/opt/phytium/gcc-10.3/bin2.3 依赖库安装
交叉编译过程中需要一些基础开发库的支持,在Ubuntu上安装以下依赖包:
sudo apt install build-essential bison flex libssl-dev libncurses5-dev \ libgmp-dev libmpc-dev libmpfr-dev autoconf automake libtool \ device-tree-compiler python3-dev swig git特别提醒:飞腾派的uboot编译对设备树编译器(dtc)版本有要求,建议使用1.6.0以上版本。可以通过dtc --version命令检查,如果版本过低,需要从源码编译安装:
git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git cd dtc make -j$(nproc) sudo make install3. U-Boot源码获取与配置
3.1 源码仓库选择
飞腾派有多个可用的uboot源码仓库:
- 飞腾官方维护的定制版本(推荐)
- 主线uboot官方仓库
- 第三方适配版本
经过测试比较,飞腾官方仓库对E2000处理器的支持最为完善,特别是对DDR初始化、PCIe和USB3.0等外设的驱动支持更好。获取源码命令如下:
git clone https://gitee.com/phytium/uboot-phytium.git cd uboot-phytium git checkout e2000-v2023.103.2 配置文件选择
飞腾派4G版的默认配置文件位于configs/phytium_e2000_defconfig。这个配置文件已经预设好了:
- 处理器类型:ARMv8 Cortex-A55
- 内存配置:4GB LPDDR4
- 存储接口:eMMC 5.1
- 网络设备:GMAC千兆以太网
- 特殊功能:4G模块支持
可以通过以下命令生成.config文件:
make phytium_e2000_defconfig如果需要自定义配置,可以使用menuconfig界面进行调整:
make menuconfig在menuconfig界面中,有几个关键配置需要注意:
Device Drivers → [*] Network device support → [*] Ethernet PHY (Physical Layer) support [*] Support for Phytium GMAC Ethernet devices Board initialization → [*] Initialize DDR controller [*] Enable 4G module support3.3 设备树定制
飞腾派4G版的设备树文件位于arch/arm/dts/phytium-e2000-4g.dts。如果需要修改外设配置(如调整UART波特率、禁用某些接口等),需要编辑这个文件。常见修改包括:
- 调整调试串口波特率:
chosen { stdout-path = &uart0; bootargs = "console=ttyAMA0,115200 earlycon=pl011,mmio32,0x28004000"; };- 启用4G模块电源管理:
&usb1 { status = "okay"; #address-cells = <1>; #size-cells = <0>; quectel_ec20: ec20@1 { compatible = "usb-serial,option"; reg = <1>; vcc-supply = <&vcc_4g>; }; };修改后需要重新编译设备树:
make phytium-e2000-4g.dtb4. U-Boot编译与烧写实战
4.1 完整编译流程
配置好环境后,完整的编译命令如下:
make clean make phytium_e2000_defconfig make -j$(nproc)编译过程大约需要5-10分钟(取决于主机性能),成功后会生成以下关键文件:
- u-boot.bin:原始的U-Boot二进制文件
- u-boot-nodtb.bin:不带设备树的U-Boot镜像
- u-boot.dtb:单独的设备树二进制文件
- u-boot.img:包含U-Boot和设备树的组合镜像
4.2 生成可烧写镜像
飞腾派需要将U-Boot与ARM Trusted Firmware(ATF)组合成一个完整的启动镜像。首先需要获取ATF源码:
git clone https://gitee.com/phytium/atf-phytium.git cd atf-phytium git checkout e2000-v2.6编译ATF:
make CROSS_COMPILE=aarch64-phytium-linux-gnu- PLAT=e2000 DEBUG=1 bl31生成最终启动镜像:
tools/mkimage -f fit-image.its -k keys -r fit-image.itb其中fit-image.its是一个描述文件模板,内容类似:
/dts-v1/; / { description = "Phytium E2000 FIT Image"; #address-cells = <1>; images { uboot { description = "U-Boot"; data = /incbin/("./u-boot.bin"); type = "standalone"; arch = "arm64"; compression = "none"; load = <0x2000000>; entry = <0x2000000>; }; atf { description = "ATF"; data = /incbin/("./bl31.bin"); type = "firmware"; arch = "arm64"; compression = "none"; load = <0x1000000>; entry = <0x1000000>; }; }; configurations { default = "config@1"; config@1 { description = "E2000 config"; firmware = "atf"; loadables = "uboot"; }; }; };4.3 烧写到开发板
飞腾派支持多种烧写方式,推荐使用以下两种:
方法一:通过USB OTG烧写(需进入bootrom模式)
- 断开开发板电源
- 按住BOOT按钮不放,然后插入USB线
- 松开BOOT按钮,此时开发板会进入烧写模式
- 使用phytium-provided工具进行烧写:
python3 phytium_download.py -b uboot -f fit-image.itb方法二:通过TF卡烧写
- 将TF卡格式化为FAT32格式
- 复制fit-image.itb到TF卡根目录,重命名为boot.itb
- 插入TF卡到开发板,上电时会自动从TF卡加载
重要提示:首次烧写后建议通过串口连接查看启动日志,确认U-Boot正常加载。正常应该能看到类似以下输出:
U-Boot 2023.10 (Jun 15 2024 - 16:20:45 +0800) CPU: Phytium E2000 (rev 1.0) Model: Phytium E2000 Development Board DRAM: 4 GiB MMC: mmc@28200000: 0 Loading Environment from MMC... OK In: serial@28004000 Out: serial@28004000 Err: serial@28004000 Net: eth0: ethernet@28020000 Hit any key to stop autoboot: 0 =>5. 常见问题排查与优化技巧
5.1 编译错误排查
- 工具链不匹配错误:
arm64-phytium-linux-gnu-gcc: command not found解决方法:检查环境变量设置是否正确,特别是PATH是否包含工具链路径
- 设备树编译错误:
Error: arch/arm/dts/phytium-e2000-4g.dts:20.1-2 syntax error解决方法:检查dts文件语法,特别是符号匹配和分号使用
- ATF链接错误:
aarch64-phytium-linux-gnu-ld.bfd: bl31.elf has a LOAD segment with RWX permissions解决方法:在ATF Makefile中添加LDFLAGS += -no-warn-rwx-segments
5.2 启动问题排查
- U-Boot启动卡住:
- 检查串口连接是否正确(TX/RX是否接反)
- 确认波特率设置为115200
- 检查供电是否充足(特别是使用4G模块时)
- 内存检测失败:
DRAM: failed to get memory size解决方法:检查uboot配置中的DDR参数,特别是CONFIG_PHYTIUM_DDR_SIZE设置
- 网络无法工作:
eth0: ethernet@28020000: PHY not found解决方法:检查设备树中的GMAC和PHY配置,确认phy-mode和phy-handle设置正确
5.3 性能优化建议
- 启用NEON指令加速: 在uboot配置中开启:
CONFIG_ARM_NEON=y CONFIG_ARM_V8_CRYPTO=y- 优化启动速度:
- 减少不必要的驱动初始化(如不需要的USB设备)
- 禁用启动延时:
setenv bootdelay 0 - 预加载环境变量
- 4G模块电源管理: 在设备树中添加:
&vcc_4g { regulator-name = "vcc_4g"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>; enable-active-high; };经过完整的交叉编译环境搭建和uboot编译过程,飞腾派4G版已经可以作为一个强大的ARM开发平台使用。在实际项目中,我建议将这套环境与持续集成系统(如Jenkins)结合,实现自动化构建和测试,大幅提高开发效率。