1. 课程导入与开发环境搭建
TI Sitara 是德州仪器面向工业控制、人机界面、网关与边缘计算场景的 ARM 应用处理器产品线。与通用 MCU 不同,Sitara 芯片内部通常集成 Cortex-A 应用核、可编程实时单元(PRU)、工业通信外设(如双千兆以太网、CAN、EtherCAT 从站支持)、显示子系统与丰富的高速接口。学习 Sitara 外设驱动与板级适配,本质上是掌握"从芯片手册到可运行系统"的完整链路:选型、获取 SDK、配置交叉编译工具链、连接目标板、验证启动与调试通道。本章作为课程导入,先把这条链路打通,后续章节再逐层深入具体外设。
一、Sitara 系列定位与典型芯片选型
Sitara 家族按性能与集成度大致分为三档,选型时最需要关注的是内核架构、主频、内存接口、工业外设数量以及是否带 PRU-ICSS。
| 系列 | 典型型号 | 内核 | 主频 | 典型应用 |
|---|---|---|---|---|
| AM335x | AM3358/AM3359 | Cortex-A8 + PRU-ICSS | 最高 1GHz | HMI、工业网关、低成本 PLC |
| AM437x | AM4378/AM4379 | Cortex-A9 + PRU-ICSS | 最高 1GHz | 电机驱动、工业通信、条码扫描 |
| AM57xx | AM5728/AM5748 | 双 Cortex-A15 + DSP + PRU | 最高 1.5GHz | 机器视觉、边缘计算、多轴控制 |
以 AM3358 为例,它包含 1 个 Cortex-A8 核、2 个 PRU 核、3 个以太网 MAC(其中 2 个支持千兆)、2 个 USB OTG、LCD 控制器与 24 位 GPMC 总线。若项目需要 EtherCAT 从站或编码器实时采集,PRU-ICSS 是关键资源;若需要运行 Linux 并做图像处理,AM57xx 的 A15+DSP 组合更合适。选型不是"越强越好",而是让外设资源与实时性要求匹配,避免为用不到的功能付出 BOM 成本。
二、SDK 获取与安装
TI 为 Sitara 提供 Processor SDK(Linux/RTOS),Linux 版本包含 U-Boot、Linux 内核、设备树、根文件系统与 Yocto 构建环境。获取方式有两种:一是从 TI 官网下载预编译的 SDK 安装包(如 ti-processor-sdk-linux-am335x-evm-xx.xx.xx.xx-Linux-x86-Install.bin),二是通过 Yocto 从源码构建。课程建议先用预编译包快速跑通,再按需定制。
# 以 AM335x 为例,安装 SDK(示例路径)
chmod +x ti-processor-sdk-linux-am335x-evm-08.02.00.24-Linux-x86-Install.bin
./ti-processor-sdk-linux-am335x-evm-08.02.00.24-Linux-x86-Install.bin
# 安装后目录结构
# linux-devkit/ 交叉编译工具链
# board-support/ U-Boot、内核、设备树源码
# filesystem/ 根文件系统
# bin/ 创建 SD 卡、烧写脚本
安装完成后,linux-devkit 目录下即为交叉编译工具链,通常为 arm-linux-gnueabihf- 前缀。SDK 版本号与芯片、内核版本强相关,升级 SDK 时需同步更新 U-Boot 与设备树,避免内核与引导程序不匹配导致启动失败。
三、交叉编译工具链配置
交叉编译的核心是让主机(x86_64)生成目标板(ARM)可执行文件。配置分三步:设置环境变量、验证工具链、编译一个最小程序。
# 1. 设置环境变量(写入 ~/.bashrc 可持久化)
export PATH=$HOME/ti-processor-sdk-linux-am335x-evm-08.02.00.24/linux-devkit/sysroots/x86_64-arago-linux/usr/bin:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
# 2. 验证
arm-linux-gnueabihf-gcc -v
# 3. 编译最小程序并查看架构
arm-linux-gnueabihf-gcc hello.c -o hello
file hello
# 输出应包含:ELF 32-bit LSB executable, ARM, EABI5
若 file 显示为 x86_64,说明 CROSS_COMPILE 未生效或 PATH 顺序错误。编译内核与 U-Boot 时,还需指定 ARCH=arm,否则会按主机架构解析 Makefile。工具链的 sysroot 决定了头文件与库的搜索路径,交叉编译第三方库时务必使用 SDK 提供的 sysroot,而不是主机系统的 /usr/include。
四、目标板与主机连接调试
目标板与主机的连接通常包含三条通道:串口(调试控制台)、以太网(文件传输与 NFS 启动)、USB(烧写或 ADB)。串口是最基础的调试通道,AM335x 默认使用 UART0,波特率 115200,8N1,无流控。连接后可在主机使用 minicom 或 picocom 观察 U-Boot 与内核启动日志。
# 串口连接示例
sudo picocom -b 115200 /dev/ttyUSB0
# 上电后应看到 U-Boot 打印,按任意键进入命令行
# 常用命令:printenv、setenv、saveenv、boot
以太网通道用于 TFTP 下载内核与设备树、NFS 挂载根文件系统,可大幅缩短"编译—烧写—重启"的迭代周期。典型配置是主机运行 TFTP 与 NFS 服务,目标板 U-Boot 中设置 serverip、ipaddr、bootargs,通过 tftp 加载 zImage 与 am335x-evm.dtb,再用 bootz 启动。判断连接是否成功,最直接的依据是串口是否出现内核解压信息与登录提示,以及 ifconfig 是否获得预期 IP。
五、环境搭建中的常见问题与判断依据
串口无输出时,先确认线序(TX/RX 是否交叉)、波特率与端口号,再检查目标板是否真正上电。U-Boot 能打印但内核卡住,多半是设备树与板卡不匹配或 bootargs 中 console= 参数错误。TFTP 下载失败时,用主机 ping 目标板、检查防火墙与 /etc/xinetd.d/tftp 配置。NFS 挂载失败常见于 /etc/exports 未加 no_root_squash 或版本不匹配,可在 U-Boot 的 bootargs 中显式指定 nfsroot=... ,vers=3。
insmod 报 "invalid module format"。此时用 modinfo 查看 vermagic 是否与 uname -r 一致。