全志T113平台概述:芯片特性、开发板资源与编译环境搭建
做嵌入式Linux驱动开发,说白了就是跟芯片和内核打交道。全志T113这颗芯片,我这两年项目里用了不少次,性价比确实高。今天咱们就把这个平台从头捋一遍,从芯片特性到编译环境,一步到位。
T113芯片核心特性
T113是颗双核Cortex-A7处理器,主频能跑到1.2GHz。我刚开始接触时觉得它就是个普通ARM芯片,用深了才发现它有几个亮点特别适合做I2C外设开发。
| 特性 | 参数 | 我的评价 |
|---|---|---|
| CPU | 双核Cortex-A7 @1.2GHz | 跑Linux够用,功耗低 |
| 内存 | 内置DDR3/DDR3L,最大2GB | 省了外部DDR布线麻烦 |
| I2C控制器 | 4路独立I2C总线 | 做传感器扩展很灵活 |
| 视频解码 | H.264/H.265 1080p@60fps | 做显示类产品很实用 |
| 封装 | BGA 282/337 | 手工焊接有点难度 |
重点记住:T113有4路I2C总线,每路都可以挂多个外设。咱们课程后面实战用的就是I2C0和I2C1。
开发板资源一览
我手头用的是全志官方的T113-S3开发板,淘宝上也能买到第三方的,核心配置差不多。咱们课程里所有代码都在这个板子上验证过。
- 核心板:T113-S3,512MB DDR3,8GB eMMC
- 底板接口:USB OTG、USB HOST、以太网、音频、LCD、摄像头、GPIO排针
- I2C引出:I2C0在排针上(PB0/PB1),I2C1在扩展口(PE0/PE1)
- 调试方式:串口(UART0,波特率115200)
- 供电:5V DC,或者USB供电
个人习惯:我一般用USB转串口工具接UART0,再插一根USB线供电。两根线就能干活,桌面清爽不少。
交叉编译环境搭建
交叉编译,说白了就是在PC上编译出能在ARM芯片上跑的程序。我第一次搞这个时被路径问题折腾了一下午,后来总结出一套固定流程。
安装交叉编译工具链
全志官方推荐用gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi,我用的是这个版本,没出过兼容问题。
# 下载工具链
wget https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
# 解压到固定目录
tar -xvf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz -C /opt/
# 配置环境变量(建议写到 ~/.bashrc)
export PATH=$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
我曾经踩过的坑:环境变量没写对,编译时提示找不到编译器。检查方法很简单——执行 arm-linux-gnueabi-gcc --version,能输出版本就说明配好了。
验证工具链
写个简单的C程序测试一下:
// hello.c
#include <stdio.h>
int main(void)
{
printf("Hello, T113!\n");
return 0;
}
// 编译
arm-linux-gnueabi-gcc -o hello hello.c
// 查看文件类型
file hello
// 输出: ELF 32-bit LSB executable, ARM, version 1 (SYSV)
看到ARM字样就对了。这个hello程序不能在PC上跑,得放到开发板上执行。
内核源码获取与编译
全志T113的内核源码在GitHub上,我习惯用官方维护的linux-5.4分支。为什么选5.4?因为全志对这个版本做了大量适配,驱动接口稳定,文档也全。
获取源码
git clone https://github.com/Allwinner-T113/linux-5.4.git
cd linux-5.4
git checkout t113-v5.4
源码大概1.2GB,网速慢的话可以提前下载。我一般用公司内网镜像,几分钟搞定。
配置内核
全志提供了默认配置文件,在arch/arm/configs/下:
make t113_defconfig
这个配置打开了T113大部分外设驱动,包括咱们需要的I2C。你可以用menuconfig查看:
make menuconfig
在Device Drivers → I2C support里,能看到T113的I2C控制器驱动已经选上了。
建议:第一次编译别改配置,先用默认的。等跑通了再按需裁剪,省得遇到奇怪问题不知道是配置还是代码的锅。
编译内核
make -j4 zImage
make -j4 dtbs
-j4表示用4个线程并行编译,我笔记本8核的,一般用-j8。编译完会在arch/arm/boot/下生成zImage和一堆.dtb文件。
T113的设备树文件是sun8i-t113.dtsi,I2C节点定义在里面。咱们后面写驱动时,经常要改这个文件。
编译模块
make -j4 modules
模块编译完,安装到临时目录:
make modules_install INSTALL_MOD_PATH=./modules_install
这样生成的.ko文件就在modules_install/lib/modules/5.4.xxx/下,方便拷贝到开发板。
知识体系总览
下面这张图把咱们这章的内容串起来了,你一看就明白各个部分的关系:
我的建议:环境搭建这一步别着急,配好了后面写驱动才顺手。我见过太多人急着写代码,结果编译环境没配好,折腾半天发现是工具链版本不对。
好了,到这步你的开发环境就齐活了。芯片特性心里有数,开发板接口知道在哪,交叉编译工具链能跑起来,内核源码也编译通过了。接下来咱们就可以真正开始写I2C驱动了。