摘要:本文手把手带你从零搭建一套可落地的 ARM 嵌入式开发环境。内容覆盖 Ubuntu 系统部署与 APT 包管理、GNU 交叉编译工具链安装与验证、Windows 下 Cygwin 辅助环境构建、VS Code 远程连接,以及 ARM ADS 集成环境的配置与首个工程调试。针对「命令未找到」「权限不足」「库文件缺失」三类高频报错,逐一给出具体示例、排查思路与验证命令,助你快速打通从系统安装到工程调试的全流程。
目录
- ① 独立 Linux 系统安装与基础配置
- ② Ubuntu 软件包管理与服务设置
- ③ 核心开发工具链与文档部署
- ④ Windows 下 Cygwin 环境构建指南
- ⑤ Linux Shell 常用命令与文本编辑
- ⑥ 文件搜索与串口通信工具实战
- ⑦ Windows 代码管理与远程连接方案
- ⑧ ARM ADS 集成环境配置详解
- ⑨ 创建首个工程与调试环境验证
- ⑩ 环境搭建常见报错与排查思路
- ⑩.5 全流程回顾与避坑要点
- ⑪ 总结与参考资料
无论你是嵌入式 Linux 新手还是想打通 Windows 与 Linux 混合开发流程的工程师,都能按步骤快速落地一套稳定可用的开发平台。
很多嵌入式开发者在刚接触 ARM 架构时,往往会被环境搭建这道“门槛”劝退。无论是面对陌生的 Linux 命令,还是在 Windows 下配置交叉编译工具链时的种种报错,都容易让人产生挫败感。实际上,一个稳定、高效的开发环境是后续所有工作的基石,它直接决定了代码编写的流畅度和调试的效率。如果你正打算从零开始构建一套完整的 ARM 开发体系,或者想在现有的 Windows 办公环境中融入 Linux 的开发能力,那么接下来的内容将非常值得你关注。我们将跳过那些晦涩的理论堆砌,直接通过实操步骤,带你打通从系统安装到工程调试的全流程,让环境配置不再是拦路虎,而是你技术进阶的助推器。
对于大多数习惯使用 Windows 的工程师来说,完全切换到 Linux 桌面可能需要一个适应过程,但掌握基础的 Linux 操作又是嵌入式开发的必修课。因此,我们采取一种务实的策略:在需要高性能编译和原生支持时使用独立 Linux 系统,而在日常文档处理和轻量级开发时利用 Windows 下的兼容环境。这种混合模式既能保证开发效率,又能兼顾操作习惯。本文将重点讲解如何部署 Ubuntu 系统、配置核心工具链、搭建 Cygwin 辅助环境,以及最终如何在 ADS(ARM Developer Suite)中完成第一个工程的编译与调试。无论你是学生还是职场新人,只要跟随这些步骤,都能快速建立起属于自己的可靠开发平台。
① 独立 Linux 系统安装与基础配置
构建嵌入式开发环境的第一步,通常是拥有一台运行稳定的 Linux 主机。虽然虚拟机是一个不错的选择,但对于涉及到底层驱动调试或高频编译的场景,独立安装的 Linux 系统能提供更优的性能表现。目前,Ubuntu LTS(长期支持版)因其丰富的社区资源和良好的硬件兼容性,成为了大多数开发者的首选。
硬件要求:建议至少配备 4GB 内存(编译大型工程时 8GB 更佳)、双核及以上 CPU,以及 40GB 以上的可用磁盘空间。若使用较老的电脑,可选择 Ubuntu 的轻量桌面(如 XFCE)以降低资源占用。
安装方式选择:推荐使用 U 盘启动盘安装。在 Windows 下可用 Rufus 或 balenaEtcher 将官方 ISO 镜像写入 U 盘;在 Linux 下可用 dd 命令写入。制作完成后,进入 BIOS 设置 U 盘为第一启动项,重启即可进入安装界面。
安装流程要点:
安装完成后,首要是更新软件源列表,确保能下载到最新的安全补丁和软件包。你可以打开终端,执行 sudo apt update && sudo apt upgrade 来完成这一操作。记得检查防火墙设置,确保 22 端口处于开放状态,以便 Windows 主机能够通过 SSH 客户端无缝连接。
验证安装:执行 uname -a 查看内核版本,lsb_release -a 确认 Ubuntu 版本号,df -h 检查磁盘分区是否正常挂载。若以上命令均能正常输出,说明系统安装成功,可以进入下一步工具链配置。
推荐分区方案:对于嵌入式开发场景,建议采用如下分区布局,兼顾系统稳定性与数据安全:
| /(根分区) | 20–30GB | ext4 | 存放系统与软件包,建议预留足够空间给工具链 |
| /home | 剩余空间 | ext4 | 存放代码、工程与个人配置,重装系统时数据不丢失 |
| swap | 与内存相当或 4GB | swap | 内存不足时的交换空间,编译大型工程时很有帮助 |
安装后的基础配置清单:系统装好后,建议按以下顺序完成基础配置,为后续开发铺平道路:
常见安装问题速查:安装过程中若遇到以下情况,可快速定位解决:
- U 盘无法引导:检查 BIOS 是否开启 UEFI 启动,并确认 U 盘写入方式为「DD 模式」而非「ISO 模式」。
- 安装界面卡死:多为显卡驱动兼容问题,可在启动时选择「Safe Graphics」模式进入安装界面。
- 分区失败:若磁盘已有旧系统,先删除旧分区或用 gparted 工具重新规划,再执行安装。
② Ubuntu 软件包管理与服务设置
Ubuntu 的强大之处在于其完善的包管理系统 APT(Advanced Package Tool)。在日常开发中,我们很少需要从网页下载安装包手动解压,而是直接通过命令行获取经过验证的软件。除了基础的更新操作,学会搜索和安装特定版本的开发库至关重要。例如,若需要安装串口通信工具 minicom,只需输入 sudo apt install minicom 即可自动解决依赖关系并完成安装。
APT 常用命令速查:掌握下面这组命令,就能覆盖绝大多数软件管理场景:
| 更新软件源列表 | sudo apt update | 同步远程仓库索引,安装前建议先执行 |
| 升级已装软件 | sudo apt upgrade | 升级所有可升级的软件包 |
| 搜索软件包 | apt search 关键词 | 按名称或描述搜索可用软件 |
| 查看包信息 | apt show 包名 | 显示版本、依赖、大小等详细信息 |
| 安装软件包 | sudo apt install 包名 | 自动解决依赖并安装 |
| 卸载软件包 | sudo apt remove 包名 | 移除软件但保留配置文件 |
| 彻底清除 | sudo apt purge 包名 | 连配置文件一并删除 |
| 清理无用依赖 | sudo apt autoremove | 移除不再需要的依赖包 |
| 清理缓存 | sudo apt clean | 清理下载的 .deb 缓存释放磁盘空间 |
配置软件源(换国内镜像):默认源在国外,下载速度可能较慢。建议将 /etc/apt/sources.list 中的源替换为国内镜像(如清华、阿里云)。以清华源为例,先备份原文件,再替换:
# 备份原始源文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 用 sed 将 archive.ubuntu.com 替换为清华镜像
sudo sed -i \’s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g\’ /etc/apt/sources.list
# 更新索引使配置生效
sudo apt update
安装指定版本:某些开发场景需要固定工具链版本。先用 apt-cache policy 包名 查看可用版本列表,再指定版本号安装:
# 查看 gcc 的可用版本
apt-cache policy gcc
# 安装指定版本(以 gcc-9 为例)
sudo apt install gcc-9
除了软件安装,系统服务的管理也是日常维护的重点。Systemd 是 Ubuntu 默认的初始化系统,用于管理后台服务。假设你需要让某个自定义脚本在开机时自动运行,可以将其编写为 service 文件放入 /etc/systemd/system/ 目录下,然后使用 systemctl enable 和 systemctl start 命令来激活它。对于开发者而言,理解如何查看服务状态(systemctl status)和日志(journalctl -u 服务名)能有效帮助排查环境问题。比如,当发现网络服务异常时,通过这些命令可以快速定位是配置错误还是端口冲突,从而避免盲目重启系统。
Systemd 服务管理速查:下面列出日常最常用的服务管理命令:
| 启动服务 | sudo systemctl start 服务名 | 立即启动,不设开机自启 |
| 停止服务 | sudo systemctl stop 服务名 | 立即停止 |
| 重启服务 | sudo systemctl restart 服务名 | 常用于配置修改后生效 |
| 设置开机自启 | sudo systemctl enable 服务名 | 开机自动运行 |
| 取消开机自启 | sudo systemctl disable 服务名 | 取消自动运行 |
| 查看服务状态 | systemctl status 服务名 | 显示运行状态与最近日志 |
| 查看服务日志 | journalctl -u 服务名 | 查看该服务的完整日志 |
自定义服务示例:假设你有一个启动开发板串口转发服务的脚本 /opt/start_serial.sh,希望开机自动运行,可创建如下 service 文件:
[Unit]
Description=Serial Port Forward Service
After=network.target
[Service]
Type=simple
ExecStart=/opt/start_serial.sh
Restart=on-failure
User=dev
[Install]
WantedBy=multi-user.target
保存为 /etc/systemd/system/serial-forward.service 后,执行 sudo systemctl daemon-reload 重新加载配置,再 sudo systemctl enable –now serial-forward 即可立即启动并设置开机自启。
常见问题排查:使用 APT 或 Systemd 时若遇到问题,可参考以下思路:
- E: Unable to locate package:软件源索引未更新,先执行 sudo apt update;若仍找不到,可能是软件源未包含该包,需添加对应 PPA 或第三方源。
- E: Could not get lock /var/lib/dpkg/lock:有另一个 apt 进程正在运行,等待其结束,或执行 sudo rm /var/lib/dpkg/lock 强制解锁(慎用)。
- 服务启动失败:先用 systemctl status 服务名 查看错误信息,再用 journalctl -u 服务名 -n 50 查看最近 50 行日志定位原因。
③ 核心开发工具链与文档部署
有了操作系统,接下来就是填充“弹药”,即安装核心的开发工具链。对于 ARM 开发,GNU 工具链(GCC, GDB, Make, Binutils)是必不可少的。在 Ubuntu 上,可以通过 sudo apt install gcc-arm-linux-gnueabihf gdb-multiarch make git 一键安装交叉编译环境。安装完成后,务必验证编译器版本,输入 arm-linux-gnueabihf-gcc –version 确认是否生效。
GNU 工具链各组件作用:理解每个组件的职责,能帮你更从容地排查编译问题:
| 交叉编译器 | arm-linux-gnueabihf-gcc | 将 C/C++ 源码编译为 ARM 架构的目标文件 |
| 汇编器 | arm-linux-gnueabihf-as | 将汇编源码转换为机器码 |
| 链接器 | arm-linux-gnueabihf-ld | 将多个目标文件与库链接为可执行文件 |
| 调试器 | gdb-multiarch | 支持多架构的调试器,可连接开发板或模拟器 |
| 构建工具 | make | 根据 Makefile 自动完成编译、链接流程 |
| 二进制工具 | arm-linux-gnueabihf-objdump | 反汇编、查看二进制文件信息 |
验证交叉编译环境:安装完成后,除了查看版本号,建议实际编译一个最小程序,确认工具链能真正产出 ARM 可执行文件:
# 查看交叉编译器版本
arm-linux-gnueabihf-gcc –version
# 编写一个最小 C 程序
echo \’int main(){return 0;}\’ > hello.c
# 用交叉编译器编译
arm-linux-gnueabihf-gcc hello.c -o hello
# 用 file 确认生成的是 ARM 架构的可执行文件
file hello
若 file 输出中包含 ARM 或 ARM aarch64 字样,说明交叉编译环境已正确生效。注意,该程序无法在 x86 主机上直接运行,需通过 qemu-arm 模拟或部署到开发板验证。
安装 32 位兼容库:部分老旧的 ARM 工具链或 ADS 组件依赖 32 位运行库。若执行时提示缺少 .so 文件,可安装兼容库:
sudo dpkg –add-architecture i386
sudo apt update
sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386
除了编译器,代码版本管理工具 Git 也是现代开发的标配。建议配置好全局的用户名和邮箱,并生成 SSH 密钥对,以便与代码托管平台安全通信。
Git 基础配置:首次使用前,先设置全局身份信息,避免提交时提示缺少用户信息:
# 设置全局用户名与邮箱
git config –global user.name \”Your Name\”
git config –global user.email \”you@example.com\”
# 查看当前配置
git config –list
生成 SSH 密钥:用于与 GitHub、GitLab 等平台免密通信。执行以下命令,一路回车即可生成默认密钥:
# 生成 ed25519 类型密钥(更安全、更简洁)
ssh-keygen -t ed25519 -C \”you@example.com\”
# 查看公钥内容,复制后添加到代码托管平台的 SSH Keys 中
cat ~/.ssh/id_ed25519.pub
生成后,可用 ssh -T git@github.com 测试连接是否成功(首次连接需输入 yes 确认指纹)。
同时,不要忽视文档的重要性。许多开源项目的文档以 HTML 或 PDF 形式存在,可以在 Linux 下部署一个简单的 Web 服务器(如 Python 自带的 http.server 或 Nginx),将文档目录映射出来,方便在浏览器中随时查阅。这种本地化的文档中心不仅能加快检索速度,还能在没有外部网络的情况下正常工作,极大提升了开发体验。
快速部署本地文档中心:若只是临时查阅,用 Python 自带服务器即可,无需安装额外软件:
# 在文档目录下启动 HTTP 服务,监听 8000 端口
cd ~/docs
python3 -m http.server 8000
# 浏览器访问
# http://localhost:8000
若需要长期稳定运行,建议使用 Nginx 并配合 Systemd 管理。先安装 Nginx,再将文档目录映射到站点根目录:
sudo apt install nginx
# 将文档目录软链接到 Nginx 默认站点目录
sudo ln -s ~/docs /var/www/html/docs
# 重启 Nginx 使配置生效
sudo systemctl restart nginx
之后即可通过 http://<主机IP>/docs 在局域网内随时访问文档。若需开机自启,Nginx 默认已配置为开机启动,无需额外设置。
④ Windows 下 Cygwin 环境构建指南
并非所有工作都需要在 Linux 下完成。很多时候,我们希望在熟悉的 Windows 界面中使用类 Unix 的命令和工具。这时,Cygwin 就是一个极佳的桥梁。它提供了一个模拟层,让 Windows 能够运行大量的 Linux 工具和脚本。安装 Cygwin 时,关键在于选择合适的镜像源以加速下载,并在组件选择界面仔细勾选所需的包。
安装 Cygwin 的完整步骤:从官网下载 setup-x86_64.exe(64 位系统)后,按以下流程操作:
推荐安装组件清单:对于嵌入式开发者,建议至少安装以下基础组件:
| gcc-core | C 编译器 | 编译 C 源码,对应 Linux 的 gcc |
| gcc-g++ | C++ 编译器 | 编译 C++ 源码,对应 Linux 的 g++ |
| make | 构建工具 | 根据 Makefile 自动完成编译、链接 |
| git | 版本管理 | 在 Windows 下使用 Git 命令 |
| openssh | 远程连接 | 提供 ssh、scp 等命令 |
| vim | 文本编辑 | 在 Cygwin 终端中使用 Vim |
| binutils | 二进制工具 | 提供 objdump、nm 等工具 |
| gdb | 调试器 | 命令行调试程序 |




