1. 课程导入与开发环境搭建

TI Sitara 是德州仪器面向工业控制、人机界面、网关与边缘计算场景的 ARM 应用处理器产品线。与通用 MCU 不同,Sitara 芯片内部通常集成 Cortex-A 应用核、可编程实时单元(PRU)、工业通信外设(如双千兆以太网、CAN、EtherCAT 从站支持)、显示子系统与丰富的高速接口。学习 Sitara 外设驱动与板级适配,本质上是掌握"从芯片手册到可运行系统"的完整链路:选型、获取 SDK、配置交叉编译工具链、连接目标板、验证启动与调试通道。本章作为课程导入,先把这条链路打通,后续章节再逐层深入具体外设。

一、Sitara 系列定位与典型芯片选型

Sitara 家族按性能与集成度大致分为三档,选型时最需要关注的是内核架构、主频、内存接口、工业外设数量以及是否带 PRU-ICSS。

系列典型型号内核主频典型应用
AM335xAM3358/AM3359Cortex-A8 + PRU-ICSS最高 1GHzHMI、工业网关、低成本 PLC
AM437xAM4378/AM4379Cortex-A9 + PRU-ICSS最高 1GHz电机驱动、工业通信、条码扫描
AM57xxAM5728/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。

建议先固定一套"串口 + TFTP + NFS"的调试环境,再开始外设驱动开发。每次修改设备树或驱动后,只需重新编译并传输对应文件,无需反复烧写 SD 卡。
Sitara 开发环境连接与调试链路 主机 (x86_64 Linux) 交叉编译工具链 U-Boot / 内核 / 设备树 TFTP + NFS 服务 串口终端 picocom 目标板 (AM335x EVM) Cortex-A8 + PRU-ICSS UART0 调试控制台 以太网 RGMII/MII SD 卡 / eMMC 启动 串口 /dev/ttyUSB0 115200 8N1 以太网 TFTP / NFS USB 烧写 / ADB 启动与验证流程 ① 上电 → ROM Code ② 加载 SPL/U-Boot ③ TFTP 加载 zImage + DTB ④ NFS 挂载根文件系统 ⑤ 内核启动 → 登录提示 ⑥ ifconfig 验证网络

五、环境搭建中的常见问题与判断依据

串口无输出时,先确认线序(TX/RX 是否交叉)、波特率与端口号,再检查目标板是否真正上电。U-Boot 能打印但内核卡住,多半是设备树与板卡不匹配或 bootargs 中 console= 参数错误。TFTP 下载失败时,用主机 ping 目标板、检查防火墙与 /etc/xinetd.d/tftp 配置。NFS 挂载失败常见于 /etc/exports 未加 no_root_squash 或版本不匹配,可在 U-Boot 的 bootargs 中显式指定 nfsroot=... ,vers=3。

交叉编译工具链版本必须与 SDK 匹配。混用不同 SDK 的工具链与内核源码,可能出现头文件不兼容、模块加载失败等问题,表现为 insmod 报 "invalid module format"。此时用 modinfo 查看 vermagic 是否与 uname -r 一致。