1. 课程导入
欢迎进入《全志T113 Linux BSP开发》课程。全志T113是一款面向工业控制、智能家居、车载终端与边缘计算场景的高集成度SoC,采用双核Cortex-A7架构,主频可达1.2GHz,并集成Mali-G31 GPU、DDR3/DDR3L控制器、丰富的外设接口与多媒体编解码单元。对于嵌入式Linux开发者而言,T113不仅是一颗"能跑Linux的芯片",更是一个需要从BootROM、U-Boot、Kernel、设备树到根文件系统完整打通的BSP工程对象。本课程的目标,是让你具备从零搭建、裁剪、调试并量产化T113 Linux BSP的能力。
一、T113芯片架构:从CPU到外设的总线视角
理解BSP开发,首先要理解芯片的"数据通路"和"控制通路"。T113内部采用多总线互联结构:CPU、GPU、DMA、显示控制器、存储控制器等主设备通过AXI/AHB总线访问DDR和片上SRAM;而GPIO、I2C、SPI、UART、PWM、ADC等低速外设则挂在APB总线上,通过时钟控制器(CCU)和复位控制器统一管理。BSP开发中大量工作,本质上是在配置这些总线上的控制器寄存器、时钟树和引脚复用关系。
从启动角度看,T113上电后先执行片内BootROM,根据BROM引脚或eFuse配置选择启动介质(SPI NOR、SPI NAND、eMMC、SD卡),加载并校验Boot0/SPL,再进入U-Boot proper,最终引导Linux内核。这条链路中的每一环,都是BSP需要适配和验证的对象。
二、Linux BSP开发目标:从"能启动"到"可量产"
很多初学者把BSP开发理解为"编译内核、烧录镜像、串口能打印"。这只是起点。真正的BSP开发目标包含四个层次:
- 可启动:BootROM→SPL→U-Boot→Kernel→RootFS全链路无卡死,串口有完整启动日志。
- 可驱动:DDR、eMMC、以太网、USB、显示、音频、Wi-Fi等关键外设均能正常工作,设备树描述与硬件原理图一致。
- 可裁剪:根据产品需求裁剪内核模块、文件系统组件与启动时间,满足成本与性能约束。
- 可量产:支持批量烧录、OTA升级、分区保护、启动失败回滚与产测接口。
核心判断标准:一块T113板子是否完成BSP适配,不看"能不能亮屏",而看"换一块同型号板子、换一批DDR颗粒、换一个启动介质,是否仍能稳定启动并识别全部外设"。
三、整体学习路线:五阶段递进
本课程按"环境→启动→内核→驱动→产品化"五阶段推进,每阶段都有明确的交付物:
| 阶段 | 核心内容 | 关键交付物 |
|---|---|---|
| 阶段一:环境搭建 | Ubuntu开发机、交叉编译工具链、串口/ADB调试、源码获取 | 可编译出第一个T113镜像 |
| 阶段二:启动链路 | BootROM、SPL、U-Boot移植与启动参数 | 串口完整启动日志与U-Boot命令行 |
| 阶段三:内核与设备树 | Kernel配置、DTS编写、时钟与引脚复用 | 内核启动到RootFS并识别基础外设 |
| 阶段四:驱动开发 | GPIO、I2C、SPI、USB、显示、音频驱动适配 | 各外设功能验证通过 |
| 阶段五:产品化 | 裁剪、OTA、分区、产测、稳定性测试 | 可量产BSP发布包 |
四、实战环境搭建:开发机与目标板
推荐使用Ubuntu 20.04/22.04 LTS作为开发主机,安装全志官方或社区维护的交叉编译工具链。以下是最小化环境准备命令:
# 安装基础依赖
sudo apt update
sudo apt install -y build-essential git bc bison flex libssl-dev \
libncurses5-dev device-tree-compiler python3 python3-pip \
minicom picocom android-tools-adb
# 获取T113 SDK(以社区Longan SDK为例)
git clone https://github.com/Tina-Linux/tina-sdk.git
cd tina-sdk
source envsetup.sh
目标板侧需要准备:T113开发板、USB转TTL串口模块(波特率115200)、Type-C数据线(用于FEL烧录或ADB)、TF卡或eMMC。首次上电建议先通过串口确认BootROM是否输出信息,再进入FEL模式进行烧录验证。
调试建议:串口是BSP开发的"生命线"。在U-Boot和Kernel阶段都保留完整日志输出,不要过早关闭console。遇到启动卡死时,先看最后一行日志定位阶段,再决定是改DDR参数、改设备树还是改启动介质配置。
五、常见误区与复盘
初学者最容易踩的三个坑:
- 跳过BootROM阶段直接改内核:如果SPL阶段DDR初始化失败,内核根本不会被加载,改内核配置毫无意义。应先确认SPL日志。
- 设备树与原理图脱节:DTS中的引脚、时钟、电源域必须与硬件原理图一一对应,否则驱动probe失败却难以定位。
- 忽视启动介质差异:SPI NOR、SPI NAND、eMMC的分区布局和烧录方式不同,同一份镜像不能无差别套用。
复盘要点:每次启动失败,记录"最后一条日志 + 当前启动阶段 + 最近一次修改",形成自己的BSP调试日志。这比反复重编译更能快速收敛问题。
完成本章环境搭建后,你应当能够:在Ubuntu上编译出T113的U-Boot与Kernel镜像,通过串口看到BootROM和SPL的输出,并成功进入U-Boot命令行。这是后续所有驱动与产品化工作的基础。