1 Star 7 Fork 8

xiaobo / Tina-Linux

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Fork me on Gitee

【当前项目 fork 于 github 芒果不鸽】 https://mangopi.orghttps://github.com/mangopi-sbc/Tina-Linux.git
由于 github 访问速度关系,将其同步至 gitee 用以开发 T113-s3 芯片,同时记录使用此 SDK 过程中遇到的各种问题以及解决方法。

Tina-Linux

Tina Linux 系统是基于 openwrt-14.07 的版本的软件开发包,包含了 Linux 系统开发用到的内核源码,驱动,工具、系统中间件与应用程序包。openwrt 是一个开源的嵌入式 Linux 系统自动构建框架,是由 Makefile 脚本和 Kconfig 配置文件构成的。使得用户可以通过 menuconfig 配置,编译出一个完整的可以直接烧写到机器上运行的 Linux 系统软件。

Win11 WSL2 Ubuntu-20.04 环境

sudo apt-get install build-essential subversion git-core 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 libmpc-dev libgmp-dev -y

SDK 下载

  $ git clone https://gitee.com/xiaobocwb/Tina-Linux.git
  $ cd Tina-Linux/
  $ git submodule update --init --recursive

  // 下载并解压资源数据  
  方式一: (视网络环境可能需要1小时左右,全部 4G)
    $ wget http://dl.mangopi.cc/tina/prebuilt.tar.gz .
    $ tar xzvf prebuilt.tar.gz
    $ wget http://dl.mangopi.cc/tina/dl.tar .
    $ tar xvf dl.tar
    $ wget http://dl.mangopi.cc/tina/toolchain/riscv64-linux-x86_64-20200528.tar.xz -P ./lichee/brandy-2.0/tools/toolchain/
    $ wget http://dl.mangopi.cc/tina/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz -P ./lichee/brandy-2.0/tools/toolchain/
  方式二:
    链接:https://pan.baidu.com/s/1dErX9d0sXunmJQ-eD7TteQ 
    提取码:9999
    通过百度网盘下载之后,根据方式一中命令将资源复制并解压到相应目录下。

编译

加载环境变量

source build/envsetup.sh

选择目标方案

lunch

从以下目标方案(芯片及板)

You're building on Linux

Lunch menu... pick a combo:
     1. d1_mq_pro-tina
     2. d1_nezha_min-tina
     3. d1_nezha-tina
     4. f133_evb1-tina
     5. f133_mq_r-tina
     6. t113_evb1-tina
     7. t113_mq_r-tina

运行图形化配置界面,加载 package/ 目录下所有包(*非必须)
(wsl2 默认环境下此步骤不会出问题,虚拟机 ubuntu-14.04 下试过出现找不到 libxxx.so.x)

make menuconfig

编译内核及各种包(编译线程数根据电脑配置决定):

make -j8 -s

编译 uboot(首次需要,后续无改动不需要重复编译):

mboot

打包镜像,打包完成后镜像地址会有显示:

pack

烧录

使用 phoenixcard4 直接选中位于 linux 下的镜像文件,选择启动卡,插入 SD 卡烧录,烧录完成后即可运行测试。 phoenixcar 下载

开发

WIFI 驱动

make menuconfig -> Kernel modules -> Wireless Drivers 选中板载 wifi 模块,取消其它,wifi 模块一般还有依赖的固件,在驱动中选中后会根据依赖自动选中,其目录在 menuconfig -> Firmware。
RTL8723ds

OPENSSL

WSL2 ubuntu-20.04 下默认 openssl 版本是 1.1.1,Tina package 内适配的 openssl 版本是 1.1.0i 版本,编译时会出现关于 ”RSA {aka struct rsa_st}“ 相关的错误,这是由于在 openssl 1.1.1 版本及以上将 RSA,DES 等结构体内部隐藏了起来,在头文件中是以 typedef 的方式声明,其内部成员的访问提供了 get,set相关的接口函数,openssl 1.1.0 版本及以下直接通过 RSA 结构体指针访问成员的方式编译就会出错,需要做的不是网上说的打 210-xxx 的补丁,而是通过 apt 对当前宿主机 openssl 降级。

openssl version
sudo apt-cache madison openssl
sudo apt install openssl=1.1.0g-2ubuntu4

openssl_version

完成安装后重新 source buile/envsetup 加载环境,并选中 openssl 及其相关算法。
openssl_menuconfig

这里可能需要同时选中内核模块中的 zlib,从 openssl 的 Makefile 文件看是有依赖关系的,实际到底需不需要未进一步验证。
kmod-zlib

SSH

ssh 功能选中 Network -> SSH 下的 openssh-server 即可(ssh 依赖 openssl,所以 openssl 必须安装)。
ssh
另外默认不允许以 root 身份连接,将 /etc/ssh/sshd_config 文件内 PermitRootLogin 后面参数改为 yes 即可。
sshd_config
wifi 连接后,通过 ssh 登录测试:
ssh_test

内核初始化

SDK 默认内核启动后的初始化为 busybox init 方式,但实际测试(通过 ps 查看进程)发现 busybox init 方式下各种基础服务都没有启动,暂不细究,直接更换成 procd init 方式,首先在 System init 中选则 procd-init,然后在 Base system -> busybox 中取消其 init 选项,最后确保 init参数是 /sbin/init。
procd
busybox_init
env_cfg

LCD适配

当前适配 LCD 是一块 4.3 寸 800*480 分辨率的屏幕,电容触摸屏是全贴合的,驱动芯片是 gt911 I2C 接口。厂家给的屏参如图所示:
lcd4.3
需要修改设备树文件,芯片等硬件相关的配置皆在 device/ 目录下,当前修改 device/config/chips/t113/configs/mq_r/ 下的 board.dts,uboot-board.dts,主要修改其中 lcd 配置部分,根据板原理图修改 I2C 及其下挂载的 gt911 触摸屏设备。

&lcd0 {
	lcd_used            = <1>;

	lcd_driver_name     = "default_lcd";
	lcd_backlight       = <50>;
	lcd_if              = <0>;

	lcd_x               = <800>;
	lcd_y               = <480>;
	lcd_width           = <95>;
	lcd_height          = <54>;
	lcd_dclk_freq       = <24>;

	lcd_pwm_used        = <1>;
	lcd_pwm_ch          = <7>;
	lcd_pwm_freq        = <500>;
	lcd_pwm_pol         = <0>;

	lcd_hbp             = <12>;
	lcd_ht              = <816>;
	lcd_hspw            = <4>;
	lcd_vbp             = <12>;
	lcd_vt              = <496>;
	lcd_vspw            = <4>;

	lcd_lvds_if         = <0>;
	lcd_lvds_colordepth = <1>;
	lcd_lvds_mode       = <0>;
	lcd_frm             = <0>;
	lcd_io_phase        = <0x0000>;
	lcd_gamma_en        = <0>;
	lcd_bright_curve_en = <0>;
	lcd_cmap_en         = <0>;

	deu_mode            = <0>;
	lcdgamma4iep        = <22>;
	smart_color         = <90>;

	pinctrl-0 = <&rgb18_pins_a>;
	pinctrl-1 = <&rgb18_pins_b>;
  }

其中 v,t参数取表中典型值:
lcd_hpp = Front Porch + Pulse Width = 12
lcd_ht = Display Period + Front Porch + Back Porch
lcd_hspw = Pulse Width
VSYNC 参数同上
lcd_dclk_freq 参数表中为 25MHz 但为了分频方便,这里取可以整除的 24MHz (官方 SDK 无法输出低于 48MHz 的时钟,需要打补丁)
lcd_x,lcd_y 是分辨率参数
lcd_width,lcd_hight 是屏幕物理尺寸,用于计算 DPI
以上参数同步更改到 uboot-board.dts, 为了防止开机时屏幕闪烁,kernel 在检测到 lcd 已经被 uboot 初始化后就不会再重新初始化,可以更改 uboot 阶段屏幕是否输出。

GT9xx 电容触摸

根据原理图电路,确定触摸屏挂载于哪个 I2C 下,然后在对应 I2C 下新增驱动信息。
twi_gt911

&twi2 {
	clock-frequency = <400000>;
	pinctrl-0 = <&twi2_pins_a>;
	pinctrl-1 = <&twi2_pins_b>;
	pinctrl-names = "default", "sleep";
	dmas = <&dma 45>, <&dma 45>;
	dma-names = "tx", "rx";
	status = "okay";

	ctp@14 {
                compatible = "allwinner,goodix";
                device_type = "ctp";
                reg = <0x14>;
                status = "okay";
                ctp_name = "gt9xxnew_ts";
                ctp_twi_id = <0x2>;
                ctp_twi_addr = <0x14>;
                ctp_screen_max_x = <0x320>;
                ctp_screen_max_y = <0x1e0>;
                ctp_revert_x_flag = <0x0>;
                ctp_revert_y_flag = <0x0>;
                ctp_exchange_x_y_flag = <0x0>;
                ctp_int_port = <&pio PB 3 GPIO_ACTIVE_HIGH>;
                ctp_wakeup = <&pio PB 2 GPIO_ACTIVE_HIGH>;
                /*ctp-supply = <&reg_aldo2>;*/
                /*ctp_power_ldo = <&reg_aldo2>;*/
                /*ctp_power_ldo_vol = <3300>;*/
	};
};

GUI LVGL

由于 T113 RAM 只有 128M,GUI 如果选择 QT 会占用大量内存,目前先试试 lvgl,在 GUI -> Littlevgl 下选择 lv_examples 等相关,然后在 package/Gui/littlevgl-8/lv_examples/src/ 目录下修改 lv_drv_conf.h 文件,主要是更改触摸屏输入事件号,到时候运行时确定了具体是哪个 event 就通过软连接绑定。

lvgl
lvgl_event

运行后查看 /dev/input/ 下有 event0,event1 怎么确定哪个是触摸屏呢,直接运行 cat event0 或 cat event1,运行后用手触摸屏幕看 sheel 上是否输出字符串就可以确定。
通过软连接绑定到 touchscreen:

ln -s /dev/input/event1 /dev/input/touchscreen

然后运行测试 demo 看看 lvgl 和 触摸的效果:
lv_demo
lv_demo1

lv_examples 0

各种工具

binutils

GNU binutils 是一整套的编程语言工具程序,用来处理许多格式的目标文件,通常搭配GCC、make、和GDB这些程序来使用。
主要包括:

  • ld —— GNU链接器
  • as—— GNU汇编器
  • addr2line:从目标文件的虚拟地址获取文件的行号或符号。
  • ar:可以对静态库做创建、修改和提取的操作。
  • c++filt:反编译(反混淆,demangle)C++符号的工具。
  • dlltool:创建创建Windows动态库。
  • gold:另一种新的、更快的仅支持ELF的链接器。
  • gprof:性能分析(profiling)工具程序。
  • nlmconv:可以转换成NetWare Loadable Module(NLM)目标文件格式。
  • nm:显示目标文件内的符号信息。
  • objcopy:复制和转译目标文件。
  • objdump:显示目标文件的相关信息,亦可反汇编。
  • ranlib:产生静态库的索引。(和nm -s功能类似)
  • readelf: 显示ELF文件的内容。
  • size:列出目标文件或库文件的section大小。
  • strings:列出文件中可打印的字符串信息。
  • strip:从目标文件中移除符号信息。
  • windmc:Windows消息资源编译器。
  • windres:Windows资源文件编译器。

devmem

这个工具可以直接通过命令行读写实际内存,对于硬件外设调试来说很方便,可以随时读写外设寄存器,加快调试速度。
utilitite

i2cdetect

这个工具在 Base system -> busybox 里,搜索一下就可以找到,用来探测连接的 I2C 设备地址,确认硬件连接,以下是搜索到地址为 0x14 的 gt911 触摸屏后的效果(显示和 sheel有关,正常情况下是类似表格一样的排版)。
i2cdetect

LUCI

手动启动 uhttpd 服务 /usr/sbin/uhttpd -f -h /www -r OpenWrt -x /cgi-bin -u /ubus -t 60 -T 30 -k 20 -A 1 -n 3 -N 100 -R -p 0.0.0.0:80 -p [::]:80

蓝牙支持

首先根据原理图配置设备树文件:
rtl8723ds_sch
rtl8723ds_sch1

rfkill: rfkill@0 {
		compatible    = "allwinner,sunxi-rfkill";
		chip_en;
		power_en;
		pinctrl-0 = <&wlan_pins_a>;
		pinctrl-names = "default";
		status        = "okay";

		wlan: wlan@0 {
			compatible    = "allwinner,sunxi-wlan";
			clock-names = "32k-fanout1";
			clocks = <&ccu CLK_FANOUT1_OUT>;
			wlan_busnum    = <0x1>;
			wlan_regon    = <&pio PG 12 GPIO_ACTIVE_HIGH>;
			wlan_hostwake  = <&pio PG 10 GPIO_ACTIVE_HIGH>;
			/*wlan_power    = "VCC-3V3";*/
			/*wlan_power_vol = <3300000>;*/
			/*interrupt-parent = <&pio>;
			interrupts = < PG 10 IRQ_TYPE_LEVEL_HIGH>;*/
			wakeup-source;

		};
		
		bt: bt@0 {
			compatible    = "allwinner,sunxi-bt";
			clock-names = "32k-fanout1";
			clocks = <&ccu CLK_FANOUT1_OUT>;
			/*bt_power_num = <0x01>;*/
			/*bt_power      = "axp803-dldo1";*/
			/*bt_io_regulator = "axp803-dldo1";*/
			/*bt_io_vol = <3300000>;*/
			/*bt_power_vol = <330000>;*/
			bt_rst_n      = <&pio PG 15 GPIO_ACTIVE_LOW>;
			status        = "okay";
		};
	};

	btlpm: btlpm@0 {
		compatible  = "allwinner,sunxi-btlpm";
		uart_index  = <0x1>;
		bt_wake     = <&pio PG 14 GPIO_ACTIVE_HIGH>;
		bt_hostwake = <&pio PG 13 GPIO_ACTIVE_HIGH>;
		status      = "okay";
	};

	addr_mgt: addr_mgt@0 {
		compatible     = "allwinner,sunxi-addr_mgt";
		type_addr_wifi = <0x0>;
		type_addr_bt   = <0x0>;
		type_addr_eth  = <0x0>;
		status         = "okay";
	};

make kernel_menuconfig 在内核配置中启用蓝牙相关协议:
RFCOMM 是语音通话相关,用不到不用选,主要就是选中 BR/EDR 协议栈
bluetooth_kernel_1
RTL8723ds 模块选 H5 协议,并且使能 UART(H4)
bluetooth_kernel_2
RF switch 中不要选中 RF switch inputs support,要使能 GPIO RFKILL 驱动
bluetooth_kernel_3
用户空间配置项中选中开源协议栈 bluez-daemon 和 bluez-utils
bluetooth_1
还有 rtl 的初始化工具
bluetooth_2
光协议栈没有应用也用不起来,选中全志的 btmanager 以及其 demo,提供 A2DP source/sink工具,可以做音频播放器或蓝牙音响,AVRCP 蓝牙无线遥控,HFP 蓝牙语音通话,此外还有 BLE 的 gatt 服务客户端等工具,这个工具基本上蓝牙该有功能的他都有了。
bluetooth_3

编译运行后使用 bt_test 命令可以启用蓝牙,其它功能,通过 bt_test -h 查看,这个命令还支持交互方式, bt_test -i,下面是实际运行起来的样子:
bluetooth_run
/etc/bluetooh/下 bt_init.sh 是初始化脚本,一般不需要改动,bluetooh.json 是蓝牙功能配置文件,可以选中初始化时启用的各种 profile,还有配置音频播放设备。

MIT License Copyright (c) 2022 xiaobo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

Tina-Linux 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/xiaobocwb/Tina-Linux.git
git@gitee.com:xiaobocwb/Tina-Linux.git
xiaobocwb
Tina-Linux
Tina-Linux
dev

搜索帮助