4. 开发环境搭建

全志T113的BSP开发属于典型的“主机编译、目标运行”模式:Ubuntu主机负责源码管理、内核与U-Boot编译、镜像打包;T113开发板负责实际运行与调试。因此,开发环境搭建的核心目标是让主机具备完整的交叉编译能力,并建立稳定可靠的板端通信通道。本节围绕主机配置、交叉编译工具链、串口调试、ADB/Fastboot四条主线展开,形成一套可复用的环境基线。

一、Ubuntu主机配置:版本、依赖与目录规划

全志T113的BSP通常基于较新的Linux内核与U-Boot,推荐使用Ubuntu 20.04 LTS或22.04 LTS 64位桌面版。主机配置的关键不是“装得多”,而是“装得对”:编译依赖、Python环境、磁盘空间、串口权限四者缺一不可。

  • 磁盘空间:源码、交叉工具链、编译中间产物合计建议预留80GB以上,SSD优先。
  • 内存:建议8GB以上,编译内核时并行任务较多,内存不足会触发OOM。
  • 依赖包:安装build-essential、git、bc、bison、flex、libssl-dev、libncurses-dev、device-tree-compiler、python3、python3-pip、rsync、cpio、unzip、file、wget、curl等。
  • 串口权限:将当前用户加入dialout组,避免每次使用sudo打开串口。
sudo apt update
sudo apt install -y build-essential git bc bison flex libssl-dev \
  libncurses-dev device-tree-compiler python3 python3-pip \
  rsync cpio unzip file wget curl minicom picocom
sudo usermod -aG dialout $USER
# 重新登录后生效

目录规划建议采用“工作区+源码+工具链+输出”四层结构,避免路径混乱导致脚本找不到工具链。例如:

~/t113/
├── sdk/          # 全志T113 SDK源码
├── toolchain/    # 交叉编译工具链
├── output/       # 编译产物与镜像
└── tools/        # 烧录、调试脚本
建议在Ubuntu中关闭自动挂载或对SD卡、USB转串口设备做固定命名,避免设备节点在插拔后变化,影响脚本稳定性。

二、交叉编译工具链安装:让主机生成ARM代码

T113采用ARM Cortex-A7架构,运行Linux系统,因此需要ARM 32位交叉编译工具链。全志SDK通常自带预编译工具链,也可能要求使用Linaro或芯片原厂提供的工具链。工具链的本质是“在x86_64主机上生成ARM可执行文件”的一组编译器、链接器、汇编器和库。

安装方式一般有两种:一是直接解压SDK自带的工具链压缩包;二是从官方渠道下载后解压到~/t113/toolchain。无论哪种方式,都需要将工具链的bin目录加入PATH,并验证版本。

tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz \
  -C ~/t113/toolchain/
export PATH=$PATH:~/t113/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin
arm-linux-gnueabi-gcc -v

验证时重点看三处:目标架构是否为ARM、版本是否与SDK要求一致、能否正常编译一个最小C程序。若出现“cannot execute binary file”或“No such file or directory”,通常是工具链位数不匹配或动态库缺失。

检查项命令/方法预期结果
工具链架构file arm-linux-gnueabi-gccELF 64-bit x86-64
编译器版本arm-linux-gnueabi-gcc -v显示gcc版本与目标arm
最小编译测试arm-linux-gnueabi-gcc hello.c -o hello生成ARM可执行文件
目标文件架构file helloELF 32-bit ARM

三、串口调试工具:板端启动的第一双眼睛

串口是T113开发板最基础、最可靠的调试通道。U-Boot阶段、内核启动阶段、文件系统挂载阶段以及登录控制台,都会通过串口输出日志。没有串口,很多启动问题几乎无法定位。

硬件连接上,使用USB转TTL串口模块,注意TX/RX交叉连接,GND共地。T113常见调试串口为UART0,波特率通常为115200-8-N-1。Ubuntu下可使用minicom或picocom。

# 查看串口设备
ls /dev/ttyUSB*
# 使用picocom连接
sudo picocom -b 115200 /dev/ttyUSB0
# 退出:Ctrl+A 然后 Ctrl+X

串口调试的典型场景包括:观察U-Boot打印的DRAM容量、启动介质、内核加载地址;进入U-Boot命令行执行printenv、setenv、boot;在内核启动卡死时判断是卡在驱动初始化还是根文件系统挂载。若串口无输出,优先检查波特率、TX/RX是否接反、板子是否真正上电、串口线是否被其他程序占用。

不要用串口给开发板供电,USB转TTL的电流能力有限,容易导致板子反复重启或无法启动。开发板应使用独立电源适配器。

四、ADB与Fastboot:系统级调试与烧录通道

当系统能够正常启动到Android或Linux用户空间后,ADB和Fastboot就成为更高效的调试手段。ADB用于在系统运行时执行命令、推送文件、抓取日志;Fastboot用于在U-Boot或引导阶段刷写分区镜像。

Ubuntu主机需要安装adb与fastboot工具,并配置udev规则,避免每次连接都因权限问题无法识别设备。

sudo apt install -y android-tools-adb android-tools-fastboot
# 查看设备
adb devices
fastboot devices
# 常用ADB操作
adb shell
adb push hello /tmp/
adb logcat
# 常用Fastboot操作
fastboot flash boot boot.img
fastboot flash system system.img
fastboot reboot

ADB与Fastboot的典型使用场景不同:ADB适合应用层调试、文件传输、日志抓取;Fastboot适合整机烧录、分区恢复、bootloader阶段镜像更新。若adb devices显示no permissions,需要添加udev规则并重新插拔设备。

# /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
sudo udevadm control --reload-rules
sudo udevadm trigger

五、环境搭建的常见误区与复盘

第一,工具链版本与SDK不匹配。全志SDK对gcc版本较敏感,版本过高或过低都可能导致内核编译失败。第二,串口权限未配置,导致minicom无法打开设备。第三,ADB/Fastboot识别不稳定,往往是udev规则缺失或USB线仅支持充电。第四,主机依赖缺失,表现为编译到某一步突然报“command not found”或“header not found”。

建议在环境搭建完成后做一次“最小闭环验证”:用交叉工具链编译一个hello程序,通过ADB推送到板端运行;用串口观察U-Boot启动日志;用Fastboot读取一次分区信息。三者都通过,说明主机、工具链、串口、ADB/Fastboot四条通道均已打通,后续BSP开发才有稳定基础。

全志T113 开发环境搭建:主机—工具链—板端通道 Ubuntu 主机 20.04 / 22.04 LTS 64位 build-essential / git / python3 libssl-dev / dtc / ncurses dialout 组 / 80GB 磁盘 ~/t113/{sdk,toolchain,output} 交叉编译工具链 arm-linux-gnueabi-gcc Linaro 7.5 / 原厂工具链 PATH 环境变量配置 hello.c → ARM ELF 验证 内核 / U-Boot / 应用编译 T113 开发板 ARM Cortex-A7 U-Boot / Linux Kernel 根文件系统 / 应用 UART0 调试串口 USB OTG / ADB / Fastboot 调试与烧录通道 串口:115200-8-N-1 minicom / picocom ADB:shell / push / logcat Fastboot:flash / reboot udev 规则 / 权限配置 编译产物 / 镜像 工具链生成 ARM 代码 安装与配置 连接与调试 最小闭环验证:交叉编译 hello → ADB 推送运行 → 串口看启动日志 → Fastboot 读分区