全志T113 Tina-Linux开发环境搭建:从安装依赖到打包烧录完整教程
本章内容:接上一章的虚拟机环境,现在开始安装编译依赖、获取Tina-Linux SDK源码、配置交叉编译工具链、编译U-Boot/内核/根文件系统、打包完整镜像、制作SD启动卡并烧录到开发板,最后成功启动系统。每一步都配有实际执行的命令和输出,跟着操作即可完成整套开发环境的搭建。
文章目录
-
- [全志T113 Tina-Linux开发环境搭建:从安装依赖到打包烧录完整教程](#全志T113 Tina-Linux开发环境搭建:从安装依赖到打包烧录完整教程)
- [第一部分:解决VMware Tools安装锁问题](#第一部分:解决VMware Tools安装锁问题)
- [第二部分:安装VMware Tools成功](#第二部分:安装VMware Tools成功)
- 第三部分:安装Tina-Linux编译依赖(精简版)
- 第四部分:安装Tina-Linux完整编译依赖
- 第五部分:获取100ASK_T113-Pro板级支持包
- [第六部分:获取Tina-Linux SDK源码(官方与网盘)](#第六部分:获取Tina-Linux SDK源码(官方与网盘))
- 第七部分:下载SDK分卷文件
- 第八部分:将SDK分卷文件复制到虚拟机
- 第九部分:继续复制文件到虚拟机
- 第十部分:MD5校验分卷文件
- 第十一部分:解压SDK
- 第十二部分:查看SDK目录结构
- 第十三部分:移动SDK到主目录
- 第十四部分:获取板级支持包(完整版)
- 第十五部分:查看工具链目录
- 第十六部分:复制板级文件到SDK
- 第十七部分:同步并确认SDK位置
- 第十八部分:进入SDK目录并验证文件
- 第十九部分:配置编译环境
- 第二十部分:开始编译
- 第二十一部分:编译完成
- 第二十二部分:打包固件
- 第二十三部分:打包完成并查看镜像
- 第二十四部分:开发板启动成功验证
- 第二十五部分:U-Boot环境变量(查看)
- 第二十六部分:U-Boot环境变量(启动参数详情)
- 第二十七部分:BOOT0启动日志
- 第二十八部分:SD卡格式化工具
- 第二十九部分:确认格式化
- 第三十部分:PhoenixCard烧录工具
- 第三十一部分:PhoenixCard烧录过程
- 第三十二部分:PhoenixCard烧录完成
- 面试官提问环节
-
- [第1问:Tina-SDK编译前为什么要执行`source build/envsetup.sh`和`lunch`?](#第1问:Tina-SDK编译前为什么要执行
source build/envsetup.sh和lunch?) - [第2问:SDK解压时为什么用`cat xxx.0* | tar -jxvf`而不是直接`tar -jxvf tina-d1-h.tar.bz2.00`?](#第2问:SDK解压时为什么用
cat xxx.0* | tar -jxvf而不是直接tar -jxvf tina-d1-h.tar.bz2.00?) - 第3问:编译完成后执行`pack`命令的作用是什么?
- 第4问:U-Boot环境变量中`bootcmd`和`bootargs`分别是什么作用?
- 第5问:如果编译失败,如何清理环境重新编译?
- [第1问:Tina-SDK编译前为什么要执行`source build/envsetup.sh`和`lunch`?](#第1问:Tina-SDK编译前为什么要执行
第一部分:解决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的包管理是互斥的,同一时间只能有一个进程操作。
解决方法:
-
检查是哪个进程占用了锁:
bash
sudo lsof /var/lib/dpkg/lock-frontend -
杀掉该进程,或耐心等待它完成。
-
如果无法解决,最简单的办法是重启虚拟机,重启后系统启动自动更新进程往往不会立即运行。
执行操作 :图中直接执行了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位程序,所以需要安装lib32z1、lib32stdc++6、libc6: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开发板提供了板级扩展补丁,包含了开发板特有的配置文件、设备树、驱动程序等。
步骤解析:
-
克隆板级支持包:
bash
git clone https://gitee.com/weidongshan/100ASK_T113-Pro_TinaSDK.git使用Gitee镜像(国内访问快),如果你的网络可以访问GitHub,也可以使用GitHub仓库。
-
进入目录:
bash
cd 100ASK_T113-Pro_TinaSDK -
初始化并更新子模块:
bash
git submodule update --init该命令会拉取子模块(如预编译的交叉工具链
prebuilt),子模块的仓库地址在.gitmodules文件中定义。 -
复制板级文件到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://open.allwinnertech.com/
- 注册账号并申请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) - 辅助函数(如
lunch、extract_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核心编译,可以显著缩短编译时间。
编译过程(按顺序):
- 准备工具链:配置交叉编译器
- 编译U-Boot :从
lichee/brandy/u-boot-2018编译 - 编译Linux内核 :从
lichee/linux-5.4编译,生成zImage和设备树 - 编译根文件系统:使用Buildroot构建,编译所有选中的软件包
- 打包镜像:将各部分组合成完整固件
编译时间 :首次编译需要下载源码包到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命令执行的步骤:
- 读取芯片配置(
sun8iw20p1,即T113) - 读取板级配置(
t113-100ask) - 配置调试串口(
uart3,T113的调试串口是UART3) - 拷贝工具和配置文件
- 打包boot资源
- 生成最终镜像
第二十三部分:打包完成并查看镜像
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(官方工具)
- 下载地址:https://www.sdcard.org/downloads/formatter/
- 支持Windows/macOS

操作步骤:
- 将SD卡插入电脑读卡器
- 打开SD Card Formatter
- 在"Select card"中选择你的SD卡(注意不要选错,确认容量)
- "Formatting options"选择"Quick format"(快速格式化)
- 点击"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开始制作启动卡。
烧录步骤:
- 格式化SD卡
- 写入MBR分区表
- 写入
boot-resource分区(启动资源) - 写入
env分区(U-Boot环境变量) - 写入
env-redund分区(环境变量备份) - 写入
boot分区(U-Boot镜像) - 写入
rootfs分区(根文件系统) - 写入
private等数据分区
第三十二部分:PhoenixCard烧录完成
text
输出信息
Message
I: [boot]烧写完成
I: [rootfs]烧写完成
I: [DATA File]烧写完成
I: magic完成
I: 烧写结束...
找到盘符:1
找到盘符:1
讲解:
所有分区烧录完成,显示"烧写结束..."。
烧录完成后:
- 在Windows中"安全弹出"SD卡
- 将SD卡插入开发板的SD卡槽
- 设置开发板从SD卡启动(通常通过拨码开关或跳线)
- 上电启动系统
面试官提问环节
第1问:Tina-SDK编译前为什么要执行source build/envsetup.sh和lunch?
参考答案 :
source build/envsetup.sh加载构建系统环境变量和辅助函数(如lunch、m、pack等)。lunch用于选择目标产品和配置(如t113_100ask-tina),它会设置TARGET_PRODUCT、TARGET_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.img、rootfs.img等,pack会进行校验、填充、签名(可选),最终生成可直接被PhoenixCard或其它烧录工具识别的固件文件。
第4问:U-Boot环境变量中bootcmd和bootargs分别是什么作用?
参考答案:
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产品。加油