构建全志 T113 Tina SDK

news2025/1/2 5:46:46

1、环境配置:

准备一个 Ubuntu 系统,可以是 WSL,虚拟机等,建议版本是 20.04。

1.1、安装必要的软件

进入系统后,输入下方命令安装需要的工具 :

sudo apt update -y 

sudo apt full-upgrade -y 

sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev \
libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \
libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 \
python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \
uglifyjs upx-ucl unzip vim make make-guile gcc g++ wget xmlto xxd zlib1g-dev

 

1.2、安装 repo:

repo 是 Google 开发的用于管理 Android 版本库的一个工具,repo 是使用 Python 对 git 进行了一定的封装,并不是用于取代 git,它简化了对多个 git 版本库的管理。用 repo 管理的版本库都需要使用 git 命令来进行操作。

因此,使用 repo 工具之前,请先确保已经安装 git。

为什么要用 repo? 项目模块化/组件化之后各模块也作为独立的 git 仓库从主项目里剥离了去,各模块各自管理自己的版本。

下载 repo 文件

sudo curl -o /usr/bin/repo https://storage.googleapis.com/git-repo-downloads/repo

设置执行权限

sudo chmod a+x /usr/bin/repo

检查是否成功安装

repo --version

1.3、更换为国内镜像源

echo export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' >> ~/.bashrc

​
source ~/.bashrc

1.4、配置保存身份认证:

新版本 git 默认加强了安全性,身份认证不会保存,导致拉取 repo 需要多次输入密码,可以用下列命令配置。

git config --global credential.helper store

2、SDK 拉取

2.1、新建一个目录用来存放 SDK

mkdir tina-sdk

cd tina-sdk

2.2、初始化仓库

使用 repo init 命令初始化仓库,tina-d1-h 的仓库地址是 https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git 需要执行命令:

​repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml

如果提示 Username for 'https://sdk.aw-ol.com': 请输入 全志在线开发者论坛 的用户名和密码 。

需要自己先去全志在线开发者论坛创建一个账号,先之前的经验贴说要升到 v2 才有权限下载,升一级还是容易的,但是经过测试现在是创建账号后就能下载。

2.3、使用命令 repo sync 拉取 SDK,由于 SDK 普遍较大,拉取可能需要一定的时间

repo sync

2.4、使用命令 repo start 创建开发环境分支

repo start product-smartx-d1-h-tina-stable-v2.0 --all

3、SDK 配置

3.1、当前克隆项目运行 source build/envsetup.sh 会存在以下报错:

bash: build/envsetup.sh: line 1: syntax error near unexpected token `$'{\r''

bash: build/envsetup.sh: line 1: `function hmm() { 

解决方法:使用 dos2unix 批量将文件转换为 unix 格式 。

sudo apt install dos2unix 

find -type f | xargs dos2unix

3.2、合入 100ASK 的 T113-S3 补丁

由于全志默认的 SDK 没有提供 T113 的支持,所以需要打百问网的 T113 补丁。

此处需要在根目录操作,否则会污染下载到的tina-sdk。

cd ~

​
git clone https://github.com/DongshanPI/100ASK_T113-Pro_TinaSDK.git


cd 100ASK_T113-Pro_TinaSDK 


git submodule update --init 


# 替换实际的tina-sdk路径

cp ./* -rfvd ~/tina-sdk 

3.3、初始化编译环境

cd tina-sdk

source build/envsetup.sh 

lunch 

You're building on Linux 
Lunch menu... pick a combo: 
    1. d1-h_nezha-tina 
    2. d1-h_nezha_min-tina 
    3. d1s_nezha-tina 
    4. t113_100ask-tina 
Which would you like? [Default d1s_nezha]: 4 

按照以上步骤进入编译环境后,输入以下命令可进入linux内核配置:

make kernel_menuconfig

输入下列命令,可以进入Tina配置界面:

make menuconfig

4、修改配置文件

系统分区配置:

;---------------------------------------------------------------------------------------------------
; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串
;---------------------------------------------------------------------------------------------------


;---------------------------------------------------------------------------------------------------
;                                   固件下载参数配置
;---------------------------------------------------------------------------------------------------
;***************************************************************************************************
;    mbr的大小, 以Kbyte为单位
;***************************************************************************************************
[mbr]
size = 16384

;***************************************************************************************************
;                                              分区配置
;
;
;  partition 定义范例:
;    [partition]                ;  //表示是一个分区
;    name        = USERFS2      ; //分区名称
;    size        = 16384        ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T
;    downloadfile = "123.fex"   ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径
;    keydata     = 1            ; //私有数据分区,重新量产数据将不丢失
;    encrypt     = 1            ; //采用加密方式烧录,将提供数据加密,但损失烧录速度
;    user_type   = ?            ; //私有用法
;    verify      = 1            ; //要求量产完成后校验是否正确
;
; 注:1、name唯一, 不允许同名
;     2、name最大12个字符
;     3、size = 0, 将创建一个无大小的空分区
;     4、align to logical block size(504 sectors), leb size = 2*(1 nand phy block size - 1 phy page size)
;***************************************************************************************************
[partition_start]

[partition]
    name         = boot-resource
    size         = 504
    downloadfile = "boot-resource.fex"
    user_type    = 0x8000


[partition]
    name         = env
    size         = 504
    downloadfile = "env.fex"
    user_type    = 0x8000

[partition]
    name         = env-redund
    size         = 504
    downloadfile = "env.fex"
    user_type    = 0x8000

[partition]
    name         = boot
    size         = 10080
    downloadfile = "boot.fex"
    user_type    = 0x8000

[partition]
    name         = rootfs
    size         = 126000
    downloadfile = "rootfs.fex"
    user_type    = 0x8000

;[partition]
;    name         = dsp0
;    size         = 2048
;    downloadfile = "dsp0.fex"
;    user_type    = 0x8000

;[partition]
;    name         = recovery
;    size         = 16128
;    ;downloadfile = "recovery.fex"
;    user_type    = 0x8000

[partition]
    name         = private
    size         = 10240
    user_type    = 0x8000

[partition]
    name         = rootfs_data
    size         = 10240
    user_type    = 0x8000

[partition]
    name         = UDISK
    name         = rootfs_data
    size         = 10240
    user_type    = 0x8000


替换:tina-sdk/device/config/chips/t113/configs/100ask/sys_partition.fex。

5、修改 U-Boot 打印串口

5.1、修改配置文件

从 device/config/chips/t113/configs/100ask/BoardConfig.mk 中找到使用的 U-Boot 配置,将其打印串口改为 UART3,可以发现使用的 U-Boot 配置为 sun8iw20p1_uart3_defconfig。

找到文件并修改 tina-sdk/lichee/brandy-2.0/u-boot-2018/configs/sun8iw20p1_uart3_defconfig,将 CONFIG_CONS_INDEX 的值改为 4(串口号+1)。

找到并修改 tina-sdk/device/config/chips/t113/configs/100ask/sys_config.fex 文件,按图配置串口号和所用的引脚。

查看数据手册引脚复用,发现 PE8 和 PE9 的串口功能是 FUNC5,所以 uart_debug_tx/rx 的配置为 <5><1><default><default>。

5.2、修改设备树

修改设备树,找到 tina-sdk/device/config/chips/t113/configs/100ask/board.dts 文件,在 pio 节点下配置 uart3 的引脚复用功能。

开启 uart3。

5.3、修改寄存器地址

修改 uboot 环境变量文件 tina-sdk/device/config/chips/t113/configs/100ask/env.cfg。

earlyprintk=sunxi-uart,0x02500000 需要修改为 UART3 的地址,查阅手册可知为 0x02500C00。

12849b33-3786-417e-b2fe-7736c04d4b38-image.png

输入make kernel_menuconfig 找到 Kernel low-level debugging functions 进行勾选。

6、解决编译报错问题

6.1、configure: error: XML::Parser perl module is required for intltool 

输入make menuconfig,在 Libraries 目录下关闭 libxkbcommon 和 xkeyboard-config。

6.2、Qt下载失败问题

如果不需要使用 Qt 的话,输入 make menuconfig 关闭 Qt。

6.3、OpenSSH编译问题

修改 tina-sdk/package/network/openssh/Makefile,直接将版本修改为 8.9p1,即可解决编译问题。

7、编译,打包,烧入

输入下列命令,开始构建系统 :

# -j16 指的是使用16线程编译,实际编译时可按照电脑配置来选择使用多少线程编译。
make -j16

 输入下列命令,开始单独构建 U-Boot:

mboot

输入下列命令,开始单独构建内核(构建系统会顺带构建内核):

mkernel 

输入下列命令,开始打包系统 :

pack 

将 SD 卡插入电脑,打开 PhoenixCard.exe,点击固件,加载 img 固件,然后选择启动卡,再点击烧卡即可,需要注意的是,一定要选择启动卡,否则会启动失败!

烧入软件为 PhoenixCard,链接如下,还有一些 T113 的开发文档:

链接: https://pan.baidu.com/s/1hWomuwc-f8OFpt_LMr4Oqg?pwd=ej2v

提取码: ej2v

8、文件系统只读解决方法

这个问题是因为根文件系统是 SquashFS 类型,且挂载为只读 (ro),需要使用 OverlayFS 让文件系统支持写操作。

默认 Tina-Linux 配置可能没有选中 e2fsprogs 包,导致第一次开机无法执行 ext4 格式化数据分区,只要在配置中开启 e2fsprogs 即可,OverlayFS 文件系统可以类似达到把只读文件系统改为可写文件系统的效果。

8.1、make menuconfig 打开 e2fsprog

8.2、make kernel_menuconfig 打开 ext4

8.3、修改设备树

如果你的原理图中 SD 卡如下图所示,则需要修改设备树,否则不需要修改设备树。

在百问网的补丁包基础上修改了串口之后烧录系统启动后会发现 can't open blockdev,原因是因为默认检测低电平为 SD 卡插入。

但是 SD 卡座 det 脚为高电平有效,所以这边不再使用 det 脚检测 SD 卡,而是使用轮询方式修改设备树,把 cd-gpios 注释掉,然后取消broken-cd的注销。

修改 tina-sdk/device/config/chips/t113/configs/100ask/board.dts 文件。

9、没有 eth0 网络接口解决方法

修改 tina-sdk/device/config/chips/t113/configs/100ask/board.dts 文件后,重新编译打包。

9.1、找到 pio 节点中的子节点 gmac0_pins_a 和 gmac0_pins_b

# 修改前:

gmac0_pins_a: gmac@0 {
        allwinner,pins = "PE0", "PE1", "PE2", "PE3", "PE4",
                 "PE5", "PE6", "PE7","PE8", "PE9";
        allwinner,function = "gmac0";
        allwinner,muxsel = <8>;
        allwinner,drive = <1>;
        allwinner,pull = <0>;
    };

gmac0_pins_b: gmac@1 {
        allwinner,pins = "PE0", "PE1", "PE2", "PE3", "PE4",
                 "PE5", "PE6", "PE7","PE8", "PE9";
        allwinner,function = "gpio_in";
        allwinner,muxsel = <0>;
        allwinner,drive = <1>;
        allwinner,pull = <0>;
    };

# 修改后:

gmac0_pins_a: gmac@0 {
        allwinner,pins = "PG0", "PG1", "PG2", "PG3","PG4", 
                 "PG5", "PG6","PG7","PG8","PG9",  "PG10","PG11","PG12","PG13","PG14", "PG15";
        allwinner,function = "gmac0";
        allwinner,muxsel = <8>;
        allwinner,drive = <1>;
        allwinner,pull = <0>;
    };

    gmac0_pins_b: gmac@1 {
        allwinner,pins = "PG0", "PG1", "PG2", "PG3","PG4",
                 "PG5", "PG6","PG7","PG8","PG9", "PG10", "PG11","PG12","PG13","PG14", "PG15";
        allwinner,function = "gpio_in";
        allwinner,muxsel = <0>;
        allwinner,drive = <1>;
        allwinner,pull = <0>;
    };

9.2、找到 gmac0 节点

# 修改前:

&gmac0 {
    pinctrl-0 = <&gmac0_pins_a>;
    pinctrl-1 = <&gmac0_pins_b>;
    pinctrl-names = "default", "sleep";
    phy-mode = "rmii";
    use_ephy25m = <0>;
    tx-delay = <3>;
    rx-delay = <0>;
    phy-rst = <&pio PE 10 GPIO_ACTIVE_HIGH>;
    status = "okay";
};

# 修改后:

&gmac0 {
    pinctrl-0 = <&gmac0_pins_a>;
    pinctrl-1 = <&gmac0_pins_b>;
    pinctrl-names = "default", "sleep";
    phy-mode = "rgmii";
    use_ephy25m = <0>;
    gmac-power0-vol = <3300000>;
    tx-delay = <4>;
    rx-delay = <15>;
//    phy-rst = <&gpio_ext 2 GPIO_ACTIVE_HIGH>;
    status = "okay";
};

参考文章链接:https://www.cnblogs.com/TheGathering/p/18137803

以上就是构建 T113 Tina-SDK 的全部内容,如果有什么疑问或者建议欢迎在评论区里提出来嗷。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2267610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 搭建 nginx+keepalived 高可用 | Nginx反向代理

注意&#xff1a;本文为 “Linux 搭建 nginxkeepalived (主备双主模式) 高可用 | Nginx反向代理” 相关文章合辑。 KeepalivedNginx实现高可用&#xff08;HA&#xff09; xyang0917 于 2016-09-17 00:24:15 发布 keepalived 的 HA 分为抢占模式和非抢占模式&#xff0c;抢占…

RDFS—RDF模型属性扩展解析

目录 前言1. 什么是RDFS&#xff1f;1.1 RDFS的核心概念1.2 RDFS与RDF的区别 2. RDFS的基础概念2.1 类&#xff08;Class&#xff09;2.2 属性&#xff08;Property&#xff09;2.3 关系&#xff08;Relation&#xff09;2.4 定义域&#xff08;Domain&#xff09;2.5 值域&…

rust windwos 两个edit框

use winapi::shared::minwindef::LOWORD; use windows::{core::*,Win32::{Foundation::*,Graphics::Gdi::{BeginPaint, EndPaint, PAINTSTRUCT},System::LibraryLoader::GetModuleHandleA,UI::WindowsAndMessaging::*,}, };// 两个全局静态变量&#xff0c;用于保存 Edit 控件的…

Python Polars快速入门指南:LazyFrames

前文已经介绍了Polars的Dataframe, Contexts 和 Expressions&#xff0c;本文继续介绍Polars的惰性API。惰性API是该库最强大的功能之一&#xff0c;使用惰性API可以设定一系列操作&#xff0c;而无需立即运行它们。相反&#xff0c;这些操作被保存为计算图&#xff0c;只在必要…

常见CMS漏洞(wordpress,DedeCms,ASPCMS,PHPMyAdmin)

练习一:wordpress漏洞测试 1.上传包含木马的主题 安装网站 登陆网站 上传主题处测试漏洞注入 在上传主题模板压缩包中写入一句话木马 网站上传含有木马的zip压缩包 上传成功 wordpress主题目录 wp-content/themes 访问上传木马测试 2.修改主题的配置文件为含有木马的文件 练习…

【Java数据结构】LinkedList与链表

认识LinkedList LinkedList就是一个链表&#xff0c;它也是实现List接口的一个类。LinkedList就是通过next引用将所有的结点链接起来&#xff0c;所以不需要数组。LinkedList也是以泛型的方法实现的&#xff0c;所以使用这个类都需要实例化对象。 链表分为很多种&#xff0c;比…

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具&#xff0c;可用于构建知识库&#xff0c;实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库&#xff0c;包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…

【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读

上一篇文章学会了stdin任意地址写【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写-CSDN博客 本篇关注stdout利用手法&#xff0c;和上篇提及的手法有着异曲同工之妙 文章目录 前言 一、_IO_2_1_stdout_输出链&#xff0c;及利用思路 &#xff08;一&#xff09;_IO_2_1_std…

一网多平面

“一网多平面”是一种网络架构概念&#xff0c;具体指的是在一张物理网络之上&#xff0c;逻辑划分出“1N”个平面。以下是对“一网多平面”的详细解释&#xff1a; 定义与构成 01一网多平面 指的是在统一的物理网络基础设施上&#xff0c;通过逻辑划分形成多个独立的网络平面…

设计模式之状态模式:自动售货机的喜怒哀乐

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 一、状态模式概述 \quad 在我们的日常生活中&#xff0c;很多事物都具有不同的状态。比如我们经常使用的自动售货机&#xff0c;它就具有多种状态…

信息系统管理工程第8章思维导图

软考信管第8章的思维导图也实在是太长了&#xff0c;制作的耗时远超过之前的预计。给你看看思维导图的全貌如下&#xff0c;看看你能够在手机上滚动多少个屏幕 当你看到这段文字的时候&#xff0c;证明你把思维导图从上到下看完了&#xff0c;的确很长吧&#xff0c;第8章的教程…

Excel无法插入新单元格怎么办?有解决方法吗?

在使用Excel时&#xff0c;有时会遇到无法插入新单元格的困扰。这可能是由于多种原因导致的&#xff0c;比如单元格被保护、冻结窗格、合并单元格等。本文将详细介绍3种可能的解决方案&#xff0c;帮助你顺利插入新单元格。 一、消冻结窗格 冻结窗格功能有助于在滚动工作表时保…

深度学习笔记(12)——深度学习概论

深度学习概论 深度学习关系&#xff1a; 为什么机器人有一部分不在人工智能里面&#xff1a;机器人技术是一个跨学科的领域&#xff0c;它结合了机械工程、电子工程、计算机科学以及人工智能&#xff08;AI&#xff09;等多个领域的知识。 并不是所有的机器人都依赖于人工智能…

HEIC 是什么图片格式?如何把 iPhone 中的 HEIC 转为 JPG?

在 iPhone 拍摄照片时&#xff0c;默认的图片格式为 HEIC。虽然 HEIC 格式具有高压缩比、高画质等优点&#xff0c;但在某些设备或软件上可能存在兼容性问题。因此&#xff0c;将 HEIC 格式转换为更为通用的 JPG 格式就显得很有必要。本教程将介绍如何使用简鹿格式工厂&#xf…

flask后端开发(11):User模型创建+注册页面模板渲染

目录 一、数据库创建和配置信息1.新建数据库2.数据库配置信息3.User表4.ORM迁移 二、注册页面模板渲染1.导入静态文件2.蓝图注册路由 一、数据库创建和配置信息 1.新建数据库 终端中 CREATE DATABASE zhiliaooa DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2…

【Next.js】001-项目初始化

【Next.js】001-项目初始化 文章目录 【Next.js】001-项目初始化一、前言二、自动创建项目1、环境要求2、创建项目创建命令创建演示生成的项目目录如果你不使用 npx 命令 3、运行项目脚本说明在开发环境运行项目查看页面 4、示例代码说明创建项目查看示例项目创建项目命令创建过…

系统安全——可信计算

可信计算 可信计算的起源 上世纪八十年代&#xff0c;TCSEC标准将系统中所有安全机制的总和定义为可信计算基 &#xff08;Trusted Computing Base TCB) TCB的要求是&#xff1a; 独立的&#xff08;independent&#xff09; 具有抗篡改性 tempering proof 不可旁路(无法窃…

Python学生管理系统(MySQL)

上篇文章介绍的Python学生管理系统GUI有不少同学觉得不错来找博主要源码&#xff0c;也有同学提到老师要增加数据库管理数据的功能&#xff0c;本篇文章就来介绍下python操作数据库&#xff0c;同时也对上次分享的学生管理系统进行了改进了&#xff0c;增加了数据库&#xff0c…

【Sentinel】流控效果与热点参数限流

目录 1.流控效果 1.1.warm up 2.2.排队等待 1.3.总结 2.热点参数限流 2.1.全局参数限流 2.2.热点参数限流 2.3.案例 1.流控效果 在流控的高级选项中&#xff0c;还有一个流控效果选项&#xff1a; 流控效果是指请求达到流控阈值时应该采取的措施&#xff0c;包括三种&…

《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS技术理念

1.2 技术理念 在万物智联时代重要机遇期&#xff0c;HarmonyOS结合移动生态发展的趋势&#xff0c;提出了三大技术理念&#xff08;如下图3-1所示&#xff09;&#xff1a;一次开发&#xff0c;多端部署&#xff1b;可分可合&#xff0c;自由流转&#xff1b;统一生态&#xf…