2. 开发环境搭建:Linux主机环境配置、交叉编译工具链安装、T113 SDK源码获取与编译

嵌入式Linux驱动开发的第一步,是构建一个稳定、可复现的宿主开发环境。本章将引导你完成从零搭建全志T113开发环境的全过程,包括Linux主机依赖安装、交叉编译工具链部署、以及官方SDK的获取与首次编译验证。一个配置正确的环境,能避免后续开发中90%以上的“编译不过”问题。

推荐主机系统:Ubuntu 20.04 LTS 或 22.04 LTS(64位)。全志官方SDK主要基于Ubuntu验证,使用其他发行版可能遇到依赖包版本不兼容的问题。

2.1 Linux主机环境配置

全志T113 SDK依赖大量系统工具和库。以下步骤在Ubuntu 20.04/22.04上验证通过。

2.1.1 更新软件源与安装基础依赖

sudo apt update
sudo apt upgrade -y

# 安装基础编译工具
sudo apt install -y build-essential git wget curl vim

# 安装SDK编译所需依赖
sudo apt install -y gcc g++ make cmake autoconf automake libtool \
    pkg-config libncurses5-dev libssl-dev flex bison \
    python3 python3-pip python3-dev python3-venv \
    u-boot-tools device-tree-compiler swig \
    libc6-dev-i386 lib32z1 lib32stdc++6
常见问题:如果安装 libncurses5-dev 失败,可尝试 libncurses-dev。部分新版本Ubuntu已不再提供32位兼容库,若缺少 lib32z1 或 lib32stdc++6,可跳过,不影响SDK主体编译。

2.1.2 配置Git用户信息

SDK源码管理依赖Git,建议提前配置用户信息,避免后续提交或打补丁时出现警告。

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

2.1.3 安装串口调试工具

T113开发板通常通过UART串口输出调试信息,建议安装minicom或picocom。

sudo apt install -y minicom picocom
推荐使用picocom:相比minicom,picocom配置更简单,退出快捷键为 Ctrl+A Ctrl+X。常用启动命令:picocom -b 115200 /dev/ttyUSB0

2.2 交叉编译工具链安装

全志T113平台使用ARM Cortex-A7内核,需要在x86主机上安装ARM交叉编译工具链,才能编译出在T113上运行的二进制程序。

2.2.1 工具链选择

工具链类型 适用场景 提供商
gcc-arm-linux-gnueabihf Linux用户态程序、驱动模块 Linaro / ARM
gcc-arm-none-eabi 裸机程序、Trusted Firmware ARM
全志官方工具链 SDK内置,与BSP版本严格匹配 全志
推荐方案:直接使用全志SDK内置的工具链。SDK的 prebuilt 目录下已包含经过验证的交叉编译器版本,无需额外下载,可避免版本不匹配导致的编译错误。

2.2.2 手动安装Linaro工具链(备选方案)

如果你需要独立编译用户态测试程序,可以手动安装Linaro工具链。

# 下载Linaro gcc-arm-linux-gnueabihf 7.5.0
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

# 解压到 /opt 目录
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz -C /opt/

# 添加环境变量
echo 'export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin' >> ~/.bashrc
source ~/.bashrc

# 验证安装
arm-linux-gnueabihf-gcc --version

2.2.3 验证工具链可用性

编写一个简单的C程序,交叉编译并检查生成的文件类型。

# 创建测试文件
echo '#include <stdio.h>
int main() {
    printf("Hello, T113!\n");
    return 0;
}' > hello.c

# 交叉编译
arm-linux-gnueabihf-gcc -o hello hello.c

# 查看文件信息
file hello
# 输出应包含:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV)
验证要点:确认输出中包含 ARM 和 EABI5 字样,说明编译出的程序是ARM架构的可执行文件,不能在x86主机上直接运行。

2.3 T113 SDK源码获取与编译

全志T113 SDK通常以压缩包形式提供,或通过Git仓库分发。以下以官方SDK为例,演示获取与首次编译流程。

2.3.1 SDK源码获取

假设SDK压缩包名为 t113-sdk-v1.0.tar.gz,解压到工作目录。

# 创建开发目录
mkdir -p ~/t113_workspace
cd ~/t113_workspace

# 解压SDK(实际文件名以你获取的为准)
tar -xzf t113-sdk-v1.0.tar.gz

# 进入SDK根目录
cd t113-sdk-v1.0

# 查看目录结构
ls -l

2.3.2 SDK目录结构说明

目录/文件 说明
brandy/ U-Boot与Trusted Firmware源码
kernel/ Linux内核源码(基于Linux 5.4或5.10)
build/ 编译脚本与配置文件
target/ 根文件系统构建配置
prebuilt/ 预编译的交叉工具链与二进制文件
out/ 编译输出目录(生成镜像、内核、模块等)
device/ 设备树源文件(.dts)与板级配置

2.3.3 首次编译流程

全志SDK使用 build.sh 脚本进行一键编译。首次编译需要选择目标板配置。

# 1. 设置环境变量(每次新终端都需要执行)
source build/envsetup.sh

# 2. 选择目标板(以t113_evb1为例)
lunch t113_evb1-eng

# 3. 执行全量编译
./build.sh

# 4. 编译完成后,输出镜像位于 out/ 目录
ls out/
首次编译耗时:根据主机性能不同,首次全量编译可能需要30分钟到2小时。建议使用 -j 参数指定并行编译线程数,例如 ./build.sh -j8(8核CPU)。如果编译中途失败,请检查终端输出的错误信息,通常是缺少依赖包。

2.3.4 编译输出产物

产物文件 路径示例 用途
boot.img out/boot.img 包含内核与设备树,用于启动
rootfs.img out/rootfs.img 根文件系统镜像
u-boot-sunxi-with-spl.bin out/u-boot-sunxi-with-spl.bin U-Boot引导程序
vmlinux out/vmlinux 未压缩的内核ELF文件(用于调试)
*.dtb out/kernel/arch/arm/boot/dts/ 编译后的设备树二进制文件

2.4 开发环境整体架构

下图展示了开发环境各组件之间的关系与数据流。

全志T113开发环境架构图 全志T113开发环境架构 Linux 主机开发环境 Ubuntu 20.04/22.04 系统依赖包 交叉编译工具链 Git / 版本管理 串口调试工具 TFTP/NFS 服务 T113 SDK 源码 kernel/ (Linux内核) brandy/ (U-Boot) device/ (设备树) target/ (文件系统) build/ (编译脚本) prebuilt/ (工具链) out/ (编译产物: boot.img, *.dtb, u-boot) 编译 T113 目标开发板 (ARM Cortex-A7) 烧录/下载 主机 x86_64 → 目标 ARM

2.5 环境验证清单

完成上述步骤后,建议逐项检查以下清单,确保环境就绪。

检查项 验证命令 预期结果
交叉编译器 arm-linux-gnueabihf-gcc --version 显示版本信息,无“command not found”
设备树编译器 dtc --version 显示dtc版本号
SDK环境变量 echo $TARGET_PRODUCT 显示目标板名称(如 t113_evb1)
编译输出 ls out/boot.img 文件存在且大小不为0
设备树编译 ls out/kernel/arch/arm/boot/dts/*.dtb 至少存在一个.dtb文件