1. Tina系统概述:全志Tina Linux简介、SDK目录结构与开发环境搭建

1.1 全志Tina Linux是什么?

先说说Tina Linux到底是什么。说白了,这是全志基于OpenWrt深度定制的一个嵌入式Linux系统。我最早接触它是在做一款IPC(网络摄像头)项目的时候,当时客户要求启动快、内存占用小,还要支持Wi-Fi和音视频编解码。试了几个方案都不太满意,最后发现Tina正好对上了这些需求。

Tina Linux的核心特点,我总结为三点:

  • 轻量级——基于OpenWrt,内核和根文件系统都可以裁剪得很小。我做过一个项目,整个系统镜像压缩后不到8MB,这在资源受限的IoT设备上非常实用。
  • 全志芯片深度适配——全志自家的SoC(比如V系列、R系列、T系列),驱动和BSP都已经集成好了。你不需要像在通用Linux上那样从头移植。
  • 包管理机制——继承了OpenWrt的opkg和软件包选择系统,想加什么功能,make menuconfig勾上就行,不用手动交叉编译每个库。

一句话总结:Tina Linux = 全志芯片 + OpenWrt框架 + 全志自研驱动/中间件。适合做量产级的嵌入式产品,尤其是音视频、物联网、智能家居方向。

1.2 Tina SDK目录结构——你得知道东西放哪

我第一次拿到Tina SDK时,说实话有点懵。目录太多了。但用久了你会发现,它的结构其实很有规律。我带你过一遍核心目录:

目录/文件 作用 我的备注
tina/ SDK根目录,所有操作都在这里 别乱改顶层文件
tina/target/ 目标板配置、内核配置、分区表 改分区大小常来这里
tina/package/ 所有软件包的Makefile和源码 加驱动、加应用都在这里
tina/kernel/ Linux内核源码(全志分支) 驱动开发的主战场
tina/out/ 编译输出:镜像、固件、包 编译完先看这里
tina/build/ 构建系统核心脚本和配置 一般不动,除非你懂OpenWrt
tina/prebuilt/ 预编译工具链、交叉编译器 别手欠删了
tina/device/ 芯片级配置、dts设备树文件 改引脚功能、外设配置来这里

我的习惯:拿到一个新SDK,第一件事就是看 target/ 和 device/ 下的配置文件。这能帮你快速了解这个SDK是为哪块板子、哪个芯片准备的。我曾经因为没看这个,用错了配置编译了一整天,结果刷进去板子起不来……

下面这张图能帮你快速建立Tina SDK的整体认知:

Tina SDK 核心结构图 tina/ (SDK根目录) target/ 目标配置 package/ 软件包 kernel/ 内核源码 out/ 编译输出 分区表 / 内核配置 应用 / 驱动 / 库 全志分支 / 驱动 镜像 / 固件 / 包 device/ 设备树 prebuilt/ 工具链 开发中你最常打交道的三个目录 1. kernel/ —— 写驱动、改内核配置 2. package/ —— 加应用、加第三方库 3. device/ —— 改设备树、配引脚功能 编译完去 out/ 下拿镜像,刷到板子上验证

1.3 开发环境搭建——Ubuntu + Docker

搭建环境这件事,我踩过不少坑。早期我直接在Ubuntu 18.04上装各种依赖,结果换了台电脑或者换了Ubuntu版本,环境就崩了。后来我改用Docker,一劳永逸。

1.3.1 为什么推荐Docker?

  • 环境隔离——不会污染你的宿主机。我见过有人因为装Tina的依赖把系统Python搞坏了,修了两天。
  • 可复现——Dockerfile写好了,团队里任何人拉下来就能编译,不会出现"我这边能编你那边不行"的尴尬。
  • 版本可控——全志官方推荐的Ubuntu版本是18.04或20.04,用Docker镜像固定住,不用担心宿主机升级。

1.3.2 具体步骤

下面是我自己用的Docker环境搭建流程,你照着做就行:

  1. 安装Docker(如果还没装的话)
sudo apt update
sudo apt install docker.io
sudo systemctl enable docker
sudo usermod -aG docker $USER
# 退出终端重新登录,让用户组生效
  1. 拉取Ubuntu 20.04镜像
docker pull ubuntu:20.04
  1. 创建Dockerfile(我习惯放在 ~/tina-docker/ 下)
# Dockerfile
FROM ubuntu:20.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt update && apt install -y \
    build-essential \
    git \
    vim \
    curl \
    wget \
    python3 \
    python3-pip \
    libncurses5-dev \
    u-boot-tools \
    device-tree-compiler \
    swig \
    && rm -rf /var/lib/apt/lists/*

RUN pip3 install pyelftools

WORKDIR /home/tina

CMD ["/bin/bash"]
  1. 构建镜像
cd ~/tina-docker
docker build -t tina-builder:20.04 .
  1. 启动容器并挂载SDK
docker run -it --rm \
    -v /path/to/your/tina-sdk:/home/tina \
    tina-builder:20.04

注意: /path/to/your/tina-sdk 要换成你实际SDK的路径。我建议把SDK放在Linux原生文件系统下(不要放在NTFS或FAT32分区),否则编译时权限和符号链接会出问题。我曾经因为这个折腾了一下午。

1.3.3 验证环境

进到容器里后,先试试能不能编译:

cd /home/tina
source build/envsetup.sh
lunch   # 选择你的板子配置
make menuconfig   # 如果能弹出配置界面,说明环境OK

看到蓝色配置界面弹出来,恭喜你,环境搭好了。

一个小技巧: 第一次编译全量固件会很慢(取决于你的机器,可能半小时到两小时)。我建议第一次先 make -j4 试试,如果报错先解决依赖问题。确认能编过后,后续增量编译就快多了。

1.4 本章小结

这一章我们聊了Tina Linux是什么、SDK里每个目录干什么用、以及怎么用Docker搭一个干净可复现的开发环境。这些东西是后面所有章节的基础。你想想看,如果环境没搭好,后面写驱动、改根文件系统都是空中楼阁。