ARM 嵌入式 Linux 开发环境搭建全攻略:Ubuntu + Cygwin + ADS 从零到实战

发布时间:2026/10/6 12:39:08
ARM 嵌入式 Linux 开发环境搭建全攻略:Ubuntu + Cygwin + ADS 从零到实战 摘要:本文手把手带你从零搭建一套可落地的 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 盘为第一启动项,重启即可进入安装界面。安装流程要点:选择「安装 Ubuntu」而非「试用」,语言建议选 English 以避免部分工具链对中文路径的兼容问题。分区时,除了根目录/外,最好单独划分一个/home分区,这样即使未来重装系统,个人配置和代码数据也能得以保留。若不确定,可直接选择「使用整个磁盘并安装 Ubuntu」,系统会自动完成分区。在安装阶段就勾选"SSH Server"选项,或者在系统启动后通过sudo apt install openssh-server进行安装。安装完成后,首要是更新软件源列表,确保能下载到最新的安全补丁和软件包。你可以打开终端,执行sudo apt update sudo apt upgrade来完成这一操作。记得检查防火墙设置,确保 22 端口处于开放状态,以便 Windows 主机能够通过 SSH 客户端无缝连接。验证安装:执行uname -a查看内核版本,lsb_release -a确认 Ubuntu 版本号,df -h检查磁盘分区是否正常挂载。若以上命令均能正常输出,说明系统安装成功,可以进入下一步工具链配置。推荐分区方案:对于嵌入式开发场景,建议采用如下分区布局,兼顾系统稳定性与数据安全:挂载点建议大小文件系统说明/(根分区)20–30GBext4存放系统与软件包,建议预留足够空间给工具链/home剩余空间ext4存放代码、工程与个人配置,重装系统时数据不丢失swap与内存相当或 4GBswap内存不足时的交换空间,编译大型工程时很有帮助安装后的基础配置清单:系统装好后,建议按以下顺序完成基础配置,为后续开发铺平道路:更新软件源:sudo apt update sudo apt upgrade,确保系统处于最新状态。安装基础工具:sudo apt install build-essential curl wget git vim net-tools,一次性补齐编译与网络调试常用工具。配置 SSH 服务:sudo systemctl enable ssh sudo systemctl start ssh,并确认 22 端口已开放,方便 Windows 主机远程连接。设置时区与语言:sudo timedatectl set-timezone Asia/Shanghai,避免编译日志时间错乱。创建开发用户:建议使用普通用户而非 root 进行日常开发,必要时用sudo提权,降低误操作风险。常见安装问题速查:安装过程中若遇到以下情况,可快速定位解决: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中的源替换为国内镜像(如清华、阿里云)。以清华源为例,先备份原文件,再替换:# 备份原始源文件sudocp/etc/apt/sources.list /etc/apt/sources.list.bak# 用 sed 将 archive.ubuntu.com 替换为清华镜像sudosed-i's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g'/etc/apt/sources.list# 更新索引使配置生效sudoaptupdate安装指定版本:某些开发场景需要固定工具链版本。先用apt-cache policy 包名查看可用版本列表,再指定版本号安装:# 查看 gcc 的可用版本apt-cachepolicy gcc# 安装指定版本(以 gcc-9 为例)sudoaptinstallgcc-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-ohello# 用 file 确认生成的是 ARM 架构的可执行文件filehello若file输出中包含ARM或ARM aarch64字样,说明交叉编译环境已正确生效。注意,该程序无法在 x86 主机上直接运行,需通过qemu-arm模拟或部署到开发板验证。安装 32 位兼容库:部分老旧的 ARM 工具链或 ADS 组件依赖 32 位运行库。若执行时提示缺少.so文件,可安装兼容库:sudodpkg --add-architecture i386sudoaptupdatesudoaptinstalllibc6:i386 libncurses5:i386 libstdc++6:i386除了编译器,代码版本管理工具 Git 也是现代开发的标配。建议配置好全局的用户名和邮箱,并生成 SSH 密钥对,以便与代码托管平台安全通信。Git 基础配置:首次使用前,先设置全局身份信息,避免提交时提示缺少用户信息:# 设置全局用户名与邮箱gitconfig--globaluser.name"Your Name"gitconfig--globaluser.email"you@example.com"# 查看当前配置gitconfig--list生成 SSH 密钥:用于与 GitHub、GitLab 等平台免密通信。执行以下命令,一路回车即可生成默认密钥:# 生成 ed25519 类型密钥(更安全、更简洁)ssh-keygen-ted25519-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-mhttp.server8000# 浏览器访问# http://localhost:8000若需要长期稳定运行,建议使用 Nginx 并配合 Systemd 管理。先安装 Nginx,再将文档目录映射到站点根目录:sudoaptinstallnginx# 将文档目录软链接到 Nginx 默认站点目录sudoln-s~/docs /var/www/html/docs# 重启 Nginx 使配置生效sudosystemctl restart nginx之后即可通过http://主机IP/docs在局域网内随时访问文档。若需开机自启,Nginx 默认已配置为开机启动,无需额外设置。④ Windows 下 Cygwin 环境构建指南并非所有工作都需要在 Linux 下完成。很多时候,我们希望在熟悉的 Windows 界面中使用类 Unix 的命令和工具。这时,Cygwin 就是一个极佳的桥梁。它提供了一个模拟层,让 Windows 能够运行大量的 Linux 工具和脚本。安装 Cygwin 时,关键在于选择合适的镜像源以加速下载,并在组件选择界面仔细勾选所需的包。安装 Cygwin 的完整步骤:从官网下载setup-x86_64.exe(64 位系统)后,按以下流程操作:选择安装方式:双击安装包,选择「Install from Internet」,即从网络下载并安装。设置安装目录:建议安装到C:\cygwin64,路径中不要包含中文或空格,以免引发脚本执行错误。选择本地软件包目录:指定一个临时目录(如C:\cygwin_packages)用于缓存下载的.tar.xz包,方便日后离线重装。选择镜像源:在「Choose Download Site」界面,建议勾选国内镜像(如清华 TUNA、阿里云)以显著加快下载速度;若列表中没有,可手动添加镜像地址。选择组件:进入「Select Packages」界面后,在搜索框输入包名,逐个勾选所需组件(见下方清单),点击「Next」开始下载安装。推荐安装组件清单:对于嵌入式开发者,建议至少安装以下基础组件:组件用途说明gcc-coreC 编译器编译 C 源码,对应 Linux 的gccgcc-g++C++ 编译器编译 C++ 源码,对应 Linux 的g++make构建工具根据 Makefile 自动完成编译、链接git版本管理在 Windows 下使用 Git 命令openssh远程连接提供ssh、scp等命令vim文本编辑在 Cygwin 终端中使用 Vimbinutils二进制工具提供objdump、nm等工具gdb调试器命令行调试程序