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 开发环境整体架构
下图展示了开发环境各组件之间的关系与数据流。
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文件 |