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官网下通用的,容易踩坑。
安装步骤其实很简单:
- 从厂商官网下载工具链安装包(通常是
.sh文件) - 赋予执行权限:
chmod +x *.sh - 运行安装脚本,指定安装路径
- 把工具链的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的交互式命令行。输入connect,选择芯片型号,设置接口速度。我一般设成4MHz,稳定又够快。
3.4 串口终端配置
串口是嵌入式开发的「眼睛」。没有它,你连系统启动日志都看不到。车载以太网交换机通常通过UART输出调试信息,波特率一般是115200或者921600。
Linux下我推荐两个工具:minicom 和 screen。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最常见
好了,环境搭好了。下一章咱们开始编译第一个交换机固件,然后烧进去看看效果。说实话,第一次看到串口打印出启动日志的时候,那种感觉还是挺爽的。