4、开发环境搭建:安装Ubuntu、配置依赖包、获取Tina SDK、目录结构解析

全志Tina Linux轻量级系统构建的起点,是搭建一套可复现、可维护的编译环境。Tina SDK基于OpenWrt构建系统,其编译过程对宿主机的操作系统版本、依赖库、磁盘布局和网络环境有明确要求。本章将围绕Ubuntu安装、依赖包配置、SDK获取与目录结构解析四个环节展开,帮助读者建立一套从零到可编译的完整环境,并理解SDK内部的组织逻辑,为后续的镜像定制与系统裁剪打下基础。

Tina Linux 开发环境搭建总览 ① 宿主机准备 • Ubuntu 18.04/20.04/22.04 LTS • 磁盘 ≥ 100GB(SSD优先) • 内存 ≥ 16GB(推荐32GB) • CPU ≥ 4核(编译加速) • 独立分区 /opt 或 /home • 关闭休眠/自动挂起 ② 依赖包配置 • build-essential / gcc / g++ • libncurses5-dev / zlib1g-dev • git / repo / curl / wget • python3 / python3-pip • device-tree-compiler • u-boot-tools / swig ③ 获取Tina SDK • 全志客户服务平台 • 百度网盘/阿里云盘镜像 • repo init / repo sync • 版本:Tina 5.0 / 4.0 • 校验MD5/SHA256 • 解压至 /opt/tina ④ 目录结构解析 tina/ ├── build/ # 编译脚本与规则 ├── device/ # 芯片配置/板级dts ├── target/ # 根文件系统构建 ├── package/ # 软件包定义 ├── kernel/ # Linux内核源码 ├── out/ # 编译输出镜像 关键路径 out/<BOARD>/ boot.img rootfs.img tina_*.pack compile.log 环境搭建 → 依赖配置 → SDK获取 → 目录解析 → 首次编译验证

4.1 安装Ubuntu:版本选择与磁盘规划

全志Tina SDK的编译工具链基于GCC 8/9系列,官方推荐使用Ubuntu 18.04 LTS(Bionic)或20.04 LTS(Focal)。较新的Ubuntu 22.04(Jammy)虽然可以编译,但需要额外处理Python 3.10与OpenWrt构建脚本的兼容性问题。对于初学者,建议直接使用Ubuntu 20.04.6 LTS,该版本在稳定性和工具链兼容性之间取得了最佳平衡。

磁盘规划是环境搭建中最容易被忽视的环节。Tina SDK完整解压后约15GB,编译过程中产生的中间文件、镜像输出和缓存通常需要额外30-50GB空间。如果同时编译多个芯片平台(如T113、V853、R329),磁盘占用会进一步膨胀。建议采用以下分区方案:

  • 根分区(/):至少50GB,用于系统文件和工具链安装。
  • 工作分区(/opt或/home):独立挂载,分配100GB以上,存放Tina SDK源码和编译输出。
  • 交换分区:建议8GB,防止内存不足时编译进程被OOM Killer终止。

安装Ubuntu时,建议取消“安装时下载更新”选项,避免在后续配置依赖包时产生版本冲突。同时,在BIOS中关闭Secure Boot,否则部分内核模块和驱动编译会因签名验证失败而中断。

经验提醒:如果宿主机是Windows系统,推荐使用VMware Workstation或VirtualBox安装Ubuntu虚拟机。虚拟机设置中,处理器核心数分配不低于4核,内存不低于16GB,磁盘使用“单个文件”模式以减少I/O碎片。不要使用WSL1/WSL2进行Tina SDK编译,因为其文件系统映射机制会导致大量符号链接失效。

4.2 配置依赖包:最小化安装与验证

Tina SDK的构建系统依赖一系列基础工具和库。虽然OpenWrt的构建脚本会自动下载部分工具,但宿主机的预装依赖仍然必不可少。以下命令在Ubuntu 20.04上执行,可完成最小化依赖安装:

sudo apt update
sudo apt install -y build-essential gcc g++ gperf bison flex texinfo help2man make libncurses5-dev libncursesw5-dev python3 python3-pip python3-setuptools git repo curl wget zlib1g-dev libssl-dev libgmp-dev libmpc-dev libmpfr-dev device-tree-compiler u-boot-tools swig bc rsync file cpio unzip dosfstools mtools

安装完成后,建议执行以下命令验证关键工具是否可用:

gcc --version
python3 --version
make --version
dtc --version
repo --version

如果repo命令未找到,可以手动安装:

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
风险提示:不要使用apt install python(默认指向Python 2.7),Tina SDK的构建脚本已全面迁移至Python 3。同时,避免安装libncurses-dev(不带5),因为部分旧版menuconfig工具仍依赖libncurses5-dev的符号链接。

4.3 获取Tina SDK:官方渠道与repo同步

Tina SDK的获取方式分为两种:离线压缩包和repo在线同步。离线压缩包适用于网络受限或需要固定版本的环境,通常从全志客户服务平台(open.allwinnertech.com)下载,文件名为tina_<芯片型号>_<版本号>.tar.gz。在线同步则适用于需要频繁拉取最新代码的开发者。

离线包安装流程:

  1. 将压缩包上传至/opt目录,执行tar -zxvf tina_xxx.tar.gz解压。
  2. 解压后进入SDK根目录,执行source build/envsetup.sh初始化环境。
  3. 执行lunch选择目标平台,例如t113_i100或v853_linux。

repo在线同步流程:

mkdir -p /opt/tina
cd /opt/tina
repo init -u https://github.com/allwinner-hub/tina-manifest.git -b master
repo sync -j8

repo同步的优势在于可以按需拉取指定分支,例如-b tina-5.0。但需要注意,全志的GitHub仓库更新频率较低,部分最新补丁仍需通过客户服务平台获取。

获取方式 适用场景 优点 缺点
离线压缩包 固定版本开发、量产维护 版本锁定、无需网络 无法获取最新补丁
repo在线同步 功能开发、社区协作 实时更新、分支灵活 依赖网络、仓库可能不完整
百度网盘镜像 国内网络环境 下载速度快 版本可能滞后、需手动校验

4.4 目录结构解析:核心目录与功能映射

Tina SDK的目录结构继承自OpenWrt,但针对全志芯片平台做了大量定制。理解目录结构是后续进行包管理、内核配置和镜像打包的前提。以下为Tina SDK根目录下的核心目录及其功能说明:

  • build/:存放顶层Makefile、编译规则和平台配置脚本。其中build/envsetup.sh是环境初始化入口,build/scripts/包含各类辅助工具。
  • device/:芯片级配置目录,按device/config/chips/<芯片型号>/组织。包含BoardConfig.mk(板级配置)、sys_config.fex(系统硬件配置)、dts/(设备树源文件)。
  • target/:根文件系统构建目录,target/allwinner/<板型>/下定义了文件系统镜像的组成、分区大小和打包脚本。
  • package/:软件包定义目录,每个子目录对应一个软件包,包含Makefile(编译规则)和patches/(补丁文件)。
  • kernel/:Linux内核源码目录,通常为全志定制版本,基于LTS内核(如5.4或4.9)并添加了硬件驱动。
  • out/:编译输出目录,按out/<板型>/组织,存放编译生成的镜像文件、日志和临时文件。

以T113芯片为例,典型的编译输出路径为out/t113_i100/,其中包含:

out/t113_i100/
├── boot.img          # 内核+设备树+ramdisk
├── rootfs.img        # 根文件系统镜像
├── tina_t113_i100_uart0.img  # 烧录镜像(含bootloader)
├── compile.log       # 编译日志
└── md5sums           # 镜像校验文件
实战场景:假设需要修改T113的默认串口波特率。首先进入device/config/chips/t113/configs/,编辑sys_config.fex中的[uart0]段,将baudrate从115200改为921600。然后执行make kernel_menuconfig确认内核串口驱动配置,最后重新编译并打包。整个过程涉及device/(硬件配置)、kernel/(驱动配置)和out/(输出验证)三个目录的联动。

4.5 常见误区与复盘

误区一:使用root用户直接编译。Tina SDK的构建脚本默认拒绝root执行,因为部分编译步骤会修改文件权限。正确做法是创建普通用户,并将/opt/tina目录的所有权赋予该用户:sudo chown -R $USER:$USER /opt/tina。

误区二:忽略磁盘inode数量。SDK包含大量小文件(如补丁、脚本),默认ext4文件系统在格式化时inode数量可能不足。建议在格式化工作分区时使用mkfs.ext4 -i 8192 /dev/sdX,增加inode密度。

误区三:编译过程中断后直接重新make。如果编译中断,应先执行make clean清理残留的临时文件,再重新编译。否则可能出现“文件已存在”或“符号链接断裂”等不可预知错误。

误区四:混淆lunch与make的关系。lunch只是选择目标平台并设置环境变量,并不会触发编译。真正的编译命令是make或./build.sh。每次打开新终端,都需要重新执行source build/envsetup.sh和lunch。

总结复盘:一套稳定的开发环境应具备三个特征:可重复(同一套步骤在不同机器上结果一致)、可诊断(编译日志完整、错误定位清晰)、可扩展(新增软件包或板型时无需重构环境)。建议在完成环境搭建后,立即执行一次make -j8全量编译,确认基础镜像可以生成,再开始后续的定制工作。首次编译耗时约30-60分钟(取决于机器性能),期间不要中断,否则依赖缓存不完整会导致后续编译异常。