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 Linux 四层架构 应用层 用户应用程序 / QT / LVGL / 阿里云 IoT SDK / MQTT 系统服务层 init / busybox / udev / logd / WiFi管理 / 蓝牙协议栈 内核层 Linux Kernel 4.9/5.4 / 设备驱动 / 文件系统 / 网络协议栈 硬件层 全志 SoC / DDR / NAND Flash / eMMC / 外设接口 Tina 的构建系统基于 buildroot,支持一键裁剪和定制

这四层之间通过标准接口通信。应用层调用系统服务,系统服务通过内核驱动操作硬件。每一层都可以独立裁剪,这也是 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 的背景、架构和开发环境搭建,是后续所有优化的基础。把这些搞扎实了,后面的启动优化、性能调优才能有的放矢。