T113平台Tina+C906 FreeRTOS编译开发说明-盈鹏飞嵌入式

以下开发说明的内容,已经在盈鹏飞嵌入式相关T113平台上进行了验证,以下是盈鹏飞嵌入式最新的产品动态。
盈鹏飞嵌入式致力于打造全系列T113的平台应用,加速用户产品上市速度!记得还是这个“味”!!

3、RTOS编译开发说明 

3.1、RTOS SDK与TinaLinux开发环境  

RTOS SDK相关代码已集成到Tina Linux开发环境,Tina Linux开发环境下的rtos子目录即为RTOS开发环境。 

├──brandy
├──bsp
├──build
├──buildroot
├──build.sh >build/top_build.sh
├──device
├──kernel
├──openwrt
├──out
├──platform
├──prebuilt
├──rtos	#RTOS环境
├──tee_kit
├──test
└──tools

3.2、RTOS编译

Tina集成了RTOS的编译、打包功能,而且适用于openwrt、buildroot等文件系统。这里以T113‑S4平台作为例子进行阐述。

3.2.1、关联RTOS方案

TinaLinux的SDK中,SDK根目录下有device目录,该目录存放的是不同处理器平台及主板的配置,以SBC-T113S4_NAND为例,它是以T113_S4为主控制器的,其配置文件就存放在device/config/chips/t113_s4/configs/sbc_t113s4_nand目录下,那么该主板如何关联RTOS方案呢?

xxx@xxx:~/workspace/t113_tina5.0/t113_tinasdk5.0-v1/device/config/chips/t113_s4/configs/sbc_t113s4_nand$ tree -l
.
├── bin
│   ├── amp_dsp0.bin
│   └── amp_rv0.bin
├── BoardConfig.mk //关联RTOS项目的关键
├── board.dts -> linux-5.4/board.dts
├── bsp
│   ├── env.cfg
│   └── sys_partition.fex
├── buildroot
│   ├── BoardConfig.mk
│   ├── BoardConfig_nor.mk
│   ├── bootlogo.bmp
│   ├── env_nor.cfg
│   ├── swupdate
│   │   ├── env_ab.cfg
│   │   ├── sw-description-ab
│   │   ├── sw-description-ab-rdiff
│   │   ├── sw-description-recovery
│   │   ├── sw-description-recovery-sign
│   │   ├── sw-subimgs-ab.cfg
│   │   ├── sw-subimgs-ab-rdiff.cfg
│   │   ├── sw-subimgs-recovery.cfg
│   │   ├── sw-subimgs-recovery-secure.cfg
│   │   ├── sw-subimgs-recovery-sign.cfg
│   │   ├── sys_partition_ab.fex
│   │   └── sys_partition_recovery.fex
│   ├── sys_partition.fex
│   └── sys_partition_nor.fex
├── linux-5.4
│   ├── board_backup.dts
│   ├── board.dts
│   ├── board_lvds1024x600.dts
│   ├── board_lvds1024x768.dts
│   ├── board_old.dts
│   ├── board_spi4bit_drv30.dts
│   ├── board_spi4bit.dts
│   ├── board_spi_sbc-t113s_v1p0.dts
│   ├── board_tft1024x600.dts
│   ├── board_uart3.dts
│   ├── board_xr829_sbc-t113s_v1p1.dts
│   ├── config-5.4
│   ├── config-5.4-recovery
│   ├── config_uart3-5.4
│   ├── env.cfg
│   ├── env_uart3.cfg
│   └── sys_partition.fex
├── openwrt
│   ├── bootlogo.bmp
│   ├── sys_partition.fex
│   └── sys_partition_nor.fex
├── sys_config.fex
├── sys_config_old.fex
├── sys_config_uart3.fex
├── uboot-board_backup.dts
├── uboot-board.dts
├── uboot-board-lvds-lcd1024x600.dts
├── uboot-board_spi0_1wire.dts
├── uboot-board_spi_sbc-t113s_v1p0.dts
├── uboot-board_spi_sbc-t113s_v1p1.dts
└── uboot-board-tft-lcd1024x600.dts

在这些配置文件中有一个文件BoardConfig.mk,它就是关联RTOS应用的关键,这个文件的内容如下:

 配置RTOS方案名的关键字段LICHEE_RTOS_PROJECT_NAME:=xxxxx。以我司SBC-T113S主板为例,在BoardConfig.mk中配置的是t113_s4_c906_evb1_auto的RTOS方案。开发者可以通过修改LICHEE_RTOS_PROJECT_NAME字段,更改构建RTOS方案。

先进入Tina的rtos目录,rtos目录的内容如下:

├──board
├──envsetup.sh >tools/scripts/source_envsetup.sh
├──lichee
├──out
└──tools

执行如下指令进行RTOS的环境配置

source envsetup.sh	#配置环境变量

注意TinaSDKrtos目录下执行source envsetup.sh命令后,此时的编译环境变量都被设置为RTOS的,如果要编译Tina Linux时,务必退出当前终端,重新打开新终端,并在TinaSDK根目录下执行source build/envsetup.sh。

执行如下指令进行编译方案的选择

lunch_rtos	#选择编译方案

我们看到可以选择的RTOS方案,即是LICHEE_RTOS_PROJECT_NAME字段可以配置的RTOS方案。

last=t113_s4_c906_evb1_auto
You're building on Linux
Lunch menu... pick a combo:
     1. t113_i_c906_evb1_auto
     2. t113_s3p_c906_evb1_auto
     3. t113_s3p_c906_evb1_auto_fastboot
     4. t113_s3p_c906_evb1_auto_fastboot_video
     5. t113_s3p_c906_evb1_auto_non_os
     6. t113_s3p_c906_example_demo
     7. t113_s4_c906_evb1_auto
     8. t113_s4_c906_evb1_auto_fastboot_video
     9. t113_s4p_c906_evb1_auto

Which would you like? [Default t113_s4_c906_evb1_auto]:

从以上RTOS的方案中,可以看到有支持t113-i处理器的,也有支持t113_s4处理器的,当前默认是t113_s4_c906_evb1_auto,这个是基于t113_s4处理器的方案。另外,这个方案是可以添加的,如果主板是基于T113I的,可以把t113_i_c906_evb1_auto作为蓝本增加自己方案,如果主板是基于T113-S4的,可以把t113_i_c906_evb1_auto作为蓝本增加自己方案。如何添加方案请看本手册的第六章节。

3.2.2、单独编译RTOS方案

执行lunch_rtos进行编译方案选择后,可以通过mrtos_menuconfig进行方案的配置,配置完成后即可通过m或者mrtos指令进行RTOS的编译。

xxx@xxx:~/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos$ lunch_rtos
last=t113_s4_c906_evb1_auto

You're building on Linux

Lunch menu... pick a combo:
     1. t113_i_c906_evb1_auto
     2. t113_s3p_c906_evb1_auto
     3. t113_s3p_c906_evb1_auto_fastboot
     4. t113_s3p_c906_evb1_auto_fastboot_video
     5. t113_s3p_c906_evb1_auto_non_os
     6. t113_s3p_c906_example_demo
     7. t113_s4_c906_evb1_auto
     8. t113_s4_c906_evb1_auto_fastboot_video
     9. t113_s4p_c906_evb1_auto

Which would you like? [Default t113_s4_c906_evb1_auto]: 7
select=7...
t113_s4_c906/evb1_auto
'/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/projects/t113_s4_c906/evb1_auto/defconfig' -> '/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/.config'
============================================
RTOS_BUILD_TOP=/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos
RTOS_TARGET_ARCH=riscv
RTOS_TARGET_CHIP=sun8iw20p1
RTOS_TARGET_DEVICE=t113_s4_c906
RTOS_PROJECT_NAME=t113_s4_c906_evb1_auto
============================================
Run mrtos_menuconfig to config rtos
Run m or mrtos to build rtos

以上提示我们通过mrtos_menuconfig可以进行应用的配置,执行结果如下:

从配置情况看,和Linux的内核配置比较接近,也是可以配置各种驱动外设,见下图:

T113系列拥有双核Cortex-A7核心,也拥有RV64-C906核心,这两个核心使用的外设是共通的,因此选择C906选择外设的时候,要避开Cortex-A7已经使用的外设。例如:Cortex-A7核心已经把PE2/PE3这两个GPIO作为UART来使用,C906就不能再使用PE2/PE3。

另外,这里要明确的一点是:每个RTOS应用也是有对应的配置文件的,对于t113_s4_c906_evb1_auto这个项目的配置文件在如下目录:

TinaSDK所在目录/rtos/lichee/rtos/projects/t113_s4_c906/evb1_auto/defconfig

配置完成后即可执行m或者mrtos执行进行编译,指令执行结果如下:

xxx@xxx:~/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos$ mrtos
build rtos ...
===There isn't tina environment.===
 Note: will use shell command origin rather than the functon.
 Dark Builder
 Version (1.6.0 - BiCEP2 (Gravitational Waves))
 *[CC]     [SCRIPT]          build/t113_s4_c906_evb1_auto/img/sys_config.fex
  [CONF]   [Tina-RT-Builder] .dbuild/..//include/generated/t113_s4_c906_evb1_aut                                                                                                                                                             o/autoconf.h
  [LDS]    [Linker]          projects/t113_s4_c906/evb1_auto/freertos.lds
  CC       build/t113_s4_c906_evb1_auto/arch/common/version.o
  LD       build/t113_s4_c906_evb1_auto/arch/common/obj-in.o
  LD       build/t113_s4_c906_evb1_auto/arch/obj-in.o
  [LD]     [Tina-RT-Builder] build/t113_s4_c906_evb1_auto/img/rt_system.elf
if [ -n /home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/bu                                                                                                                                                             ild/t113_s4_c906_evb1_auto/img/  ]; then mkdir -p /home/ping/workspace/t113_tina                                                                                                                                                             5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/build/t113_s4_c906_evb1_auto/img; fi
Memory region         Used Size  Region Size  %age Used
             RAM:      214096 B         6 MB      3.40%
 *[SYMS]   [Tina-RT-Builder] build/t113_s4_c906_evb1_auto/img/rt_system.syms
 *[IMAGE]  [Tina-RT-Builder] build/t113_s4_c906_evb1_auto/img/rt_system.bin
   text    data     bss     dec     hex filename
 134576   69048   10472  214096   34450 build/t113_s4_c906_evb1_auto/img/rt_syst                                                                                                                                                             em.elf
copying /home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/bu                                                                                                                                                             ild/t113_s4_c906_evb1_auto/img/rt_system.bin to /home/ping/workspace/t113_tina5.                                                                                                                                                             0/t113_tinasdk5.0-v1/rtos/board/t113_s4_c906/evb1_auto/bin/freertos.fex
#### make completed successfully
'/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/build/t11                                                                                                                                                             3_s4_c906_evb1_auto/img/rt_system.bin' -> '/home/ping/workspace/t113_tina5.0/t11                                                                                                                                                             3_tinasdk5.0-v1/rtos/board/t113_s4_c906/evb1_auto/bin/rtos_riscv_sun8iw20p1.fex'
ping@embedall:~/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos$

从以上信息我们得到一些信息,编译出来的固件名字是freertos.fex/rtos_riscv_sun8iw20p1.fex,其实两个固件是一样的。固件是编译出来,但是这个固件如何打包到Tina生成的根文件系统中呢?请看下一章。

3.2.3、在Tina下编译RTOS方案 

在TinaSDK根目录中,先选择好整体平台方案,见如下说明:

  • buildroot方案

1、首先使用如下命令选择整体平台方案

./build.sh config

2、然后RTOS相关操作命令如下

./build.sh rtos            #单独编译RTOS方案
./build.sh rtos menuconfig #修改RTOS配置文件
./build.sh rtos clean	#清除RTOS编译中间文件

注意:执行./build.sh不会编译RTOS

  • openwrt方案

1、首先使用如下命令选择整体平台方案

source build/envsetup.sh   #生效环境变量
lunch	#选择openwrt方案

2、执行make会先编译RTOS,再编译Tina

  • 快捷命令

在Tina根目录下,执行了source build/envsetup.sh配置环境后,可使用RTOS快捷命令进行RTOS的配置和编译等。

命令命令有效目录作用
mrtosTina环境下任意目录单独编译RTOS方案
mrtos menuconfigTina环境下任意目录修改RTOS配置文件
mrtos cleanTina环境下任意目录清除RTOS编译中间文件
crtosTina环境下任意目录进入RTOS源码目录
crtos‑halTina环境下任意目录进入RTOS‑HAL源码目录

3.3、RTOS固件打包

我们以编译openwrt方案为例,在的编译openwrt的过程中,会首先编译RTOS,然后将生成的镜像文件自动拷贝到对应平台方案中,并且rt_system.elf重名为amp_rv0.bin,见如下信息:

xxx@xxx:~/workspace/t113_tina5.0/t113_tinasdk5.0-v1$ make -j32
===There is tina environment.===
 Note: make is the shell functon in envsetup.sh.

== action: openwrt_build, action_args: -j32 ==
========ACTION List: build_rtos ;========
options :
INFO: build rtos ...
Setup env done!
Run lunch_rtos to select project
last=t113_s4_c906_evb1_auto
select=t113_s4_c906_evb1_auto...
t113_s4_c906/evb1_auto
'/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/projects/t113_s4_c906/evb1_auto/defconfig' -> '/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/.config'
============================================
RTOS_BUILD_TOP=/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos
RTOS_TARGET_ARCH=riscv
RTOS_TARGET_CHIP=sun8iw20p1
RTOS_TARGET_DEVICE=t113_s4_c906
RTOS_PROJECT_NAME=t113_s4_c906_evb1_auto
============================================
Run mrtos_menuconfig to config rtos
Run m or mrtos to build rtos
build rtos ...
 Dark Builder
 Version (1.6.0 - BiCEP2 (Gravitational Waves))
 *[CC]     [SCRIPT]          build/t113_s4_c906_evb1_auto/img/sys_config.fex
  [CONF]   [Tina-RT-Builder] .dbuild/..//include/generated/t113_s4_c906_evb1_auto/autoconf.h
  [LDS]    [Linker]          projects/t113_s4_c906/evb1_auto/freertos.lds
  CC       build/t113_s4_c906_evb1_auto/arch/common/version.o
  LD       build/t113_s4_c906_evb1_auto/arch/common/obj-in.o
  LD       build/t113_s4_c906_evb1_auto/arch/obj-in.o
  [LD]     [Tina-RT-Builder] build/t113_s4_c906_evb1_auto/img/rt_system.elf
if [ -n /home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/build/t113_s4_c906_evb1_auto/img/  ]; then mkdir -p /home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/build/t113_s4_c906_evb1_auto/img; fi
Memory region         Used Size  Region Size  %age Used
             RAM:      214096 B         6 MB      3.40%
 *[IMAGE]  [Tina-RT-Builder] build/t113_s4_c906_evb1_auto/img/rt_system.bin
 *[SYMS]   [Tina-RT-Builder] build/t113_s4_c906_evb1_auto/img/rt_system.syms
   text    data     bss     dec     hex filename
 134576   69048   10472  214096   34450 build/t113_s4_c906_evb1_auto/img/rt_system.elf
copying /home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/build/t113_s4_c906_evb1_auto/img/rt_system.bin to /home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/board/t113_s4_c906/evb1_auto/bin/freertos.fex
#### make completed successfully
'/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/build/t113_s4_c906_evb1_auto/img/rt_system.bin' -> '/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/board/t113_s4_c906/evb1_auto/bin/rtos_riscv_sun8iw20p1.fex'
'/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos/lichee/rtos/build/t113_s4_c906_evb1_auto/img/rt_system.elf' -> '/home/ping/workspace/t113_tina5.0/t113_tinasdk5.0-v1/device/config/chips/t113_s4/configs/sbc_t113s4_nand/bin/amp_rv0.bin'

然后在Tina环境中打包,确保RTOS编译固件amp_rv0.bin打包到根文件系统中。

说明:

1)buildroot需要执行./build.sh&&./build.sh pack命令

2)openwrt需要执行make&&pack命令

打包完成后,生产的固件位于tina5.0/out/t113_s4_linux_sbc_t113s4_uart0.img,可以使用PhoenixSuit工具烧录到主板上。

3.4、RISC-V核启动

进入主核Linux控制台后,执行如下命令即可完成RV核异构通信框架的初始化:

echo start>/sys/class/remoteproc/remoteproc1/state

注:T113-S4处理器包括了DSP HIFI核心,也包括了RISC-V核心,因此它应该具备remoteproc0/remoteproc1两个节点(这两个节点在内核的DTS中是可配置的,可以删除任何一个节点)。如果两个节点都在,那么remoteproc0节点是DSP核心,remoteproc1节点是RISC-V核心。

3.6、RTOS镜像文件更新 

更新RTOS镜像文件的方法有以下两种:

1、Tina Linux环境下,按照RTOS编译、RTOS固件打包步骤重新编译固件,并烧录进开发板,之后再启动RV核。

2、通过adb push将新生成的镜像文件amp_rv0.bin推到/lib/firmware目录下,在Linux控制台依执行如下命令:

echo stop>/sys/class/remoteproc/remoteproc1/state	#关闭RV。
echo amp_rv0.bin>/sys/class/remoteproc/remoteproc1/firmware
echo start>/sys/class/remoteproc/remoteproc1/state	#启动RV

<think>好的,用户想开发一个基于全志T113芯片的播放器,需要了解使用的工具或技术栈。首先,我需要回顾一下之前提供的引用内容,看看有没有相关的信息。 引用[1]提到T113平台使用Tina系统和C906心,支持FreeRTOS编译时有多个配置选项。这可能意味着开发环境需要用到Tina SDK,以及对应的RTOS配置。引用[2]和[4]提到了Linux SDK和Buildroot构建系统,还有Qt框架的应用,说明Linux环境下可能需要使用这些工具。引用[3]是关于热成像相机的,但提到了全志T113-S3和海康威视的硬件,可能相关的多媒体处理库或驱动。 全志T113芯片通常用于嵌入式设备,可能有不同的操作系统选择,比如Linux或RTOS。播放器开发需要考虑音视频解码、硬件加速、显示输出等方面。所以工具链可能包括: 1. 开发环境:基于Tina Linux或全志原厂的SDK,可能需要交叉编译工具链,如arm-linux-gnueabihf。 2. 多媒体框架:GStreamer或FFmpeg,这些框架支持硬件加速解码。 3. 图形界面:如果播放器需要UI,可能用Qt或LVGL,引用[4]提到Qt的配置。 4. 硬件加速:全志的VPU驱动,可能需要调用特定的库,比如libcedarx。 5. 构建系统:Buildroot或Yocto来定制根文件系统,引用[2]提到了Buildroot的使用。 6. 调试工具:如gdb、strace等,以及日志系统。 用户可能需要具体的步骤,比如如何搭建编译环境,如何集成解码库,如何优化性能等。还要考虑是否支持实时系统,比如FreeRTOS,但播放器通常需要较高的处理能力,可能更倾向于Linux系统。此外,引用中提到的配置选项(如t113_s4_c906_evb1_auto)可能对应不同的硬件配置,需要根据具体开发板选择。 需要确认用户的目标操作系统是Linux还是RTOS,但根据播放器的需求,Linux可能更合适。因此,回答应涵盖Linux下的工具链、多媒体框架、UI库以及相关的构建和调试工具。同时,要参考引用中提到的Tina系统、Buildroot和Qt配置,确保建议的工具与T113兼容。</think>开发全志T113芯片的播放器需要结合硬件特性和嵌入式系统特点选择技术栈。以下是分步骤说明: ### 一、基础开发工具链 1. **交叉编译工具** 使用`arm-linux-gnueabihf`工具链,需在SDK中配置环境变量: ```bash export PATH=$PATH:/path/to/toolchain/bin ``` 全志官方SDK通常包含预编译工具链[^1][^2]。 2. **系统构建工具** - **Tina Linux系统**:全志定制化嵌入式Linux发行版,支持多媒体组件裁剪 - **Buildroot**:用于生成根文件系统,引用案例中可见`buildroot-201902`的使用[^2] ### 二、多媒体处理心 1. **硬件解码库** 调用全志**CedarX**多媒体框架实现硬解码: ```c #include <cedarx/cedarx.h> CedarXPlayer* player = CedarXPlayerCreate(); player->setDataSource(player, "/media/test.mp4"); player->prepareAsync(player); // 异步准备解码 ``` 需在SDK中集成`libcedarx.so`动态库[^3]。 2. **软件解码方案** 使用**FFmpeg**+硬件加速: ```bash ./configure --enable-cross-compile --arch=arm --target-os=linux \ --enable-libcedarx # 启用全志硬件加速 ``` ### 三、图形界面开发 1. **Qt框架** 配置`.pro`文件支持嵌入式显示: ```qmake QT += multimedia quick QT_ARCH = arm CONFIG += link_pkgconfig PKGCONFIG += cedarx # 绑定硬件解码 ``` 引用案例显示Qt已适配T113架构[^4]。 2. **LVGL轻量方案** 适用于RTOS环境: ```c lv_obj_t * btn = lv_btn_create(lv_scr_act()); lv_obj_add_event_cb(btn, play_callback, LV_EVENT_CLICKED, NULL); ``` ### 四、关键技术点 1. **视频输出** 通过`/dev/fb0`帧缓冲区或DRM接口实现渲染: ```c int fd = open("/dev/fb0", O_RDWR); struct fb_var_screeninfo vinfo; ioctl(fd, FBIOGET_VSCREENINFO, &vinfo); // 获取屏幕参数 ``` 2. **音频管道** 使用ALSA库对接硬件声卡: ```c snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0); snd_pcm_hw_params_set_format(handle, hw_params, SND_PCM_FORMAT_S16_LE); ``` ### 五、开发调试工具 1. **系统烧录** 使用全志PhoenixSuit工具通过USB OTG烧录镜像文件(如`t113_i_linux_ok113i_uart0.img`)[^2] 2. **性能分析** - `top`/`htop`监控CPU/内存 - `gprof`进行函数级性能剖析 - `perf`工具分析硬件事件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值