当你拿到一款IC芯片板卡的时候,第一步就是找 Getting Started Guide <-- Start Here。例如你拿到的是 AM57x Processor SDK Linux 这种完整 BSP 类 SDK,第一步永远都是搭环境,跑例程。也就是说先执行 *.Linux-x86-Install.bin,把交叉工具链、预编译内核、U-Boot、rootfs、board-support、devkit 等完整环境落地到你的主机目录。后续才是跑 setup.sh、制作 SD 卡、编译内核还是移植驱动。
借此来说明一下MPU开发流程与MCU的开发流程对比吧。。。
传统的MCU,非常简单,无非就是上电,然后片内 ROM(检查 Boot 引脚),之后就是 App(直接跑,裸机或 FreeRTOS),更简单的程序员写的程序几乎都是直接裸机app启动的。
那对比MPU呢,首先MPU有很多层,每一层都需要单独编译和维护。其次,整体流程就是上电,到ROM Bootloader(片内固化,不可改),到SPL(U-Boot 第一阶段),初始化 DDR3,再到U-Boot(第二阶段),再加载 ATF(ARM Trusted Firmware)加载 OP-TEE(可信执行环境,可选),再加载 Linux Kernel,挂载 rootfs(文件系统),App(用户态进程),上述流程针对当前板卡所述,大致流程都是类似的,无非就是DDR型号换一下,不是ARM的就没有ATF仅此而已。
那两者的工具链跟开发环境更不用说了,其次就是AM57x的特殊的一些组件如下。
SPL U-Boot 的第一阶段,体积极小,负责初始化 DDR
ATF ARM Trusted Firmware,处理安全启动、电源管理
OP-TEE 可信执行环境,运行在安全世界(TrustZone)
Device Tree(DTS) 描述硬件信息,替代 MCU 的 HAL 配置
PRU-ICSS 片上实时协处理器,运行工业协议(EtherCAT 等)
rootfs 根文件系统,包含库、工具、App
那到此为止,最后需要知道的就是开发流程了。
-
搭建开发环境,安装工具链(arm-linux-gnueabihf-gcc),安装依赖包,配置 TFTP / NFS 服务
-
编译 U-Boot(Bootloader),生成 MLO(SPL)+ u-boot.img
-
编译 Linux Kernel,生成 zImage + am57xx.dtb
-
构建 rootfs,Yocto 构建 or 使用预编译的
-
烧录到 SD 卡 / eMMC,分区:boot 分区 + rootfs 分区+拷贝对应文件
-
开发你的 App,交叉编译 之后 运行

U-Boot/ Bootloader 文档和构建指南
Kernel/ Linux 内核配置、驱动开发
Filesystem/ rootfs 构建(基于 Yocto)
PRU-ICSS/ 实时协处理器开发
Examples_and_Demos/ 应用示例
Industrial_Protocols/ HSR/PRP、EtherCAT 等工业协议
(只有下了才知道。。)
AM57X Processor SDK 文件层级说明
processor-sdk-linux-AM57X/
│
├── board-support/ ← 【板级代码】(最常修改的地方)
│ ├── ti-u-boot-2025.01+git/ ← U-Boot 源码
│ ├── ti-linux-kernel-6.12.43+git-ti/ ← Linux Kernel 源码
│ ├── prebuilt-images/ ← 预编译好的镜像(可直接烧录)
│ │ ├── MLO ← SPL(第一阶段引导)
│ │ ├── u-boot.img ← U-Boot 镜像
│ │ ├── zImage ← Kernel 镜像
│ │ ├── am57xx-evm.dtb ← 设备树
│ │ └── boot-am57xx-evm.tar.gz ← boot 分区打包
│ └── extra-drivers/ ← 额外驱动
│
├── linux-devkit/ ← 【交叉编译工具链】(不用改)
│ └── sysroots/x86_64-arago-linux/usr/bin/arm-oe-linux-gnueabi/
│ └── arm-oe-linux-gnueabi-gcc ← 交叉编译器(GCC 13.4.0)
│
├── filesystem/ ← 预编译根文件系统
│ ├── tisdk-default-image-am57xx-evm.rootfs.tar.xz ← 完整版 rootfs
│ ├── tisdk-base-image-am57xx-evm.rootfs.tar.xz ← 精简版 rootfs
│ └── tisdk-thinlinux-image-am57xx-evm.rootfs.tar.xz
│
├── example-applications/ ← 示例应用源码
├── yocto-build/ ← Yocto 构建系统
├── setup.sh ← 环境初始化脚本
├── Makefile ← 顶层 Makefile(一键编译)
└── Rules.make ← 编译变量配置(工具链路径等)

废话不多说,接下来就是环境需求的对齐,如下内容。
主机系统
Ubuntu 22.04 LTS 64位
必需软件包
sudo apt install -y \
xinetd tftpd nfs-kernel-server minicom \
build-essential libncurses5-dev \
autoconf automake dos2unix \
screen lrzsz lzop u-boot-tools
交叉编译工具链
ARM GCC 13.4.0(ARMv7 32位)
SDK 内已预装路径:linux-devkit/sysroots/x86_64-arago-linux/usr/bin/
构建系统
Yocto 5.0 (Scarthgap)
Python 3.12+、Git、CMake 3.28+
目标平台
芯片:AM5728 / AM5748
CPU:ARM Cortex-A15
Linux Kernel:6.12
U-Boot:2025.01
安装依赖包
bash
sudo apt install -y \
xinetd tftpd-hpa nfs-kernel-server \
libncurses5-dev dos2unix screen lzop flex u-boot-tools \
gcc-arm-linux-gnueabihf libssl-dev bc bison device-tree-compiler
配置 TFTP 服务
修改配置文件 /etc/default/tftpd-hpa:
bash
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"
sudo systemctl restart tftpd-hpa
sudo systemctl enable tftpd-hpa
配置 NFS 服务
修改配置文件 /etc/exports,添加:
bash
/home/yewh/nfs *(rw,sync,no_subtree_check,no_root_squash)
/tftpboot *(rw,sync,no_subtree_check,no_root_squash)
更新 Rules.make
bash
EXEC_DIR?=/home/yewh/nfs/home/root # App 安装到 NFS 目录
ROOTFS_PART?=/home/yewh/nfs # rootfs 挂载点
BOOT_PART?=/tftpboot # boot 文件目录
接着就是编译u-boot以及kernel了,命令如下,非常简单。
cd /home/yewh/SDK/PROCESSOR_SDK_AM57X/processor-sdk-linux-AM57X
make u-boot

还有一个手动编译的,其实就是不涉及顶层makefile
SDK=/home/yewh/SDK/PROCESSOR_SDK_AM57X/processor-sdk-linux-AM57X
CROSS=$SDK/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-
UBOOT=$SDK/board-support/ti-u-boot-2025.01+git
配置
make -C UBOOT ARCH=arm CROSS_COMPILE=CROSS am57xx_evm_defconfig O=$UBOOT/build/a15
图形化配置(可选,修改配置项)
make -C UBOOT ARCH=arm CROSS_COMPILE=CROSS menuconfig O=$UBOOT/build/a15
编译
make -j(nproc) -C UBOOT ARCH=arm CROSS_COMPILE=CROSS O=UBOOT/build/a15
烧录到板卡
假设 SD 卡 boot 分区挂载在 /mnt/boot
sudo cp board-support/ti-u-boot-2025.01+git/build/a15/MLO /mnt/boot/
sudo cp board-support/ti-u-boot-2025.01+git/build/a15/u-boot.img /mnt/boot/
cd /home/yewh/SDK/PROCESSOR_SDK_AM57X/processor-sdk-linux-AM57X
make linux
交叉编译器(linux-devkit/sysroots/x86_64-arago-linux/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-)
其中设备树会有问题的,board-support/ti-linux-kernel-6.12.43+git-ti/arch/arm/boot/dts/ti/om
ap/,需要自行处理定位。

