1. Tina Linux 概述:背景、架构与开发环境搭建
大家好,我是这次课程的主讲。做了这么多年嵌入式Linux,特别是全志平台的优化工作,Tina Linux 可以说是我最熟悉的系统之一了。今天咱们先聊聊它的来龙去脉、整体骨架,以及怎么把开发环境搭起来。
说实话,我第一次接触 Tina Linux 是在一个智能家居项目上。客户要求启动时间控制在 3 秒以内,硬件资源又有限。当时我就在想,这玩意儿到底能不能行?后来深入用下来才发现,Tina 的轻量化和定制能力确实有两把刷子。
1.1 Tina Linux 背景
Tina Linux 是全志科技基于 Linux 内核深度裁剪、定制的嵌入式操作系统。它主要面向 IoT、智能家居、车载、工业控制等资源受限的场景。
为什么要搞这么一套东西?说白了,标准 Linux 发行版对于 64MB 内存、16MB Flash 的设备来说太臃肿了。Tina 的目标就是:让 Linux 在低配硬件上也能跑得溜。
核心特点:
- 基于 Linux 4.9 / 5.4 LTS 内核,长期维护
- 使用 buildroot 构建系统,极致精简
- 支持全志全系列 SoC(V系列、R系列、F系列等)
- 提供完善的 SDK 和文档支持
- 内置 Tina 专属的启动优化框架
我在项目中遇到过不少团队,拿着标准 Ubuntu 就往嵌入式板子上怼,结果发现启动要 30 秒,内存占用 200MB+。换到 Tina 之后,同样的硬件,启动时间压到了 5 秒以内。这就是针对性优化的价值。
1.2 Tina Linux 架构
咱们来看看 Tina 的整体架构。我习惯把它分成四层,每一层都有明确的职责。
这四层之间通过标准接口通信。应用层调用系统服务,系统服务通过内核驱动操作硬件。每一层都可以独立裁剪,这也是 Tina 灵活性的来源。
1.2.1 构建系统
Tina 使用 buildroot 作为构建系统。你想想看,buildroot 最大的好处是什么?一次配置,到处编译。它自动处理交叉编译工具链、库依赖、文件系统打包。
我记得第一次用 Tina 时,最让我惊讶的是它的 menuconfig 配置界面。跟内核配置一样,但粒度更细。你可以选择要不要 WiFi、要不要蓝牙、要不要 QT 支持。选完之后,make 一下,整个固件就出来了。
小提示: Tina 的构建系统支持 make kernel_menuconfig 单独配置内核,make menuconfig 配置整个系统。这两个入口要分清,我刚开始就搞混过。
1.2.2 文件系统布局
Tina 默认使用 squashfs 作为根文件系统,配合 overlayfs 实现可写分区。这样做的好处是:只读根分区节省空间,overlay 层保存用户数据。
| 分区 | 文件系统 | 用途 |
|---|---|---|
| boot | FAT32 | 存放 u-boot、内核、设备树 |
| rootfs | squashfs | 只读根文件系统,存放系统程序 |
| overlay | ext4 / ubifs | 可写分区,保存配置和用户数据 |
| data | ext4 | 用户数据分区,日志、数据库等 |
这种分区方案在启动优化上很有优势。squashfs 的压缩率高,读取速度快,而且只读特性保证了系统完整性。我曾经在一个项目中,把 rootfs 从 32MB 压到了 8MB,启动时间直接少了 1.5 秒。
1.3 Tina Linux 开发环境搭建
好了,理论说完了,咱们来点实际的。怎么把开发环境搭起来?
1.3.1 硬件准备
你需要一块全志的开发板。我个人推荐用 V853 或者 R329,这两款芯片性能适中,资料也全。当然,如果你手头有其他的,比如 F1C200s 或者 V3s,也完全没问题。
- 开发板 x1
- USB 转 TTL 串口模块(3.3V 电平)
- TF 卡(8GB 以上,Class 10)
- 5V/2A 电源适配器
- 网线(用于 NFS 调试)
注意: 串口模块一定要选 3.3V 的,5V 的会烧板子。我刚开始做的时候就用错过,还好板子有保护电路,不然就废了。
1.3.2 软件环境
推荐使用 Ubuntu 20.04 或 22.04 LTS 作为开发主机。Windows 用户可以用 WSL2 或者虚拟机。
安装必要的依赖包:
sudo apt update
sudo apt install -y build-essential git wget unzip python3 python3-pip \
libncurses5-dev libssl-dev flex bison u-boot-tools \
device-tree-compiler bc cpio rsync file
然后下载 Tina SDK。全志官方提供了完整的 SDK 包,包含 buildroot、内核源码、工具链。
# 以 V853 为例
wget https://sdk.allwinnertech.com/package/tina-v853-linux-5.4.tar.gz
tar -xzf tina-v853-linux-5.4.tar.gz
cd tina-v853
1.3.3 首次编译
进入 SDK 目录后,先配置目标平台:
source build/envsetup.sh
lunch
你会看到一系列平台选项。选择对应的开发板型号,比如 v853_linux。
然后开始编译:
make -j$(nproc)
第一次编译会比较慢,因为要下载工具链和编译所有源码。我的经验是,i7 处理器、16GB 内存的机器,大概需要 30-40 分钟。
编译完成后,你会得到以下文件:
out/v853_linux/boot.img— 内核镜像out/v853_linux/rootfs.squashfs— 根文件系统out/v853_linux/tina_v853_linux_uart0.img— 完整固件
1.3.4 烧录与启动
把固件烧录到 TF 卡:
sudo dd if=out/v853_linux/tina_v853_linux_uart0.img of=/dev/sdX bs=1M status=progress
sync
注意 /dev/sdX 是你的 TF 卡设备名,千万别写错了。我建议先用 lsblk 确认一下。
插卡、上电、连接串口(波特率 115200),你会看到 u-boot 启动信息,然后是内核解压,最后进入 Tina 的 shell。
U-Boot 2018.05 (Jan 10 2024 - 15:30:00 +0800) Allwinner Technology
...
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.4.61
...
[ 2.345678] VFS: Mounted root (squashfs filesystem) readonly on device 31:3.
[ 2.456789] Freeing unused kernel memory: 1024K
[ 2.567890] Run /sbin/init as init process
Tina Linux (Allwinner) / #
看到这个提示符,说明你的 Tina 环境已经跑起来了。
1.4 开发环境验证
进系统之后,我习惯先跑几个命令确认环境正常:
# 查看内核版本
uname -a
# 查看内存信息
free -m
# 查看文件系统挂载情况
mount
# 查看 CPU 信息
cat /proc/cpuinfo
如果这些都能正常输出,恭喜你,开发环境搭建完成。
调试小技巧: 我建议在开发阶段使用 NFS 根文件系统。这样修改代码后不用重新烧录,直接重启就能生效。具体配置方法我们会在后面的章节详细讲。
好了,第一章的内容就到这里。Tina 的背景、架构和开发环境搭建,是后续所有优化的基础。把这些搞扎实了,后面的启动优化、性能调优才能有的放矢。