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└──tools3.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│ ├── boot**.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│ ├── boot**.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 #配置环境变量我们看到可以选择的RTOS方案,即是LICHEE_RTOS_PROJECT_NAME字段可以配置的RTOS方案。 last=t113_s4_c906_evb1_autoYou're building on LinuxLunch 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_autoWhich 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_rtoslast=t113_s4_c906_evb1_autoYou're building on LinuxLunch 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_autoWhich would you like? [Default t113_s4_c906_evb1_auto]: 7select=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/rtosRTOS_TARGET_ARCH=riscvRTOS_TARGET_CHIP=sun8iw20p1RTOS_TARGET_DEVICE=t113_s4_c906RTOS_PROJECT_NAME=t113_s4_c906_evb1_auto============================================Run mrtos_menuconfig to config rtosRun 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$ mrtosbuild 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.elfif [ -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; fiMemory 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.elfcopying /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根目录中,先选择好整体平台方案,见如下说明: 1、首先使用如下命令选择整体平台方案 ./build.sh config2、然后RTOS相关操作命令如下 ./build.sh rtos #单独编译RTOS方案./build.sh rtos menuconfig #修改RTOS配置文件./build.sh rtos clean #清除RTOS编译中间文件注意:执行./build.sh不会编译RTOS 1、首先使用如下命令选择整体平台方案 source build/envsetup.sh #生效环境变量lunch #选择openwrt方案2、执行make会先编译RTOS,再编译Tina 在Tina根目录下,执行了source build/envsetup.sh配置环境后,可使用RTOS快捷命令进行RTOS的配置和编译等。 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 projectlast=t113_s4_c906_evb1_autoselect=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/rtosRTOS_TARGET_ARCH=riscvRTOS_TARGET_CHIP=sun8iw20p1RTOS_TARGET_DEVICE=t113_s4_c906RTOS_PROJECT_NAME=t113_s4_c906_evb1_auto============================================Run mrtos_menuconfig to config rtosRun m or mrtos to build rtosbuild 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.elfif [ -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; fiMemory 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.elfcopying /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.5、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/firmwareecho start>/sys/class/remoteproc/remoteproc1/state #启动RV
|