3、开发环境搭建:Linux开发机配置、交叉编译工具链安装、JTAG/SWD调试器连接、串口终端配置

好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说实话,车载以太网交换机的开发环境,比普通嵌入式要复杂那么一点点。你想想看,既要处理Linux主机,又要搞定交叉编译,还得把调试器和串口伺候好。别急,我一个一个说。

3.1 Linux开发机配置

我个人习惯用Ubuntu 20.04 LTS,64位版本。为什么选这个?因为大部分芯片厂商的SDK都在这上面验证过。我在项目中遇到过有人用Arch Linux折腾了三天,最后发现是glibc版本不兼容——嗯,这种坑咱们不踩。

你需要准备一台性能还行的机器。最低配置我列一下:

项目 最低要求 推荐配置
CPU 4核 8核以上
内存 8GB 16GB以上
硬盘 100GB空闲 256GB SSD
系统 Ubuntu 20.04 Ubuntu 22.04 LTS

装好系统后,第一件事就是装基础依赖包。别问我为什么,少了任何一个,编译SDK的时候都会报一些莫名其妙的错。直接跑这个:

sudo apt update
sudo apt install -y build-essential git vim cmake
sudo apt install -y libncurses5-dev libssl-dev
sudo apt install -y flex bison libelf-dev
sudo apt install -y python3 python3-pip
sudo apt install -y minicom screen

这里有个小细节:libncurses5-dev 很多人会漏掉。没有它,内核的menuconfig配置界面就打不开。我曾经因为这个卡了半小时,后来发现是少装了一个包。

3.2 交叉编译工具链安装

车载以太网交换机用的芯片,大多是ARM Cortex-R系列或者Cortex-A系列。你不可能在x86的PC上直接编译出ARM能跑的程序——这就是交叉编译存在的意义。

工具链怎么选?我建议直接用芯片厂商提供的。比如NXP的S32G系列,官方会提供s32g-glibc-toolchain。Marvell的Prestera系列也有自己的工具链。别自己去Linaro官网下通用的,容易踩坑。

安装步骤其实很简单:

  1. 从厂商官网下载工具链安装包(通常是.sh文件)
  2. 赋予执行权限:chmod +x *.sh
  3. 运行安装脚本,指定安装路径
  4. 把工具链的bin目录加到PATH环境变量里

举个例子,假设你用的是ARM GCC工具链:

# 下载后解压
tar -xvf 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
我的小技巧: 别把工具链装到系统目录里。我习惯统一放在 /opt/toolchains/ 下面,每个芯片厂商一个文件夹。这样换项目的时候,切换环境变量就行,不用重新装。

3.3 JTAG/SWD调试器连接

调试器这块,说实话,车载以太网交换机开发最常用的就是J-Link和Lauterbach。J-Link便宜好用,Lauterbach功能强大但贵得离谱。咱们课程里以J-Link为例,因为大部分团队都用它。

连接方式很简单:

  • JTAG模式: 需要TMS、TCK、TDI、TDO、nTRST、nSRST六根线
  • SWD模式: 只需要SWDIO、SWCLK两根线,再加一根GND

我个人更推荐SWD模式。为什么?因为线少,不容易接错。我在项目中遇到过有人把JTAG的TDI和TDO接反了,折腾了一下午才发现——SWD就没这个问题。

连接好硬件后,在Linux上安装J-Link驱动:

# 下载J-Link Linux安装包
wget https://www.segger.com/downloads/jlink/JLink_Linux_V788a_x86_64.tgz
# 解压
tar -xvf JLink_Linux_V788a_x86_64.tgz
# 安装
sudo cp -r JLink_Linux_V788a /opt/
# 创建软链接
sudo ln -s /opt/JLink_Linux_V788a/JLinkExe /usr/local/bin/
# 测试连接
JLinkExe
注意: 有些开发板需要给调试器供电。我遇到过J-Link连上后灯不亮,查了半天发现是板子没上电。嗯,这种低级错误,犯过一次就记住了。

连接成功后,你会看到J-Link的交互式命令行。输入connect,选择芯片型号,设置接口速度。我一般设成4MHz,稳定又够快。

3.4 串口终端配置

串口是嵌入式开发的「眼睛」。没有它,你连系统启动日志都看不到。车载以太网交换机通常通过UART输出调试信息,波特率一般是115200或者921600。

Linux下我推荐两个工具:minicomscreen。minicom功能全,screen轻量好用。

先确认串口设备:

# 插上USB转串口后
ls /dev/ttyUSB*
# 或者
ls /dev/ttyACM*

如果什么也没显示,检查驱动。CH340芯片需要装驱动,FT232一般免驱。我建议用FT232的线,稳定,不丢数据。

配置minicom:

sudo minicom -s

进入配置界面后,设置:

  • 串口设备:/dev/ttyUSB0
  • 波特率:115200
  • 数据位:8
  • 停止位:1
  • 校验:
  • 硬件流控:关闭

保存为默认配置,下次直接 sudo minicom 就能用。

如果你喜欢用screen,更简单:

sudo screen /dev/ttyUSB0 115200

退出screen按 Ctrl+A 然后 K,再按 Y 确认。

核心要点:

  • Linux开发机推荐Ubuntu 20.04/22.04 LTS
  • 交叉工具链用厂商提供的,别自己瞎折腾
  • 调试器优先用SWD模式,线少不易出错
  • 串口波特率确认好,115200最常见

好了,环境搭好了。下一章咱们开始编译第一个交换机固件,然后烧进去看看效果。说实话,第一次看到串口打印出启动日志的时候,那种感觉还是挺爽的。