4、开发环境搭建:安装Ubuntu、配置依赖包、获取Tina SDK、目录结构解析
全志Tina Linux轻量级系统构建的起点,是搭建一套可复现、可维护的编译环境。Tina SDK基于OpenWrt构建系统,其编译过程对宿主机的操作系统版本、依赖库、磁盘布局和网络环境有明确要求。本章将围绕Ubuntu安装、依赖包配置、SDK获取与目录结构解析四个环节展开,帮助读者建立一套从零到可编译的完整环境,并理解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,否则部分内核模块和驱动编译会因签名验证失败而中断。
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。在线同步则适用于需要频繁拉取最新代码的开发者。
离线包安装流程:
- 将压缩包上传至
/opt目录,执行tar -zxvf tina_xxx.tar.gz解压。 - 解压后进入SDK根目录,执行
source build/envsetup.sh初始化环境。 - 执行
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 # 镜像校验文件
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分钟(取决于机器性能),期间不要中断,否则依赖缓存不完整会导致后续编译异常。