1. Tina Linux 概述与环境搭建

做嵌入式开发这么多年,我接触过不少 Linux 系统。Tina Linux 给我的第一印象是——它真的很「全志」。说白了,这就是全志科技基于 OpenWrt 深度定制的一套嵌入式 Linux 系统。专门为他们的 SoC 芯片服务,比如 F1C100s、V3s、R16、T113 这些。

你可能会问,为什么不用标准的 Ubuntu 或者 Buildroot?嗯,这里有个关键点。Tina Linux 把 Wi-Fi 驱动、蓝牙协议栈、音视频编解码库、OTA 升级这些嵌入式常用组件都提前集成好了。我刚开始用的时候,最直观的感受就是:不用再像以前那样一个个去移植驱动了。

Tina Linux 核心定位:面向全志智能硬件平台的嵌入式 Linux 发行版,基于 OpenWrt 分支,支持 buildroot + openwrt 双套构建系统。

1.1 开发环境搭建

环境搭建这块,我踩过不少坑。先说说我的建议。

1.1.1 虚拟机配置

我个人习惯用 VMware Workstation,Ubuntu 18.04 或 20.04 都行。别用太新的版本,比如 Ubuntu 22.04 的 GCC 版本太高,编译 Tina 时会报错。

配置项 建议值 备注
CPU 核心数 4 核以上 编译时全核跑满
内存 8 GB 以上 16 GB 更稳
硬盘 120 GB 以上 SDK 解压后约 30 GB,编译产物另占 20+ GB
网络 桥接模式 方便下载源码包

注意:硬盘空间一定要留够。我曾经在 80 GB 的虚拟机上编译到一半,磁盘满了,整个编译中断。重新来一遍,白白浪费了两个小时。

1.1.2 SDK 获取与编译

SDK 一般从全志官方或者方案商那里获取。拿到的是一个压缩包,比如 tina-v3s-xxx.tar.gz。

解压和编译的步骤,我整理了一下:

  1. 解压 SDK:tar -xzf tina-v3s-xxx.tar.gz
  2. 进入目录:cd tina-v3s
  3. 配置环境:source build/envsetup.sh
  4. 选择方案:lunch,然后选择对应的板级配置
  5. 开始编译:make -j4(根据你的 CPU 核心数调整)

我第一次编译的时候,直接用了 make -j8,结果虚拟机直接卡死。后来改成 -j4 就稳了。你想想看,编译过程中 CPU 占用率飙到 100%,内存也吃紧,还是保守一点好。

小技巧:编译时加上 V=s 参数(如 make -j4 V=s),可以看到详细的编译日志。遇到错误时,这个参数能帮你快速定位问题。

1.1.3 系统烧录与启动

编译完成后,在 out/ 目录下会生成烧录镜像。常见的有 .img 文件(整包烧录)和 .fex 文件(分区烧录)。

烧录工具方面,全志官方提供的是 PhoenixCard(Windows 下用)和 PhoenixSuit。我个人更习惯用 PhoenixCard,操作简单:

  • 插入 TF 卡,打开 PhoenixCard
  • 选择镜像文件,点击「烧录」
  • 烧录完成后,把卡插到板子上,上电启动

启动时,串口输出会打印 Uboot 和内核的启动信息。如果看到 Starting kernel ... 之后卡住了,别慌。我遇到过好几次,大多是设备树配置不对,或者根文件系统挂载失败。

避坑指南:我曾经烧录时选错了卡,把电脑的硬盘给格式化了……嗯,从那以后我每次烧录前都会再三确认盘符。你也一定要看清楚,别选成 /dev/sda。

1.2 Tina Linux 整体架构

为了让你更直观地理解 Tina Linux 的组成,我画了一张架构图。

Tina Linux 系统架构 应用层 用户程序 / QT / LVGL / 业务逻辑 系统服务层 Wi-Fi / 蓝牙 / 音频 / 视频 / OTA / 传感器 Linux 内核层 设备驱动 / 文件系统 / 网络协议栈 / 内存管理 硬件层 全志 SoC / 外设 / 传感器 / 存储 / 显示 图:Tina Linux 四层架构,从上到下依次为应用层、系统服务层、内核层、硬件层

这张图其实反映了 Tina Linux 的设计思路。它不像通用 Linux 那样「大而全」,而是更注重「小而精」。每一层都做了裁剪和优化,目的就是让系统在资源有限的嵌入式设备上跑得稳、跑得快。

1.3 开发调试工具链

环境搭好了,接下来就是调试。Tina Linux 自带了一些调试工具,我常用的有:

  • 串口终端:最基础的调试手段,看内核打印、应用程序日志
  • adb:全志平台支持 adb 调试,方便传文件和执行命令
  • strace:跟踪系统调用,定位应用程序卡死问题
  • top / ps:查看进程状态和 CPU 占用
  • dmesg:查看内核环形缓冲区,驱动调试必备

我的习惯:调试时我会同时开三个终端——一个串口看内核日志,一个 adb shell 执行命令,还有一个本地终端用来编译和修改代码。这样效率最高。

好了,环境搭建这部分就到这里。记住一句话:环境搭好了,后面的调试工作才能顺利展开。别嫌麻烦,一步到位最省时间。