构建全志 T113 Tina SDK
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。
输入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 的全部内容,如果有什么疑问或者建议欢迎在评论区里提出来嗷。