2、开发环境搭建:安装Intel System Studio、配置交叉编译工具链、目标板连接与调试接口(JTAG/SWD)、建立串口终端
好,咱们正式开始动手了。这一章,我带你把整个开发环境搭起来。别小看这一步,我见过太多工程师,工具链没配好就急着写代码,结果一调试就卡住,白白浪费一整天。
说白了,环境搭建就像盖楼打地基。地基不稳,后面全是坑。咱们一步步来。
2.1 安装Intel System Studio
Intel System Studio,简称ISS,是Intel官方推出的嵌入式开发套件。它集成了编译器、调试器、性能分析工具,还有各种库。我个人习惯,装完系统第一件事就是装它。
安装前的准备
- 操作系统:Windows 10 64位或Ubuntu 18.04以上。我个人更推荐Linux,命令行操作更顺手。
- 磁盘空间:至少留出20GB。ISS包含的交叉编译工具链和文档挺占地方的。
- 内存:8GB以上。如果你像我一样喜欢同时开IDE、串口终端和浏览器,16GB会更从容。
安装步骤
- 从Intel官网下载ISS安装包。注意选择对应你目标架构的版本——x86还是ARM?别搞混了。
- 运行安装程序。Windows下双击exe,Linux下给.sh文件加执行权限然后运行。
- 选择组件时,我建议全选。虽然安装时间会长一点,但后面用到某个工具时不用再回头补装。
- 设置安装路径。我个人习惯放在
C:\Intel\或/opt/intel/下,路径里不要有中文或空格。
2.2 配置交叉编译工具链
交叉编译,说白了就是在你的PC上编译出能在目标板上运行的程序。你想想看,目标板资源有限,不可能在上面跑编译器。所以咱们得在PC上配好交叉编译环境。
工具链路径设置
ISS安装完成后,交叉编译工具链默认在以下路径:
# Linux 下
/opt/intel/system_studio_2020/iss/bin/
# Windows 下
C:\Intel\system_studio_2020\iss\bin\
你需要把这个路径加到系统环境变量里。我个人习惯在.bashrc或.zshrc里加一行:
export PATH=$PATH:/opt/intel/system_studio_2020/iss/bin/
验证工具链
配置完环境变量后,打开终端,输入:
i686-elf-gcc --version
如果看到版本信息,说明工具链配好了。如果提示“命令未找到”,嗯,检查一下路径对不对,或者重新加载一下配置文件:source ~/.bashrc。
Makefile配置示例
实际项目中,你不会每次都手动敲编译命令。写一个Makefile才是正经事。这是我常用的模板:
CC = i686-elf-gcc
CFLAGS = -Wall -O2 -ffreestanding -nostdlib
LDFLAGS = -T linker.ld
all: kernel.bin
kernel.bin: boot.o kernel.o
$(CC) $(LDFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f *.o *.bin
这里要注意-ffreestanding和-nostdlib这两个选项。它们告诉编译器:别依赖宿主操作系统的库,咱们是在裸机上跑。我第一次写嵌入式程序时忘了加这两个选项,结果链接时报了一堆莫名其妙的错误。
2.3 目标板连接与调试接口(JTAG/SWD)
工具链配好了,接下来得让PC和目标板“说上话”。这里有两个常用接口:JTAG和SWD。
JTAG vs SWD
| 特性 | JTAG | SWD |
|---|---|---|
| 引脚数 | 5(TCK、TMS、TDI、TDO、TRST) | 2(SWCLK、SWDIO) |
| 速度 | 较快 | 稍慢,但够用 |
| 适用场景 | 复杂调试、多核、FPGA | ARM Cortex-M系列 |
| 调试器 | J-Link、OpenOCD | J-Link、ST-Link |
我个人习惯,如果目标板是ARM Cortex-M系列,优先用SWD。引脚少,接线简单,不容易出错。如果是x86架构或者需要调试FPGA,那就得上JTAG。
连接步骤
- 关闭目标板电源。这一步千万别省,我见过有人带电插拔调试器,结果烧了调试接口。
- 连接调试器。JTAG用20针排线,SWD用4针杜邦线。注意方向,一般调试器上会有三角标记指示1号引脚。
- 连接目标板。找到板子上的JTAG/SWD接口,对照原理图一一对应。
- 上电。先给调试器供电,再给目标板供电。
验证连接
用OpenOCD检测一下:
openocd -f interface/jlink.cfg -f target/stm32f4x.cfg
如果看到target halted的提示,恭喜你,连接成功了。
2.4 建立串口终端
调试接口搞定了,但你还得有个“耳朵”听目标板说话。串口终端就是干这个的。
串口参数设置
目标板的串口参数通常是:
- 波特率:115200
- 数据位:8
- 停止位:1
- 校验位:无
- 流控:无
这些参数在目标板的BSP(板级支持包)文档里都能找到。如果找不到,115200 8N1是默认值,先试试。
常用终端工具
- Windows:PuTTY、Tera Term。我个人习惯用PuTTY,轻量、稳定。
- Linux:minicom、screen。我更喜欢screen,因为它可以后台运行,不会因为终端关闭而中断会话。
Linux下用screen连接串口
# 查看串口设备
ls /dev/ttyUSB*
# 连接串口
screen /dev/ttyUSB0 115200
断开连接:按Ctrl+A,然后按K,再按Y确认。
测试串口通信
在目标板上运行一个简单的串口输出程序:
#include <stdio.h>
int main() {
printf("Hello from target board!\n");
while(1);
return 0;
}
编译、下载、运行。如果终端上打印出了“Hello from target board!”,说明串口通信正常。
嗯,到这里,开发环境就搭好了。工具链、调试接口、串口终端,三样东西都齐了。接下来,咱们就可以真正开始写代码、调试、做性能分析了。
记住,环境搭建这一步,慢就是快。花点时间把基础打牢,后面会省去很多麻烦。