全志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/下,方便拷贝到开发板。

知识体系总览

下面这张图把咱们这章的内容串起来了,你一看就明白各个部分的关系:

全志T113平台开发知识体系 T113芯片 双核A7 / 4路I2C 开发板 T113-S3 / 接口资源 交叉编译工具链 arm-linux-gnueabi-gcc 内核源码 linux-5.4 / t113分支 内核配置 t113_defconfig 内核编译 zImage / dtbs / modules zImage + dtb 启动内核 .ko模块文件 动态加载驱动 从芯片到开发板,从工具链到内核编译,最终产出zImage和.ko模块,这就是驱动开发的基础设施

我的建议:环境搭建这一步别着急,配好了后面写驱动才顺手。我见过太多人急着写代码,结果编译环境没配好,折腾半天发现是工具链版本不对。

好了,到这步你的开发环境就齐活了。芯片特性心里有数,开发板接口知道在哪,交叉编译工具链能跑起来,内核源码也编译通过了。接下来咱们就可以真正开始写I2C驱动了。