全志T113 Tina-Linux开发环境搭建:从安装依赖到打包烧录完整教程

全志T113 Tina-Linux开发环境搭建:从安装依赖到打包烧录完整教程

本章内容:接上一章的虚拟机环境,现在开始安装编译依赖、获取Tina-Linux SDK源码、配置交叉编译工具链、编译U-Boot/内核/根文件系统、打包完整镜像、制作SD启动卡并烧录到开发板,最后成功启动系统。每一步都配有实际执行的命令和输出,跟着操作即可完成整套开发环境的搭建。


文章目录

第一部分:解决VMware Tools安装锁问题

bash

复制代码
ubuntu@ubuntu1804:~$ sudo apt install open-vm-tools-desktop
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
ubuntu@ubuntu1804:~$ sudo apt install open-vm-tools-desktop^C
ubuntu@ubuntu1804:~$ sudo reboot

讲解

启动虚拟机后,我们首先需要安装VMware Tools(增强功能),以便支持窗口自适应、剪贴板共享、拖拽文件等功能。但是执行安装命令时遇到了错误:Could not get lock

错误原因 :系统中已经有另一个程序正在使用dpkg包管理器(比如系统后台自动更新)。Ubuntu的包管理是互斥的,同一时间只能有一个进程操作。

解决方法

  1. 检查是哪个进程占用了锁:

    bash

    复制代码
    sudo lsof /var/lib/dpkg/lock-frontend
  2. 杀掉该进程,或耐心等待它完成。

  3. 如果无法解决,最简单的办法是重启虚拟机,重启后系统启动自动更新进程往往不会立即运行。

执行操作 :图中直接执行了sudo reboot重启虚拟机。重启后再次尝试安装即可成功。

安装open-vm-tools-desktop

bash

复制代码
sudo apt update
sudo apt install open-vm-tools-desktop -y

安装后重启虚拟机,VMware Tools就生效了。


第二部分:安装VMware Tools成功

bash

复制代码
ubuntu@ubuntu104:~$ sudo apt install open-vm-tools-desktop
Reading package lists... Done
Building dependency tree
Reading state information... Done

讲解

重启后再次执行安装命令,没有报错,系统正在解析依赖关系。open-vm-tools-desktop是VMware Tools的开源版本,功能与官方Tools基本一致,且免去了每次内核升级后重新编译的麻烦。

安装完成后,可以体验以下功能:

  • 虚拟机窗口自动适配分辨率
  • 主机与虚拟机之间复制粘贴文本
  • 拖拽文件(部分环境需要额外配置)

第三部分:安装Tina-Linux编译依赖(精简版)

bash

复制代码
ubuntu@ubuntu1804:~$ sudo apt-get install -y sed make binutils build-essential
bc wget python cvs git mercurial rsync subversion android-tools-mkbooting vin libssl-dev android-tools-fastboot
Reading package lists... Done
Building dependency tree
Reading state information... Done

gcc g++ bash patch gzip bzip2 perl tar cpio unzip rsync file
libssl-dev android-tools-fastboot

讲解

编译Tina-Linux SDK需要大量依赖包。命令安装的是核心依赖,但还不够完整。我们按分组说明每个依赖的作用:

包名 作用
sed make binutils build-essential 基础构建工具(文本处理、编译)
gcc g++ C/C++编译器
bash patch gzip bzip2 perl tar cpio unzip 脚本解释、补丁、压缩解压
bc 数学运算(内核编译需要)
wget git mercurial subversion cvs 版本控制和下载工具
rsync 文件同步
libssl-dev OpenSSL开发库(很多包需要)
android-tools-fastboot 烧录工具(可选)

更好的做法:使用百问网提供的完整依赖安装命令(见下一)。


第四部分:安装Tina-Linux完整编译依赖

bash

复制代码
ubuntu@ubuntu1004:~$ sudo apt-get install build-essential subversion git libncurses-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 libc6:i386 libstdc++6:i386

讲解

这是更完整的依赖安装命令(图中截断了一部分,我们补充完整)。对于全志Tina-SDK,推荐执行以下命令:

bash

复制代码
sudo apt-get install -y build-essential subversion git libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 libc6:i386 libstdc++6:i386 lib32ncurses5

64位系统兼容32位库 :Tina-SDK的部分工具是32位程序,所以需要安装lib32z1lib32stdc++6libc6:i386等32位兼容库。

验证依赖是否齐全

bash

复制代码
dpkg -l | grep -E "build-essential|git|libncurses|libssl"

第五部分:获取100ASK_T113-Pro板级支持包

bash

复制代码
# 支持100ASK_T113-Pro

配置额外的开发环境

sudo apt-get install build-essential subversion git libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 libc6:i386 libstdc++6:i386 lib32ncurses5 lib32z1 -y

单独获取100ASK T113板级扩展补丁。如果无法访问github获取 https://gitee.com/weidongshan/100ASK_T113-Pro_TinaSDK.git

1. book@ubuntu1804:~$ git clone https://gitee.com/weidongshan/100ASK_T113-Pro_TinaSDK.git
2. book@ubuntu1804:~$ cd 100ASK_T113-Pro_TinaSDK
3. book@ubuntu1804:~/100ASK_T113-Pro_TinaSDK$ git submodule update --init
4. book@ubuntu1804:~/100ASK_T113-Pro_TinaSDK$ cp ./* -rfvd ~/tina-d1-h

讲解

百问网为100ASK_T113-Pro开发板提供了板级扩展补丁,包含了开发板特有的配置文件、设备树、驱动程序等。

步骤解析

  1. 克隆板级支持包

    bash

    复制代码
    git clone https://gitee.com/weidongshan/100ASK_T113-Pro_TinaSDK.git

    使用Gitee镜像(国内访问快),如果你的网络可以访问GitHub,也可以使用GitHub仓库。

  2. 进入目录

    bash

    复制代码
    cd 100ASK_T113-Pro_TinaSDK
  3. 初始化并更新子模块

    bash

    复制代码
    git submodule update --init

    该命令会拉取子模块(如预编译的交叉工具链prebuilt),子模块的仓库地址在.gitmodules文件中定义。

  4. 复制板级文件到SDK目录

    bash

    复制代码
    cp ./* -rfvd ~/tina-d1-h

    这里将板级配置拷贝到~/tina-d1-h目录(这是我们后面要解压的SDK主目录)。-v表示显示详情,-d保持软链接属性。

注意 :步骤4需要先有tina-d1-h目录,后面我们会从网盘获取完整SDK并解压到该目录。


第六部分:获取Tina-Linux SDK源码(官方与网盘)

text

复制代码
# 获取Tina-Linux源码

- 访问全志客户服务中心 https://open.allwinnertech.com/ 获取

## 使用百度网盘获取

- 获取Tina-sdk V2.0源码 百度网盘获取地址链接:https://pan.baidu.com/s/13uK1qDXimmMl9cgKc41tZg?pwd=qcw7 提取码:qcw7

- 压缩包路径在 Tina-SDK_DevelopLearningKits-V1/DongshanNezhaSTU-TinaV2.0-SDK

讲解

全志的Tina-SDK有两种获取方式:

方式一:官方渠道(需要企业邮箱注册)

方式二:百度网盘(个人学习推荐)

  • 链接:https://pan.baidu.com/s/13uK1qDXimmMl9cgKc41tZg?pwd=qcw7
  • 提取码:qcw7
  • 路径:Tina-SDK_DevelopLearningKits-V1/DongshanNezhaSTU-TinaV2.0-SDK

SDK大小约9GB,压缩包被分割成多个.00.01....08结尾的分卷文件,需要全部下载。


第七部分:下载SDK分卷文件

text

复制代码
文件名                    大小        创建日期
tina-d1-h.tar.bz2.00     1G          2022-09-13 14:55
tina-d1-h.tar.bz2.01     1G          2022-09-13 14:55
tina-d1-h.tar.bz2.02     1G          2022-09-13 14:55
tina-d1-h.tar.bz2.03     1G          2022-09-13 14:55
tina-d1-h.tar.bz2.04     1G          2022-09-13 14:55
tina-d1-h.tar.bz2.05     1G          2022-09-13 14:55
tina-d1-h.tar.bz2.06     1G          2022-09-13 14:55
tina-d1-h.tar.bz2.07     1G          2022-09-13 14:55
tina-d1-h.tar.bz2.08     834M        2022-09-13 14:55
README.md                867B

讲解

SDK使用分卷压缩,将一个大文件拆分成多个小文件,方便网盘上传和下载。这些文件是分卷RAR格式 (实际是tar.bz2的分割)。

  • 文件名规律:tina-d1-h.tar.bz2.00.01.......08
  • 总大小:8 × 1GB + 834MB ≈ 9GB
  • 解压后SDK大小约12GB

下载技巧

  • 建议使用百度网盘客户端批量下载
  • 下载到Windows本地,然后复制到虚拟机中
  • 或者直接在虚拟机中使用wget配合网盘直链(较复杂)

第八部分:将SDK分卷文件复制到虚拟机

图片内容 :VMware窗口中显示从Windows复制tina-d1-h.tar.bz2.00等文件到虚拟机的Documents目录。

讲解

将Windows下载的9个分卷文件(.00到.08)复制到虚拟机中。

方法一:拖拽(需安装VMware Tools)

  • 在Windows中选中所有分卷文件
  • 直接拖拽到虚拟机的桌面或Documents文件夹

方法二:共享文件夹

  • VMware菜单:虚拟机 → 设置 → 选项 → 共享文件夹
  • 添加Windows中的下载目录作为共享文件夹
  • 在Ubuntu中访问/mnt/hgfs/目录

方法三:U盘/移动硬盘

  • 将文件拷贝到U盘
  • VMware菜单:虚拟机 → 可移动设备 → 连接U盘

复制完成后,确认文件完整性:应有9个.00.08文件和1个README.md


第九部分:继续复制文件到虚拟机

显示"Copying 9 files to 'Documents'",复制进度条。

讲解

复制9个文件到虚拟机的Documents文件夹。由于总大小约9GB,USB 3.0接口下大约需要2-3分钟。

注意事项

  • 确保虚拟机磁盘有足够空间(至少20GB空闲)

  • 复制过程中不要关闭虚拟机

  • 完成后在Ubuntu中打开终端,进入~/Documents目录确认文件存在:

    bash

    复制代码
    cd ~/Documents
    ls -lh tina-d1-h.tar.bz2.*

第十部分:MD5校验分卷文件

bash

复制代码
ubuntu@ubuntu1804:~$ md5sum tina-d1-h.tar.bz2.*
e755bae00cd76afc3fb276b4e3fd86ba tina-d1-h.tar.bz2.00
cb60ecfdb51c624ff3cbd7b24552866f tina-d1-h.tar.bz2.01
54e56a4cf1cef46ca0a94b85ea1d33a1 tina-d1-h.tar.bz2.02
4988fa0827c0f7af2dc170145e24b26 tina-d1-h.tar.bz2.03
a0463bf8e73db27b5ecafaac593a919 tina-d1-h.tar.bz2.04
a87382ca16a8c12b3a94f1cad99ce77e tina-d1-h.tar.bz2.05
5973530baa3b282108351818641c27fd tina-d1-h.tar.bz2.06
ccd63e1d16534b364a101d2d44416261 tina-d1-h.tar.bz2.07
e0d72713565f4424ea43c07e15a38139 tina-d1-h.tar.bz2.08

讲解

MD5校验用于验证文件完整性:如果某个分卷文件在下载或复制过程中损坏,MD5值会不同,解压时就会失败。

执行步骤

bash

复制代码
cd ~/Documents
md5sum tina-d1-h.tar.bz2.* > md5sum.txt
cat md5sum.txt

对比校验:将输出的MD5值与图中或官方提供的MD5值逐一对比。全部匹配说明文件完整,可以解压。


第十一部分:解压SDK

bash

复制代码
ubuntu@ubuntu1804:~/Documents$ cat tina-d1-h.tar.bz2.0* | tar -jxvf

讲解

这是解压分卷压缩包的正确命令。

命令解析

  • cat tina-d1-h.tar.bz2.0*:将所有分卷文件(.00到.08)按顺序拼接
  • |:管道符,将前一个命令的输出作为后一个命令的输入
  • tar -jxvf
    • -j:使用bzip2解压缩
    • -x:解包(extract)
    • -v:显示详细信息(verbose)
    • -f:指定文件(从标准输入读取)

完整解压命令

bash

复制代码
cd ~/Documents
cat tina-d1-h.tar.bz2.0* | tar -jxvf

解压时间取决于CPU性能,大约5-15分钟。解压后得到tina-d1-h目录(SDK根目录)。

注意 :不要在Windows中使用WinRAR直接解压.00文件,可能导致文件属性丢失。必须在Linux中使用上述命令解压。


第十二部分:查看SDK目录结构

bash

复制代码
ubuntu@ubuntu1804:~/Documents/tina-d1-h$ ls
build/  config/  Config.in  device/  dl/  lichee/  Makefile  package/  prebuilt/  rules.mk*  scripts/  target/  toolchain/  tools/
ubuntu@ubuntu1804:~/Documents/tina-d1-h$ du -h --max-depth=1
4.4G    ./repo
841M    ./package
4.1M    ./target
968K    ./toolchain
1.5M    ./scripts
15M     ./device
3.0G    ./dl
80K     ./config
1.9G    ./prebuilt
488K    ./build
51M     ./tools
1.9G    ./lichee
12G     .

讲解

解压后的SDK目录结构:

目录/文件 作用
build/ 构建系统相关脚本
config/ 全局配置
device/ 设备相关配置(板级文件)
dl/ 下载的源码包缓存(3GB)
lichee/ Linux内核和U-Boot源码(1.9GB)
package/ 软件包定义(841MB,大量第三方库)
prebuilt/ 预编译的工具链(1.9GB)
scripts/ 辅助脚本
target/ 目标系统配置
toolchain/ 工具链相关
tools/ 构建工具
Makefile 顶层Makefile

du -h --max-depth=1显示总大小约12GB 。其中dl目录是下载缓存,lichee包含内核和U-Boot,prebuilt包含工具链。


第十三部分:移动SDK到主目录

bash

复制代码
ubuntu@ubuntu1804:~/Documents/tina-d1-h$ mv tina-d1-h /home/
mv: cannot move 'tina-d1-h' to '/home/tina-d1-h': Permission denied

讲解

尝试将SDK从~/Documents移动到/home/(实际上是/home/),但权限被拒绝。

问题原因/home/目录属于root用户,普通用户不能在/home/下直接创建文件。正确的目标目录应该是用户的主目录/home/ubuntu/(或使用~)。

正确做法

bash

复制代码
# 如果当前在 ~/Documents/tina-d1-h 目录内,先退出到上一级
cd ~/Documents
# 移动整个目录到用户主目录
mv tina-d1-h ~/

或者使用绝对路径:

bash

复制代码
mv /home/ubuntu/Documents/tina-d1-h /home/ubuntu/

移动后验证:

bash

复制代码
ls ~/tina-d1-h

第十四部分:获取板级支持包(完整版)

bash

复制代码
ubuntu@ubuntu1804:~$ git clone https://github.com/DongshanPI/100ASK_T113-Pro_TinaSDK.git
Cloning into '100ASK_T113-Pro_TinaSDK'...
remote: Enumerating objects: 707, done.
remote: Counting objects: 100% (707/707), done.
remote: Compressing objects: 100% (477/477), done.
remote: Total 707 (delta 175), reused 694 (delta 162), pack-reused 0
Receiving objects: 100% (707/707), 2.92 MiB | 7.62 MiB/s, done.
Resolving deltas: 100% (175/175), done.
ubuntu@ubuntu1804:~$ cd 100ASK_T113-Pro_TinaSDK/
ubuntu@ubuntu1804:~/100ASK_T113-Pro_TinaSDK$ ls
device  lichee  package  prebuilt  README.md  target
ubuntu@ubuntu1804:~/100ASK_T113-Pro_TinaSDK$ git submodule update --init
Submodule 'prebuilt' ('https://e.coding.net/weldongshan/100ask_t113-pro/tina_sdk_toolchain.git') registered for path 'prebuilt'
Cloning into '/home/ubuntu/100ASK_T113-Pro_TinaSDK/prebuilt'...
Submodule path 'prebuilt': checked out '18d6d58342216cd5d759dce5c15c5406923ca3'

讲解

从GitHub克隆百问网的板级支持包(与之前Gitee版本相同)。克隆后进入目录查看,包含以下关键子目录:

  • device/:板级设备配置
  • lichee/:内核和U-Boot的补丁/配置
  • package/:额外的软件包定义
  • prebuilt/:预编译工具链(子模块)

git submodule update --init拉取子模块:这里拉取了prebuilt子模块,里面包含了适用于T113的交叉编译工具链。

子模块克隆完成 :提示已检出版本18d6d58...


第十五部分:查看工具链目录

bash

复制代码
ubuntu@ubuntu1804:~/100ASK_T113-Pro_TinaSDK/prebuilt/gcc/linux-x86/arm$ ls
arm-toolchain.txt    toolchain-sunxi-glibc    toolchain-sunxi-musl
ubuntu@ubuntu1804:~/100ASK_T113-Pro_TinaSDK/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin$ ls
arm-OpenWrt-linux-muslgnueabi-addr2line
arm-OpenWrt-linux-muslgnueabi-ar
arm-OpenWrt-linux-muslgnueabi-as
arm-OpenWrt-linux-muslgnueabi-c++
arm-OpenWrt-linux-muslgnueabi-gcc
arm-OpenWrt-linux-muslgnueabi-gcc-6.4.1
arm-OpenWrt-linux-muslgnueabi-ld
... (省略部分输出)

讲解

百问网板级支持包中的prebuilt子模块提供了两种工具链:

  • toolchain-sunxi-glibc:使用glibc库
  • toolchain-sunxi-musl:使用musl库(更轻量)

进入toolchain-sunxi-musl/toolchain/bin/可以看到所有交叉编译工具,命名前缀为arm-OpenWrt-linux-muslgnueabi-

主要工具

  • gcc:C编译器
  • g++:C++编译器
  • ld:链接器
  • ar:静态库归档工具
  • objdump:查看目标文件信息
  • strip:去除调试符号

注意 :这个工具链已经包含在板级支持包中,后面编译SDK时,source build/envsetup.sh会自动配置使用它,无需手动设置PATH。


第十六部分:复制板级文件到SDK

bash

复制代码
ubuntu@ubuntu1804:~/100ASK_T113-Pro_TinaSDK$ cp ./* -rfvd ~/tina-d1-h

讲解

将板级支持包中的所有文件复制到SDK目录(~/tina-d1-h)。

命令解析

  • cp ./*:复制当前目录下所有文件和子目录
  • -r:递归复制子目录
  • -f:强制覆盖(不询问)
  • -v:显示详细信息
  • -d:保持软链接属性
  • ~/tina-d1-h:目标目录(SDK根目录)

复制完成后 ,SDK目录中会多出板级配置文件,主要是device/config/chips/t113/下的100ask相关配置。


第十七部分:同步并确认SDK位置

bash

复制代码
ubuntu@ubuntu1804:~/100ASK_T113-Pro_TinaSDK$ sync
ubuntu@ubuntu1804:~/100ASK_T113-Pro_TinaSDK$ cd ..
ubuntu@ubuntu1804:~$ ls
100ASK_T113-Pro_TinaSDK  Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  tina-d1-h  Videos

讲解

  • sync:将缓存数据写入磁盘,确保文件复制完全
  • cd ..:返回用户主目录
  • ls:显示主目录内容

确认主目录中同时存在:

  • 100ASK_T113-Pro_TinaSDK/:板级支持包(已不再需要,只是备份)
  • tina-d1-h/:完整的SDK目录(已包含板级配置)

下一步:进入SDK目录开始编译。


第十八部分:进入SDK目录并验证文件

bash

复制代码
ubuntu@ubuntu1804:~$ cd tina-d1-h/
ubuntu@ubuntu1804:~/tina-d1-h$ ls
build  config  Config.in  device  dl  lichee  Makefile  package  prebuilt  README.md  rules.mk  scripts  target  toolchain  tools

讲解

进入SDK目录并列出内容。注意板级支持包复制后,device/目录下应该包含了t113-100ask的配置。

关键目录确认

bash

复制代码
ls device/config/chips/t113/configs/100ask/

应该能看到内核配置(linux-5.4)和U-Boot配置等文件。


第十九部分:配置编译环境

bash

复制代码
ubuntu@ubuntu1804:~/tina-d1-h$ source build/envsetup.sh
Setup env done! Please run lunch next.
ubuntu@ubuntu1804:~/tina-d1-h$ lunch

You're building on Linux

Lunch menu... pick a combo:
  1. d1-h_nezha_min-tina
  2. d1-h_nezha-tina
  3. d1s_nezha-tina
  4. t113_100ask-tina

Which would you like?: 4
===========================================
TINA_BUILD_TOP=/home/ubuntu/tina-d1-h
TINA_TARGET_ARCH=arm
TARGET_PRODUCT=t113_100ask
TARGET_PLATFORM=t113
TARGET_BOARD=t113-100ask
TARGET_PLAN=100ask
TARGET_BUILD_VARIANT=tina
TARGET_BUILD_TYPE=release
TARGET_KERNEL_VERSION=5.4
TARGET_UBOOT=u-boot-2018
TARGET_CHIP=sun8iw20p1
===========================================

讲解

这是Tina-SDK构建系统的标准配置步骤。

第一步:加载环境变量

bash

复制代码
source build/envsetup.sh

这个脚本定义了编译所需的环境变量和函数,包括:

  • 交叉工具链路径
  • 编译命令别名(如m表示make)
  • 辅助函数(如lunchextract_bsp

第二步:选择目标平台

bash

复制代码
lunch

显示菜单,选择你开发板对应的配置。这里选择第4项:t113_100ask-tina

输出信息解读

变量 含义
TINA_BUILD_TOP /home/ubuntu/tina-d1-h SDK根目录
TARGET_PRODUCT t113_100ask 产品名称
TARGET_PLATFORM t113 芯片平台
TARGET_BOARD t113-100ask 板级名称
TARGET_KERNEL_VERSION 5.4 Linux内核版本
TARGET_UBOOT u-boot-2018 U-Boot版本
TARGET_CHIP sun8iw20p1 芯片型号(T113代号)

第二十部分:开始编译

bash

复制代码
ubuntu@ubuntu1804:~/tina-d1-h$ make -j6
===This's Tina environment.===
[1] 20823
ubuntu@ubuntu1804:~/tina-d1-h$ make -j6
t113_100ask t113 t113-100ask
build_boot platform:sun8iw20p1 o_option:sql
Prepare toolchain ...

讲解

执行编译命令:

bash

复制代码
make -j6

-j6表示并行使用6个CPU核心编译,可以显著缩短编译时间。

编译过程(按顺序):

  1. 准备工具链:配置交叉编译器
  2. 编译U-Boot :从lichee/brandy/u-boot-2018编译
  3. 编译Linux内核 :从lichee/linux-5.4编译,生成zImage和设备树
  4. 编译根文件系统:使用Buildroot构建,编译所有选中的软件包
  5. 打包镜像:将各部分组合成完整固件

编译时间 :首次编译需要下载源码包到dl/目录,完整编译约30-60分钟(取决于CPU性能和网络速度)。


第二十一部分:编译完成

bash

复制代码
make[2]: Leaving directory '/home/ubuntu/tina-d1-h'
export MAKEFLAGS=;make -w -r package/index
make[2]: Entering directory '/home/ubuntu/tina-d1-h'
Generating package index...
Signing key has not been configured
make[2]: Leaving directory '/home/ubuntu/tina-d1-h'
make[1]: Leaving directory '/home/ubuntu/tina-d1-h'

#### make completed successfully (34:57 (mm:ss)) ####

讲解

编译成功的关键标志:make completed successfully,总耗时34分57秒

编译产物位置out/t113-100ask/目录下会生成:

  • boot.img:U-Boot镜像
  • rootfs.img:根文件系统镜像
  • zImage:内核镜像
  • tina_t113-100ask_uart3.img完整打包镜像(用于烧录)

注意Signing key has not been configured只是提示签名密钥未配置,不影响编译。


第二十二部分:打包固件

bash

复制代码
ubuntu@ubuntu1804:~/tina-d1-h$ pack
--===========
PACK_CHIP    sun8iw20p1
PACK_PLATFORM  tina
PACK_BOARD    t113-100ask
PACK_KERN
PACK_DEBUG    uart3
PACK_SIG    none
PACK_SECURE   none
PACK_MODE    normal
PACK_FUNC    android
PACK_PROGRAMMER none
PACK_TAR_IMAGE none
PACK_TOPDR /home/ubuntu/tina-d1-h
--===========

No kernel param, parse it from t113
copying tools file
copying configs file
storage_type value is 5
rm /home/ubuntu/tina-d1-h/out/t113-100ask/image/sys_partition_nor.fex
rm /home/ubuntu/tina-d1-h/out/t113-100ask/image/image_nor.cfg
copying boot resource

讲解

make完成后,执行pack命令将各种镜像打包成一个完整的烧录文件。

pack命令执行的步骤

  1. 读取芯片配置(sun8iw20p1,即T113)
  2. 读取板级配置(t113-100ask
  3. 配置调试串口(uart3,T113的调试串口是UART3)
  4. 拷贝工具和配置文件
  5. 打包boot资源
  6. 生成最终镜像

第二十三部分:打包完成并查看镜像

bash

复制代码
/home/ubuntu/tina-d1-h/out/t113-100ask/tina_t113-100ask_uart3.img

pack finish
ubuntu@ubuntu1804:~/tina-d1-h$ cd /home/ubuntu/tina-d1-h/out/t113-100ask/
ubuntu@ubuntu1804:~/tina-d1-h/out/t113-100ask$ ls
boot.img    image    packages    sha256sums    t113-100ask-boot.img  t113-100ask-zImage
compile_dir   md5sums   rootfs.img   staging_dir    t113-100ask-uImage    tina_t113-100ask_uart3.img
ubuntu@ubuntu1804:~/tina-d1-h/out/t113-100ask$ cp tina_t113-100ask_uart3.img ~/Downloads/

讲解

pack完成后,在out/t113-100ask/目录下生成tina_t113-100ask_uart3.img,这就是我们要烧录到SD卡的系统镜像。

目录中的关键文件

文件 说明
tina_t113-100ask_uart3.img 完整烧录镜像(最重要)
boot.img U-Boot镜像
rootfs.img 根文件系统镜像
t113-100ask-uImage 内核镜像(u-boot格式)
t113-100ask-zImage 内核镜像(zImage格式)
t113-100ask-boot.img 启动分区镜像

复制到Downloads

bash

复制代码
cp tina_t113-100ask_uart3.img ~/Downloads/

将镜像复制到Downloads目录,方便后续拷贝到Windows系统进行烧录。


第二十四部分:开发板启动成功验证

bash

复制代码
root@Tinalinux:/# uname -a
Linux Tinalinux 5.4.61 #1 SMP PREEMPT Sat Mar 4 07:43:00 UTC 2023 armv7l GNU/Linux
root@Tinalinux:/# reboot

讲解

将烧录好镜像的SD卡插入开发板,上电启动后,通过串口终端登录系统。

uname -a输出解读

  • Linux Tinalinux:主机名
  • 5.4.61:Linux内核版本
  • #1 SMP PREEMPT:支持多核、可抢占内核
  • armv7l:ARMv7架构(32位)
  • GNU/Linux:操作系统类型

reboot:重启命令,可以重新启动开发板。


第二十五部分:U-Boot环境变量(查看)

text

复制代码
Hit any key to stop autoboot: 0
=> print
aw-ubi-spinand.ubootblks=24
boot_dsp0=sunxi_flash read 45000000 ${dsp0_partition};bootr 45000000 0 0
boot_fastboot=fastboot
boot_normal=sunxi_flash read 45000000 ${boot_partition};bootm 45000000
bootcmd=run setargs_nand_ubi boot_normal
bootdelay=1
cma=8M
console=ttyS3,115200
dsp0_partition=dsp0
earlyprintk=sunxi-uart,0x02500C00
init=/pseudo_init
loglevel=8
mmc_root=/dev/mmcblk0p5
nand_root=/dev/ubiblock0_5
root_partition=rootfs
rootfs_type=squashfs
setargs_mmc=setenv bootargs earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${mmc_root} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} specialstr=${specialstr} gpt=1
setargs_nand=setenv bootargs ubi.mtd=${mtd_name} ubiblock=0,${root_partition} earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${nand_root} rootfstype=${rootfs_type} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} specialstr=${specialstr} gpt=1

讲解

上电后在U-Boot倒计时(bootdelay=1秒)内按任意键,进入U-Boot命令行,输入print查看环境变量。

关键环境变量

变量 含义
bootdelay 1 自动启动延迟1秒
console ttyS3,115200 调试串口为UART3,波特率115200
bootcmd run setargs_nand_ubi boot_normal 默认启动命令
setargs_mmc ... SD卡启动内核参数
setargs_nand ... NAND闪存启动参数
init /pseudo_init 第一个用户态进程(Tina定制)
rootfs_type squashfs 根文件系统类型(只读压缩)

第二十六部分:U-Boot环境变量(启动参数详情)

text

复制代码
setargs_mmc=setenv bootargs earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${mmc_root} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac_addr} wifi_mac=${wifi_mac} bt_mac=${bt_mac} specialstr=${specialstr} gpt=1
setargs_nand=setenv bootargs ubi.mtd=${mtd_name} ubiblock=0,${root_partition} earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${nand_root} rootfstype=${rootfs_type} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac_addr} wifi_mac=${wifi_mac} bt_mac=${bt_mac} specialstr=${specialstr} gpt=1

讲解

这两个环境变量定义了传递给Linux内核的启动参数(bootargs)。

SD卡启动参数(setargs_mmc)

  • root=${mmc_root}/dev/mmcblk0p5(第五分区)
  • console=ttyS3,115200 → 串口3作为控制台

NAND启动参数(setargs_nand)

  • ubi.mtd=sys → 使用UBI文件系统
  • root=/dev/ubiblock0_5 → NAND闪存的第5个UBI卷
  • rootfstype=squashfs → 只读压缩文件系统

第二十七部分:BOOT0启动日志

text

复制代码
28 HELLO! BOOT0 is starting!
31 BOOT0 commit : 88480af-dirty
34 set pll start
40 periph0 has been enabled
43 set pll end
45 [pmu]: bus read error
47 board init ok
49 rtc[2] value = 0x5aa5a55a
52 eraly jump fel
767 fes begin commit:88480af-dirty
770 set pll start
776 periph0 has been enabled
779 set pll end
781 [pmu]: bus read error
783 board init ok
785 begin to init dram
787 ZQ value = 0x2f:
789 get_pmu_exist() = -1
792 ddr_efuse_type: 0xa
794 trefi:7.8ms
797 [AUTO DEBUG] single rank and full DQ!
801 ddr_efuse_type: 0xa
803 trefi:7.8ms
805 [AUTO DEBUG] rank 0 row = 13
807 [AUTO DEBUG] rank 0 bank = 8
809 [AUTO DEBUG] rank 0 page size = 2 KB
811 DRAM BOOT DRIVE INFO: V0.33
813 DRAM CLK = 936 MHz
815 DRAM Type = 3 (2:DDR2,3:DDR3)
817 DRAMC read ODT off.
819 DRAM ODT value: 0x42.
821 ddr_efuse_type: 0xa
823 DRAM SIZE = 128 M
825 dram_tpr4:0x0
827 PLL_DDR_CTRL_REG:0xf8004d00
829 DRAM_CLK_REG:0xc0000000
831 [TIMING DEBUG] MR2= 0x20
833 DRAM simple test OK.
835 rtc standby flag is 0x0, super standby flag is 0x0
837 init dram ok

讲解

这是开发板上电后,芯片内部BOOT0(一级引导程序)的启动日志,由串口输出。

关键信息

  • BOOT0 commit : 88480af-dirty:BOOT0版本号
  • DRAM CLK = 936 MHz:DDR内存时钟频率
  • DRAM Type = 3:DDR3内存
  • DRAM SIZE = 128 M:检测到128MB DDR3内存
  • init dram ok:内存初始化成功

如果这里报错,说明DDR配置有问题(通常是时序参数不对)。成功说明U-Boot的内存初始化配置正确。


第二十八部分:SD卡格式化工具

SD Card Formatter界面,显示选择E:\ - Volumn(29.72GB SD卡),选择"Quick format"。

讲解

在烧录系统之前,需要先格式化SD卡,清除原有分区和数据。

推荐工具:SD Card Formatter(官方工具)

操作步骤

  1. 将SD卡插入电脑读卡器
  2. 打开SD Card Formatter
  3. 在"Select card"中选择你的SD卡(注意不要选错,确认容量)
  4. "Formatting options"选择"Quick format"(快速格式化)
  5. 点击"Format"按钮

第二十九部分:确认格式化

弹出确认对话框"Formatting will erase all data on this card. Do you want to continue?"

讲解

点击Format后会弹出警告框,确认是否格式化。

注意

  • 格式化会永久删除SD卡上的所有数据
  • 确认选择的盘符正确后,点击"Yes"或"确定"继续

格式化完成后,SD卡处于"干净"状态,可以烧录系统镜像。


第三十部分:PhoenixCard烧录工具


text

复制代码
# PhoenixCard V4.2.8

组件
C:\Users\lveh\Desktop\tina_t113-100ask_uart3.img

制作卡的种类
- [ ] 量产卡
- [x] 启动卡
- [ ] 烧写卡
- [ ] 恢复卡
- [ ] 刷新盘符

列表(请确保插入需要烧写的卡,否则其他移动存储设备)

| 选择 | 盘符 | 容量 | 状态 |
|---|---|---|---|
| ✔ | 1 | 30436M | |

讲解

全志芯片的专用烧录工具:PhoenixCard(Windows版)。

获取方式

  • 百度网盘中通常包含(路径:Tina-SDK_DevTools/
  • 或从全志客户服务中心下载

参数说明

  • 组件 :选择我们编译生成的镜像文件(tina_t113-100ask_uart3.img
  • 制作卡的种类 :选择"启动卡"(Startup Card)
    • 启动卡:直接从SD卡启动系统
    • 量产卡:批量烧录到eMMC
    • 烧写卡:其他用途
  • 选择盘符:勾选你的SD卡

第三十一部分:PhoenixCard烧录过程

text

复制代码
输出信息

Message
- 正在格式化卡...
- 开始烧写...
- [MBR] 写入分区表完成
- [MBR] 写入分区表完成
- [boot-resource] 写入完成
- [env] 写入完成
- [env-redund] 写入完成

讲解

点击"烧录"按钮后,PhoenixCard开始制作启动卡。

烧录步骤

  1. 格式化SD卡
  2. 写入MBR分区表
  3. 写入boot-resource分区(启动资源)
  4. 写入env分区(U-Boot环境变量)
  5. 写入env-redund分区(环境变量备份)
  6. 写入boot分区(U-Boot镜像)
  7. 写入rootfs分区(根文件系统)
  8. 写入private等数据分区

第三十二部分:PhoenixCard烧录完成

text

复制代码
输出信息

Message
I: [boot]烧写完成  
I: [rootfs]烧写完成  
I: [DATA File]烧写完成  
I: magic完成  
I: 烧写结束...  
找到盘符:1  
找到盘符:1  

讲解

所有分区烧录完成,显示"烧写结束..."。

烧录完成后

  1. 在Windows中"安全弹出"SD卡
  2. 将SD卡插入开发板的SD卡槽
  3. 设置开发板从SD卡启动(通常通过拨码开关或跳线)
  4. 上电启动系统

面试官提问环节

第1问:Tina-SDK编译前为什么要执行source build/envsetup.shlunch

参考答案
source build/envsetup.sh加载构建系统环境变量和辅助函数(如lunchmpack等)。lunch用于选择目标产品和配置(如t113_100ask-tina),它会设置TARGET_PRODUCTTARGET_BOARD等变量,后续编译流程根据这些变量决定使用哪套配置文件和设备树。


第2问:SDK解压时为什么用cat xxx.0* | tar -jxvf而不是直接tar -jxvf tina-d1-h.tar.bz2.00

参考答案

因为SDK被分割成多个分卷文件(.00到.08),每个分卷只是完整文件的一部分。cat命令将所有分卷按顺序拼接,通过管道传递给tar处理,相当于恢复成完整文件再解压。直接对单个分卷执行tar会报错,因为是无效的压缩文件。


第3问:编译完成后执行pack命令的作用是什么?

参考答案
pack命令将编译生成的各个组件(U-Boot、内核、根文件系统等)按照芯片特定的分区表格式打包成一个完整的烧录镜像(.img文件)。make只是编译出分散的boot.imgrootfs.img等,pack会进行校验、填充、签名(可选),最终生成可直接被PhoenixCard或其它烧录工具识别的固件文件。


第4问:U-Boot环境变量中bootcmdbootargs分别是什么作用?

参考答案

  • bootcmd:U-Boot自动启动时执行的命令,通常包含run setargs_nand boot_normal这样的指令,决定从哪个介质(NAND/SD卡)启动。
  • bootargs:传递给Linux内核的启动参数,告诉内核根文件系统在哪里(root=/dev/xxx)、控制台是哪个串口(console=ttyS3)、内存分配(cma=8M)等。内核解析这些参数完成初始化。

第5问:如果编译失败,如何清理环境重新编译?

参考答案

bash

复制代码
# 清理编译产物
make clean

# 更彻底的清理(删除out目录)
make distclean

# 或直接删除out目录
rm -rf out/

# 重新配置环境
source build/envsetup.sh
lunch  # 选择配置
make -j6

如果需要完全重新下载所有源码包:

bash

复制代码
rm -rf dl/  # 删除下载缓存
make -j6

结束语:恭喜你完成了从虚拟机安装到系统烧录的全过程!至此,你已经拥有了一套完整可用的全志T113 Tina-Linux开发环境。后续就可以在SDK中添加自己的应用程序、修改内核驱动、定制根文件系统,打造属于你自己的嵌入式Linux产品。加油

相关推荐
yugi9878385 小时前
Linux下58mm热敏打印机驱动安装与配置指南
linux·运维·服务器
运维老郭5 小时前
K8s故障排查:一条分层排查路径解决99%线上问题
运维·云原生·kubernetes
AC赳赳老秦5 小时前
项目闭环管理:用 OpenClaw 对接 Jira / 禅道,实现需求 - 任务 - 进度 - 验收全流程自动化
运维·人工智能·python·自动化·devops·jira·openclaw
遇见火星5 小时前
centos7和centos8设置本地镜像为yum安装源的方法
linux·运维·服务器
piaopiaolanghua5 小时前
[Ai问答] Docker是否支持跨架构镜像,譬如ARM/X86
linux·运维·服务器
Elastic 中国社区官方博客5 小时前
通过 Elastic MCP Server 将 Cursor 连接到生产日志
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索·mcp
努力努力再努力FFF5 小时前
运维工程师想学习AI来提升系统自动化水平,该怎么切入?
运维·人工智能·学习
木木_王5 小时前
嵌入式Linux学习 | 数据结构(Day06)全解:线性表 + 栈队列 + 静态库 / 动态库(原理 + 代码 + 编译实战 + 易错点)
linux·数据结构·笔记·学习
howareyou235 小时前
Linux中用户态的函数是如何通过系统调用进入内核态的(二)
linux·服务器·linux系统调用