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/ # 烧录、调试脚本
二、交叉编译工具链安装:让主机生成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-gcc | ELF 64-bit x86-64 |
| 编译器版本 | arm-linux-gnueabi-gcc -v | 显示gcc版本与目标arm |
| 最小编译测试 | arm-linux-gnueabi-gcc hello.c -o hello | 生成ARM可执行文件 |
| 目标文件架构 | file hello | ELF 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是否接反、板子是否真正上电、串口线是否被其他程序占用。
四、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开发才有稳定基础。