2. 开发环境搭建:工欲善其事,必先利其器

做嵌入式开发,环境搭建是第一道坎。很多新手一上来就急着写代码,结果编译报错、烧录失败,折腾半天发现是工具链没装对。我刚开始搞HDF驱动时也踩过这个坑——花了两天时间才把环境配顺。这一章,咱们就把这些基础工作一次性搞定。

本章目标:在Ubuntu上搭建一套完整的嵌入式物联网开发环境,包括交叉编译工具链、源码管理、烧录工具,确保你能顺利编译并烧录第一个固件。
开发环境搭建核心流程 Ubuntu系统安装 虚拟机/双系统/WSL 交叉编译工具链 gcc-arm-none-eabi 源码下载与编译 repo/git + make 烧录工具配置 HiBurn/ST-Link 验证环境 编译+烧录测试 建议:Ubuntu 20.04 LTS 64位 磁盘预留至少80GB 注意:不同芯片厂商 工具链版本可能不同

2.1 Ubuntu系统准备

我个人习惯用Ubuntu 20.04 LTS,稳定、社区活跃、踩坑资料多。你问为什么不用最新版?嗯,有些老工具链对新内核支持不太好,我吃过这个亏。

安装方式有三种,看你的情况选:

方式 适用场景 优缺点
虚拟机(VMware/VirtualBox) Windows用户,轻度开发 方便切换,但性能有损耗
双系统 需要完整性能 性能最好,切换麻烦
WSL2 Windows 10/11用户 轻量,但USB设备支持有限
我的建议:如果你主要做HDF驱动开发,虚拟机就够用了。分配4核CPU、8GB内存、80GB磁盘,跑编译任务完全没问题。

装好系统后,先更新软件源:

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential git curl wget vim

2.2 交叉编译工具链安装

交叉编译,说白了就是在PC上编译出能在ARM芯片上跑的程序。你想想看,你的开发机是x86架构,目标板是ARM架构,不用交叉编译工具链,编译出来的东西根本跑不了。

以ARM Cortex-M系列为例,我们安装gcc-arm-none-eabi:

# 方法一:apt安装(推荐)
sudo apt install -y gcc-arm-none-eabi

# 方法二:手动下载(版本更可控)
wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
tar -xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
sudo mv gcc-arm-none-eabi-10.3-2021.10 /opt/
echo 'export PATH=$PATH:/opt/gcc-arm-none-eabi-10.3-2021.10/bin' >> ~/.bashrc
source ~/.bashrc

验证安装:

arm-none-eabi-gcc --version
# 输出类似:arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824
注意:不同芯片厂商的工具链版本可能不同。比如海思Hi3861用gcc-riscv32-unknown-elf,STM32用gcc-arm-none-eabi。我曾经因为版本不对,编译出来的固件烧进去直接跑飞,查了两天才发现是工具链版本不匹配。

2.3 源码下载与编译

拿到源码后,怎么下载?现在主流方案是用repo或git。以OpenHarmony为例:

# 安装repo工具
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

# 初始化仓库
mkdir ohos && cd ohos
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c

# 编译(以Hi3861为例)
python build.py wifiiot

编译过程中,你可能会遇到几个常见问题:

  • 网络超时:国内建议用gitee镜像,或者配置代理
  • 依赖缺失:根据报错信息安装对应库,比如sudo apt install python3-pip
  • 内存不足:编译时加-j4限制并行任务数
避坑指南:我第一次编译OpenHarmony时,卡在"python模块缺失"上。后来发现是python3和python2混用导致的。建议统一用python3,并设置别名:alias python=python3。

2.4 烧录工具使用

编译出固件后,怎么把它烧到板子上?不同芯片的烧录工具不一样。我整理了几种常见的:

芯片/平台 烧录工具 连接方式
Hi3861 HiBurn USB转串口
STM32 STM32CubeProgrammer ST-Link/USB
ESP32 esptool.py USB转串口
全志XR806 PhoenixMC USB

以HiBurn为例,烧录步骤:

  1. 打开HiBurn工具,选择串口号和波特率(通常115200或921600)
  2. 点击"Connect",板子重新上电,看到连接成功提示
  3. 选择编译好的固件文件(通常是.bin或.hex)
  4. 点击"Burn",等待进度条走完
  5. 烧录完成后,板子自动重启,观察串口输出
重要:烧录前一定要确认板子处于烧录模式。不同板子进入烧录模式的方式不同——有的需要按住BOOT键再上电,有的需要短接某个跳线。我见过有人烧录时没进烧录模式,结果把固件烧到了错误地址,板子直接变砖。

2.5 环境验证

所有工具装好后,跑一个简单的测试程序,验证整个链路是否通畅:

# 1. 编写测试代码
cat > main.c << EOF
#include <stdio.h>
int main() {
    printf("Hello, IoT World!\n");
    return 0;
}
EOF

# 2. 交叉编译
arm-none-eabi-gcc -c main.c -o main.o

# 3. 链接
arm-none-eabi-ld -Ttext 0x0 -o main.elf main.o

# 4. 生成bin文件
arm-none-eabi-objcopy -O binary main.elf main.bin

# 5. 查看文件信息
arm-none-eabi-size main.elf

如果以上步骤都能顺利执行,恭喜你,环境搭建成功了!

总结一下:开发环境搭建看似繁琐,但每一步都有它的道理。Ubuntu提供开发基础,交叉编译工具链让代码能在目标芯片上运行,源码管理保证版本可控,烧录工具把固件送到板子上。这四个环节缺一不可。

嗯,环境搭好了,接下来就可以真正开始写驱动了。不过别急,先把今天的内容消化掉——自己动手装一遍,遇到问题再回头看这一章。我当年也是这么过来的。