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的整体认知:
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环境搭建流程,你照着做就行:
- 安装Docker(如果还没装的话)
sudo apt update
sudo apt install docker.io
sudo systemctl enable docker
sudo usermod -aG docker $USER
# 退出终端重新登录,让用户组生效
- 拉取Ubuntu 20.04镜像
docker pull ubuntu:20.04
- 创建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"]
- 构建镜像
cd ~/tina-docker
docker build -t tina-builder:20.04 .
- 启动容器并挂载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搭一个干净可复现的开发环境。这些东西是后面所有章节的基础。你想想看,如果环境没搭好,后面写驱动、改根文件系统都是空中楼阁。