4、开发环境搭建:Linux开发环境安装(Ubuntu)、交叉编译工具链配置、SSH与串口终端使用、版本控制(Git)基础

说实话,做嵌入式开发这么多年,我见过太多新手卡在环境搭建这一步。明明代码逻辑没问题,编译却报一堆错——十有八九是环境没配好。这一章,我就带你把这几个基础工具一次性搞定。

4.1 为什么非要用Linux?

你可能想问:Windows用得好好的,干嘛非得折腾Linux?

原因很简单:嵌入式开发的工具链,绝大多数都是基于Linux的。比如我们后面要用的交叉编译器、各种开源库,在Windows上配置起来能让你怀疑人生。而在Ubuntu上,往往一条命令就搞定。

我个人习惯用Ubuntu 20.04 LTS,稳定,社区支持好。你装18.04或22.04也行,差别不大。

4.2 Ubuntu安装——双系统还是虚拟机?

这里给你两个选择:

  • 虚拟机(推荐新手):用VMware或VirtualBox,在Windows里跑Linux。好处是不影响原有系统,坏了重装就行。我刚开始学的时候就用虚拟机,摔了无数次,重启一下就好。
  • 双系统:性能更好,但分区有风险。如果你打算长期做嵌入式,建议后面还是切到双系统。

安装步骤其实很简单:

  1. 去Ubuntu官网下载iso镜像
  2. 用Rufus或balenaEtcher制作启动U盘
  3. 重启电脑,从U盘启动,跟着向导走
小技巧:安装时选「最小安装」,省掉那些用不上的办公软件。磁盘分区建议给根目录(/)至少50GB,swap分区设成内存大小就行。

4.3 交叉编译工具链——为什么需要它?

你想想看,你的电脑是x86架构,而智能相机用的是ARM芯片。x86的编译器编译出来的程序,ARM芯片跑不了。怎么办?

答案就是交叉编译工具链。它运行在你的电脑上,但生成的目标代码是ARM架构的。

我项目中常用的工具链是gcc-arm-none-eabi,针对裸机或RTOS系统。安装很简单:

sudo apt update
sudo apt install gcc-arm-none-eabi

装完后验证一下:

arm-none-eabi-gcc --version

看到版本号就说明成功了。

注意:如果你用的是带Linux系统的芯片(比如树莓派),那需要安装gcc-arm-linux-gnueabihf。别搞混了,我刚开始就吃过这个亏——编译了半天,烧进去跑不起来,才发现工具链选错了。

4.4 SSH与串口终端——怎么跟开发板通信?

开发板通常没有显示器键盘,你怎么操作它?两种方式:

4.4.1 SSH(网络连接)

只要开发板和电脑在同一个局域网,就能用SSH远程登录。Ubuntu自带SSH客户端,直接敲命令:

ssh username@192.168.1.100

第一次连接会提示确认指纹,输入yes就行。然后输入密码,你就进入开发板的终端了。

我个人习惯用MobaXterm(Windows)或Terminator(Linux),支持多标签,方便同时开好几个SSH窗口。

4.4.2 串口终端(物理连接)

有时候网络没配好,或者要调试uboot、内核启动,就得用串口。你需要一根USB转串口线,插到开发板的UART口上。

在Ubuntu下,用screenminicom

sudo apt install screen
sudo screen /dev/ttyUSB0 115200

这里/dev/ttyUSB0是串口设备名,115200是波特率。退出时按Ctrl+A,再按K,确认退出。

避坑指南:我曾经遇到串口乱码,折腾了半天,最后发现是波特率设错了。开发板常用的波特率是115200或9600,不确定的话看原理图或文档。

4.5 版本控制(Git)基础——代码的后悔药

写代码没有版本控制,就像开车没有刹车。你改了一堆代码,结果跑不起来,想回退?Git就是你的时光机。

4.5.1 安装与配置

sudo apt install git
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

这两行配置很重要,每次提交代码都会记录你是谁。

4.5.2 基本操作

我带你走一遍最常用的流程:

# 初始化仓库
git init

# 添加文件到暂存区
git add main.c

# 提交到本地仓库
git commit -m "第一次提交:添加主程序"

# 查看状态
git status

# 查看提交历史
git log --oneline

你想想看,每次commit就像拍了一张快照。万一改坏了,用git checkout就能回到之前的快照。

4.5.3 分支管理

做项目时,我习惯开一个dev分支来开发新功能,稳定后再合并到main分支:

git checkout -b dev
# ... 开发代码 ...
git add .
git commit -m "完成了相机驱动"
git checkout main
git merge dev
我的习惯:每次提交前,先用git diff看看改了哪些内容。这样能避免把调试用的临时代码也提交上去。嗯,这个习惯帮我省了不少麻烦。

4.6 本章小结

这一章的内容,说白了就是给你搭好工作台:

  • Ubuntu系统——你的主战场
  • 交叉编译工具链——让代码能在ARM上跑
  • SSH和串口——跟开发板对话的桥梁
  • Git——你的代码保险箱

这些工具配好了,后面写代码、调试、烧录才能顺风顺水。别嫌麻烦,环境搭得好,开发效率翻倍。下一章,我们就开始真正写代码了。