社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
电子技术交流
›
国产芯片交流
›
全志T113双核异构处理器的使用基于Tina Linux5.0——异 ...
返回列表
发新帖
回复
阅
59
|
回
0
aleksib
当前在线
纯净的硅(中级)
最后登录
2024-11-20
在线时间
38 小时
威望
967分
芯积分
480分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
0
aleksib
278
帖子
0
TA的资源
纯净的硅(中级)
+ 好友
私信
楼主
发表于2024-11-20 09:42
只看该作者
全志T113双核异构处理器的使用基于Tina Linux5.0——异构双核通信的具体实现
[复制链接]
**5、TinaLinux异构双核通信的具体实现:** 本章节以SBC-T113S4主板的TinaLinux为例,介绍异构双核通信的实现。该方法也同样适用于T113i平台。 本章节主要涉及到Tina Linux内核的配置、Tina Linux文件系统(openwrt)的配置、Freertos的配置。其中Tina Linux内核的配置包括设备树的配置及相关内核驱动及协议的配置;Tina Linux文件系统(openwrt)的配置包括异构双核通信测试程序和小核C906终端的配置;Freertos的配置包括通信协议的配置。 **5.1、TinaLinux的配置** **5.1.1、Tina内核设备树配置** 在Tina根目录下,进入设备树目录(根据不同的处理器,进入不同的处理器目录),如下演示的是以SBC-T113S主板为例,该主板的主处理器是T113-S4,其配置文件都放在device/config/chips/t113_s4/configs/sbc_t113s4_nand/的目录下,内核的设备树则放在device/config/chips/t113_s4/configs/sbc_t113s4_nand/linux-5.4目录: ``` xxx@xxx:~/workspaces/t113_tina5.0$ cd device/config/chips/t113_s4/configs/sbc_t113s4_nand/ ``` **编辑设备树** ``` xxx@xxx:~/workspaces/t113_tina5.0/device/config/chips t113_s4/configs/sbc_t113s4_nand/linux-5.4 $ vi board.dts ``` 在设备树文件中找到C906相关的设备树节点,设备树默认设置为: ``` reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; /* c906 */ c906_ddr: c906_ddr@42300000 { reg = <0x0 0x42300000 0x0 0x00600000>; no-map; }; /* * The name should be "vdev%dbuffer". * Its size should be not less than * RPMSG_BUF_SIZE * (num of buffers in a vring) * 2 * = 512 * (num of buffers in a vring) * 2 */ rv_vdev0buffer: vdev0buffer@42900000 { compatible = "shared-dma-pool"; reg = <0x0 0x42900000 0x0 0x40000>; no-map; }; /* * The name should be "vdev%dvring%d". * The size of each should be not less than * PAGE_ALIGN(vring_size(num, align)) * = PAGE_ALIGN(16 * num + 6 + 2 * num + (pads for align) + 6 + 8 * num) * * (Please refer to the vring layout in include/uapi/linux/virtio_ring.h) */ rv_vdev0vring0: vdev0vring0@42940000 { reg = <0x0 0x42940000 0x0 0x2000>; no-map; }; rv_vdev0vring1: vdev0vring1@42942000 { reg = <0x0 0x42942000 0x0 0x2000>; no-map; }; /* dsp0 */ dsp0ddr: dsp0ddr@42000000 { reg = <0x0 0x42000000 0x0 0x00100000>; no-map; }; dsp0_rpbuf_reserved: dsp0_rpbuf@42244000 { compatible = "shared-dma-pool"; no-map; reg = <0x0 0x42244000 0x0 0x8000>; }; /* * The name should be "vdev%dbuffer". * Its size should be not less than * RPMSG_BUF_SIZE * (num of buffers in a vring) * 2 * = 512 * (num of buffers in a vring) * 2 */ vdev0buffer: vdev0buffer@42200000 { compatible = "shared-dma-pool"; reg = <0x0 0x42200000 0x0 0x40000>; no-map; }; /* * The name should be "vdev%dvring%d". * The size of each should be not less than * PAGE_ALIGN(vring_size(num, align)) * = PAGE_ALIGN(16 * num + 6 + 2 * num + (pads for align) + 6 + 8 * num) * * (Please refer to the vring layout in include/uapi/linux/virtio_ring.h) */ vdev0vring0: vdev0vring0@42240000 { reg = <0x0 0x42240000 0x0 0x2000>; no-map; }; vdev0vring1: vdev0vring1@42242000 { reg = <0x0 0x42242000 0x0 0x2000>; no-map; }; /* * dsp ram addr */ dsp0dram: dsp0dram@400000 { reg = <0x0 0x400000 0x0 0x10000>; no-map; }; dsp0iram0: dsp0iram0@420000 { reg = <0x0 0x420000 0x0 0x8000>; no-map; }; dsp0iram1: dsp0iram1@440000 { reg = <0x0 0x440000 0x0 0x8000>; no-map; }; }; mailbox_heartbeat: mailbox_heartbeat@0 { compatible = "mailbox-heartbeat"; rproc-np = <&c906_rproc>; mboxes = <&msgbox 6>, <&msgbox 7>; mbox-names = "tx", "rx"; status = "okay"; }; dsp0_rproc: dsp_rproc@0 { compatible = "allwinner,hifi4-rproc", "simple-bus"; clock-frequency = <600000000>; clocks = <&ccu CLK_PLL_PERIPH0_2X>, <&ccu CLK_DSP>, <&ccu CLK_BUS_DSP_CFG>, <&r_ccu CLK_R_AHB>; clock-names = "pll", "mod", "cfg", "ahbs"; resets = <&ccu RST_BUS_DSP>, <&ccu RST_BUS_DSP_CFG>, <&ccu RST_BUS_DSP_DBG>, <&ccu RST_BUS_MSGBOX1>; reset-names = "mod-rst", "cfg-rst", "dbg-rst", "msg-rst"; reg = <0x0 0x03000008 0x0 0x04>, <0x0 0x01700000 0x0 0x40>; reg-names = "sram-for-cpux", "hifi4-cfg"; mboxes = <&msgbox 0>; mbox-names = "arm-kick"; memory-region = <&dsp0ddr>, <&vdev0buffer>, <&vdev0vring0>, <&vdev0vring1>, <&dsp0dram>, <&dsp0iram0>, <&dsp0iram1>; memory-mappings = /* < DA len PA > */ /* local SRAM via external bus */ < 0x28000 0x20000 0x28000 >, /* local SRAM via internal bus */ < 0x400000 0x10000 0x400000 >, < 0x420000 0x8000 0x420000 >, < 0x440000 0x8000 0x440000 >, /* DDR front 256MB */ < 0x10000000 0x10000000 0x40000000 >, /* local SRAM via internal bus */ < 0x20028000 0x10000 0x400000 >, < 0x20038000 0x8000 0x420000 >, < 0x20040000 0x8000 0x440000 >, /* DDR front 256MB */ < 0x30000000 0x10000000 0x40000000 >, /* DDR front 1GB */ < 0x40000000 0x40000000 0x40000000 >, /* DDR front 1GB */ < 0x80000000 0x40000000 0x40000000 >, /* DDR front 1GB */ < 0xC0000000 0x40000000 0x40000000 >; id = <0>; status = "okay"; }; rpbuf_controller0: rpbuf_controller@0 { compatible = "allwinner,rpbuf-controller"; remoteproc = <&dsp0_rproc>; ctrl_id = <0>; /* index of /dev/rpbuf_ctrl */ //iommus = <&mmu_aw 5 1>; memory-region = <&dsp0_rpbuf_reserved>; status = "okay"; }; rpbuf_sample: rpbuf_sample@0 { compatible = "allwinner,rpbuf-sample"; rpbuf = <&rpbuf_controller0>; status = "okay"; }; c906_rproc: c906_rproc@0 { compatible = "allwinner,c906-rproc"; clock-frequency = <800000000>; clocks = <&ccu CLK_PLL_PERIPH0_800M>, <&ccu CLK_RISCV>, <&ccu CLK_BUS_RISCV_CFG>, <&ccu CLK_RISCV_RST>, <&ccu CLK_BUS_RISCV>; clock-names = "pll", "mod", "cfg", "riscv-rst", "riscv-gate"; resets = <&ccu RST_BUS_RISCV_CFG>, <&ccu RST_BUS_MSGBOX2>; reset-names = "cfg-rst", "msg-rst"; memory-region = <&c906_ddr>, <&rv_vdev0buffer>, <&rv_vdev0vring0>, <&rv_vdev0vring1>; reg = <0x0 0x06010000 0x0 0x1000>; reg-names = "c906-cfg"; mboxes = <&msgbox 4>; mbox-names = "arm-kick"; memory-mappings = /* DA len PA */ /* DDR for c906*/ < 0x40000000 0x10000000 0x40000000 >; firmware-name = "amp_rv0.bin"; status = "okay"; }; ``` SBC-T113S主板暂时使用uart3打印C906小核的打印信息(可以分配其他串口作为C906的终端,只要大核和小核的分配不冲突即可),为防止Tina内核抢占uart3,所以务必禁用uart3节点。 ``` &uart3 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&uart3_pins_a>; pinctrl-1 = <&uart3_pins_b>; status = "disabled"; }; ``` **5.1.2、Tina内核配置** 在Tina根目录下,执行make kernel_menuconfig,例如: ``` xxx@xxx:~/workspaces/t113_tina5.0$ make kernel_menuconfig ``` * **使能硬件支持** 进入内核配置界面后,进入Device Drivers 目录,选中Mailbox Hardware Support: ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731979568775-9140a6ef-b546-41b4-968d-4766c0248be4-image.png) 选中后进入Mailbox Hardware Support选项中,选中Allwinner Mailbox support: ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731979583564-459fda62-69d7-4b3f-999c-92af0dddccc8-image.png) * **使能RPMsg驱动** 进入如下目录中 → Device Drivers → Rpmsg drivers 选中如下配置 <*> allwinnertech rpmsg hearbeat driver <*> allwinner rpmsg tty driver <*> sunxi rpmsg ctrl driver <*> Virtio RPMSG bus driver 选中完成后如下图所示: ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731979619834-5fe56d87-3005-4552-aa3b-5398d3390679-image.png) * **使能RPBuf驱动** 进入如下目录中 → Device Drivers → Rpbuf drivers -*- Rpbuf device interface <*> Rpmsg-based Rpbuf service driver <*> Allwinner Rpbuf controller driver <*> Allwinner Rpbuf sample driver 注: 1)Allwinner Rpbuf sample driver只是内核层的一个demo程序,可以不选。 2)如果异构双核不进行大数据传输,RPBuf驱动可以不选。 选中完成后如下图所示: ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731979662300-8810021b-226a-4785-b61f-4fc582b3cef5-image.png) * **使能共享内存驱动** 进入如下目录中 → Device Drivers → Remoteproc drivers 选中如下配置 <*> SUNXI remote processor support ---> <*>Allwinner remoteproc support <*>Allwinner remoteproc hifi4 boot//控制hifi4 dsp小核 <*>Allwinner remoteproc c906 boot ////控制c906小核 如下图所示: ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731979694675-07da5097-ed02-4f1e-a62f-b09002e00414-image.png) 修改完成后,保存内核配置并退出。 **5.1.3、Tina文件系统配置(Openwrt)** 配置中增加了amp_shell,这个是C906的控制台。另外也增加了rpbuf和rpmsg的演示程序,便于后续测试验证。 ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731979735077-8a7bfefd-5684-48dc-8f8b-bd56a7c69c54-image.png) **5.1.4、编译Tina新固件** 在Tina根目录下,输入mkernel指令编译刚刚选中的内核驱动,编译完成后,输入pack,打包生成新镜像(此时RTOS的固件并没有进行更新),例如: ``` xxx@xxx:~/workspaces/t113_tina5.0$ mkernel ... xxx@xxx:~/workspaces/t113_tina5.0$ pack ... ``` 如果需要将RTOS更新一并打包到固件,只要执行make –j32(32表示计算机处理器的线程数,根据具体计算机而定),编译结束后执行pack指令将生成的t113_s4_linux_sbc_t113s4_xxx.img(以SBC-T113S4主板为例)文件拷贝到Windows主机端,此时Tina的固件里面已经包含了新配置的RTOS。 **5.2、C906 FreeRTOS内核配置及应用** 麻雀虽小,一应俱全!FreeRTOS是一个实时的微型操作系统,它和大多数操作系统都一样,都具备内核和文件系统两个部分,内核重点是任务调度和文件系统管理等,文件系统则集成部分现成的指令和相关应用库并方便启动应用(APP)。另外,FreeRTOS还可以配置终端,刚刚说的指令,就是在终端里面执行的。有了调试终端给FreeRTOS应用调试带来了很大的方便。以下将如何配置FreeRTOS终端、如何配置FreeRTOS驱动组件、如何配置FreeRTOS异构通信演示程序等进行说明。 **5.2.1、修改C906链接脚本** C906的FreeRTOS是有运行地址的,该运行地址在Tina内核的DTS中有明确,在RTOS对应的项目中也必须一致。以t113_s4_c906_evb1_auto项目为例,这里说的项目该项目涉及的相关代码核配置信息在SDK所在目录/rtos/lichee/rtos/projects/t113_s4_c906/evb1_auto中,该目录中有如下文件: ``` xxx@xxx:~/workspace/t113_tina5.0/rtos/lichee/rtos/projects/t113_s4_c906/evb1_auto$ tree -l . ├── defconfig ├── defconfig_org ├── freertos.lds.S ├── Kconfig ├── Makefile └── src ├── alsa_config.c ├── assert.c ├── card_default.c ├── FreeRTOSConfig.h ├── hooks.c └── main.c ``` 找到freertos.lds.S文件,该文件保存有C906小核的链接信息。 修改freertos.lds.S,找到MEMORY节点,确认起始地址为0x42300000,长度为0x00600000。此参数需要和Tina设备树中的C906内存参数一致,查看kernel.lds 中MEMORY节点参数为: ``` /* Linker script to configure memory regions. */ MEMORY { RAM (rwx) : ORIGIN = CONFIG_ARCH_START_ADDRESS, LENGTH = CONFIG_ARCH_MEM_LENGTH } ``` CONFIG_ARCH_START_ADDRESS和CONFIG_ARCH_MEM_LENGTH这两个参数在defconfig(和freertos.lds.S同一目录)中,查看defconfig内容如下: ``` # # Architecture Options # # CONFIG_ARCH_ARM is not set CONFIG_ARCH_RISCV=y CONFIG_ARCH_START_ADDRESS=0x42300000 CONFIG_ARCH_MEM_LENGTH=0x600000 CONFIG_LITTLE_ENDIAN=y CONFIG_BITS_PER_LONG=64 # CONFIG_CACHE_ALIGN_CHECK is not set CONFIG_TOOLCHAIN_FLOAT_HARD=y CONFIG_PANIC_CLI=y CONFIG_PANIC_CLI_PWD=y CONFIG_IMG_VERSION_MESSAGE=y ``` 确认和Tina Linux内核的dts配置一致。 Tina Linux内核的dts的配置如下: ``` /* c906 */ c906_ddr: c906_ddr@42300000 { reg = <0x0 0x42300000 0x0 0x00600000>; no-map; }; ``` **5.2.2、RTOS终端使用uart3** 在RTOS定制中,修改引脚分配也是通过修改sys_config.fex来完成的,以t113_s4_c906_evb1_auto项目为例,该文件在在SDK所在目录/rtos/board/t113_s4_c906/evb1_auto/configs目录下。 通过查询数据手册,查看引脚复用功能,假如我们使用PE8和PE9作为uart3作为终端串口: ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731979924630-51d97141-803f-4c54-8324-2a9a0fa12fb8-image.png) 修改uart3节点作为终端串口: ``` [uart_para] uart_debug_port = 3 uart_debug_tx = port:PE08<5><1>
uart_debug_rx = port:PE09<5><1>
``` **5.3、修改RTOS相关组件的配置并编译** 进入SDK所在目录/rtos/,执行source envsetup.sh,单独开起RTOS的编译环境。 然后按照3.2.2章节进入RTOS方案的选择和配置,执行配置指令mrtos_menuconfig, 进入后选中如下配置: ``` → Drivers Options → soc related device drviers → UART Decives [*] support uart3 device [3] cli uart port number ``` ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731979983847-3eae4129-7af5-49ac-801b-03b6b807a05a-image.png) 进入如下目录,选中[*] enable sysconfig,启用读取解析 sys_config.fex 功能 ``` → Drivers Options → soc related device drivers → Common Option [*] enable sysconfig ``` ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731980011889-c75c4609-f137-4a3e-a944-1be021dccca6-image.png) 分别进入如下界面,选择对应的rpmsg/rpbuf/messagebox驱动,这些驱动与Tina Linux中的驱动对应。 ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731980023832-22f32ad2-0dd7-4991-99ac-c48d8f1d31e9-image.png) ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731980029764-720ad873-a333-457f-be05-b4754dba8a71-image.png) ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731980040628-c593e5d8-7f5e-4409-8fad-253e08086cc9-image.png) ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731980046634-c6cb74ef-097e-48c1-9968-bdc9f25fb65b-image.png) 进入如下界面,选中Freertos终端相关配置 [*] Multi Console Support [*] Uart Multi Console Support [ ] Uart Multi Console As Main Console [*] Rpmsg Multi Console Support [*] Rpmsg Multi Console Enable Cache Cmd ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://bbs.aw-ol.com/assets/uploads/files/1731980088972-0285106f-cb98-47ab-9887-f331d1814fe5-image.png) 注:Rpmsg Multi Console Support这个配置是和Tina Linux中的amp_shell控制台对应。 本次演示主要为了演示异构双核通信,配置基本完成。如果用户有其他应用需求,用户可以根据自己的需求进行配置。保存配置退出后,接下来进行编译。 ``` ping@embedall:~/workspace/t113_tina5.0/t113_tinasdk5.0-v1/rtos$ m 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 [LDS] [Linker] projects/t113_s4_c906/evb1_auto/freertos.lds CC build/t113_s4_c906_evb1_auto/arch/common/common.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/common/exception.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/common/clocksource.o AS build/t113_s4_c906_evb1_auto/arch/common/sys_config.o CC build/t113_s4_c906_evb1_auto/arch/common/version.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/sun8iw20p1/sun8i.o AS build/t113_s4_c906_evb1_auto/arch/risc-v/c906/head_s.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/c906/plic.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/c906/cache.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/c906/spinlock.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/c906/clic.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/c906/platform/platform_sun8iw20.o CC build/t113_s4_c906_evb1_auto/arch/risc-v/c906/interrupt.o CC build/t113_s4_c906_evb1_auto/components/thirdparty/console/FreeRTOS_CLI.o CC build/t113_s4_c906_evb1_auto/components/common/thirdparty/md5/md5.o …… LD build/t113_s4_c906_evb1_auto/components/common/thirdparty/openamp/open-amp/obj-in.o LD build/t113_s4_c906_evb1_auto/components/common/thirdparty/openamp/obj-in.o LD build/t113_s4_c906_evb1_auto/components/common/thirdparty/obj-in.o LD build/t113_s4_c906_evb1_auto/components/obj-in.o LD build/t113_s4_c906_evb1_auto/drivers/rtos-hal/hal/source/ccmu/sunxi-ng/obj-in.o LD build/t113_s4_c906_evb1_auto/drivers/rtos-hal/hal/source/ccmu/obj-in.o LD build/t113_s4_c906_evb1_auto/drivers/rtos-hal/hal/source/twi/obj-in.o LD build/t113_s4_c906_evb1_auto/drivers/rtos-hal/hal/source/obj-in.o LD build/t113_s4_c906_evb1_auto/drivers/rtos-hal/hal/obj-in.o LD build/t113_s4_c906_evb1_auto/drivers/obj-in.o LD build/t113_s4_c906_evb1_auto/kernel/FreeRTOS-orig/obj-in.o LD build/t113_s4_c906_evb1_auto/kernel/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 SizeRegion 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 10472214096 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.f ``` 编译完成后会在SDK目录下的/rtos/board/t113_s4_c906/evb1_auto/bin目录生成rtos_riscv_sun8iw20p1.fex和freertos.fex,这两个文件是一样的。 **5.4、核对所选FreeRTOS组件** 配置FreeRTOS组件是为了完成FreeRTOS APP的开发。本次的APP要完成的是异构通信,我们查看t113_s4_c906_evb1_auto项目代码了解其运行过程。 t113_s4_c906_evb1_auto项目的相关代码核配置信息在SDK所在目录/rtos/lichee/rtos/projects/t113_s4_c906/evb1_auto中,该目录中有如下文件: ``` xxx@xxx:~/workspace/t113_tina5.0/rtos/lichee/rtos/projects/t113_s4_c906/evb1_auto$ tree -l . ├── defconfig ├── defconfig_org ├── freertos.lds.S ├── Kconfig ├── Makefile └── src ├── alsa_config.c ├── assert.c ├── card_default.c ├── FreeRTOSConfig.h ├── hooks.c └── main.c ``` 重点查看main.c文件,该文件内容如下: ``` #include
#include
#include
#include
#include "interrupt.h" #include
#include "FreeRTOS.h" #include "task.h" #include
#include
#ifdef CONFIG_DRIVERS_MSGBOX #include
#endif #ifdef CONFIG_COMPONENTS_AW_DEVFS #include
#endif #ifdef CONFIG_COMPONENTS_OPENAMP #include
extern int openamp_init(void); extern int rpbuf_init(void); void openamp_init_thread(void *param) { (void)param; openamp_init(); #ifdef CONFIG_RPMSG_CLIENT rpmsg_ctrldev_create(); #endif #ifdef CONFIG_RPMSG_HEARBEAT extern int rpmsg_heart_init(void); rpmsg_heart_init(); #endif #ifdef CONFIG_MULTI_CONSOLE extern int multiple_console_init(void); multiple_console_init(); #endif #ifdef CONFIG_COMPONENTS_RPBUF extern int rpbuf_init(void); rpbuf_init(); #endif hal_thread_stop(NULL); } #endif void cpu0_app_entry(void *param) { (void)param; #ifdef CONFIG_COMPONENTS_AW_DEVFS devfs_mount("/dev"); #endif #if defined CONFIG_COMPONENTS_OPENAMP void *thread; thread = hal_thread_create(openamp_init_thread, NULL, "amp_init", 8 * 1024, HAL_THREAD_PRIORITY_SYS); if (thread != NULL) hal_thread_start(thread); #endif #ifdef CONFIG_COMPONENT_CLI vCommandConsoleStart(0x1000, HAL_THREAD_PRIORITY_CLI, NULL); #endif vTaskDelete(NULL); } ``` 该程序的入口函数是cpu0_app_entry,该程序通过函数hal_thread_create建立了openamp_init_thread线程。该线程通过openamp_init函数进行了openamp框架的初始化,同时如果选择了rpmsg通信,也进行了rpmsg通信的初始化等。可判定所选的FreeRTOS相关组件可以满足要求。 **5.5、主板内使能C906** 启动主板,打开串口终端进入主板控制台,将freertos.fex拷贝到/lib/firmware目录下。假设使用ADB功能将文件拷贝到主板的root/目录下 ``` root@TinaLinux:~# cd /root/ root@TinaLinux:~# ls freertos.fex ``` 将root目录下的freertos.fex拷贝到/lib/firmware目录下 ``` root@TinaLinux:~# cp freertos.fex /lib/firmware/ root@TinaLinux:~# ls /lib/firmware/ boot_xr829.bin fw_xr829.bin freertos.fex sdd_xr829.bin etf_xr829.bin fw_xr829_bt.bin regulatory.db ``` 拷贝完成后,可以在/lib/firmware目录下看到小核固件。接下来把主板的UART3(在RTOS配置中已经把UART3配置成终端串口)与计算机的串口连接起来,并配置计算机串口波特率为115200,通过计算机串口可以查看小核的相关信息。在Tina Linux主板串口终端输入指令: ``` root@TinaLinux:~# echo freertos.fex > /sys/class/remoteproc/remoteproc1/firmware ``` 这一步是将freertos.fex固件放在硬件节点firmware 。接下来启动C906固件,指令如下: ``` root@TinaLinux:~#echo start > /sys/class/remoteproc/remoteproc1/state remoteproc remoteproc1: powering up c906_rproc [ 1489.549950] remoteproc remoteproc1: Booting fw image amp_rv0.bin, size 224392 [ 1489.558282] remoteproc remoteproc1: the version: UTS - Thu, 24 Oct 2024 14:39:36 +0800 [ 1489.558282] Compile Time - 14:39:36 [ 1489.571527]remoteproc1#vdev0buffer: assigned reserved memory node vdev0buffer@42900000 [ 1489.581143] virtio_rpmsg_bus virtio0: rpmsg host is online [ 1489.587680]remoteproc1#vdev0buffer: registered virtio0 (type 7) [ 1489.594617] remoteproc remoteproc1: remote processor c906_rproc is now up root@TinaLinux:/# [ 1489.695824] virtio_rpmsg_bus virtio0: creating channel sunxi,rpmsg_ctrl addr 0x400 [ 1489.715788] virtio_rpmsg_bus virtio0: creating channel rpbuf-service addr 0x401 [ 1489.724381] rpbuf_service_rpmsg virtio0.rpbuf-service.-1.1025: rpmsg device parent 0: virtio0 [ 1489.734036] rpbuf_service_rpmsg virtio0.rpbuf-service.-1.1025: rpmsg device parent 1: remoteproc1#vdev0buffer [ 1489.745237] rpbuf_service_rpmsg virtio0.rpbuf-service.-1.1025: rpmsg device parent 2: remoteproc1 [ 1489.755242] rpbuf_service_rpmsg virtio0.rpbuf-service.-1.1025: rpmsg device parent 3: 6010000.c906_rproc [ 1489.766110] virtio_rpmsg_bus virtio0: creating channel sunxi,rpmsg_heartbeat addr 0x402 使能后可以在UART3上查看RV核的信息: cpu0>help Lists all the registered commands [ help-built-in]--------------Lists all the built-in registered commands [ ts]--------------Displays a table showing the state of each FreeRTOS task [ run-time-stats]--------------Displays a table showing how much processing time each FreeRTOS task has used [ echo-3-parameters]--------------echo-3-parameters
: Expects three parameters, echos each in turn [ echo-parameters]--------------echo-parameters <...>: Take variable number of parameters, echos each in turn [ rpbuf_demo]--------------rpbuf demo [ rpbuf_test]--------------rpbuf test demo [ console_dump]--------------dum all cli console info [ exit]--------------Console Exit Command [ msgbox_demo]--------------msgbox demo [ help]--------------List all registered commands [ backtrace]--------------Backtrace Command [ md5sum]--------------Calculate md5sum [rproc_dump_mapping]--------------rproc dump mapping [ eptdev_send]--------------send data used by rpmsg ept test [ eptdev_close]--------------close rpmsg ept client [ rpmsg_list_epts]--------------list endpoints [ rpmsg_list_listen]--------------list listen [ jtag]--------------init jtag gpio [rpmsg_ctrlde_release]--------------release rpmsg ctrldev [rpmsg_ctrldev_init]--------------init rpmsg ctrldev [ eptdev_reset]--------------reset rpmsg ctrl [ eptdev_clear]--------------clear rpmsg name group [ eptdev_unbind]--------------unbind rpmsg ept listen [ eptdev_bind]--------------bind rpmsg ept name [ rpmsg_test]--------------rpmsg test [ rpmsg_test_send]--------------rpmsg test send [ rpmsg_test_init]--------------init rpmsg test [ rpmsg_test_extend]--------------rpmsg test with another rproc [ hal_msgbox]--------------hal msgbox cpu0> 查看RV核目前的任务: cpu0>ts Task StatePriorityStack # ************************************************ Name State Pri HWM Idx StkCur StkBot CLI X 18 3742 5 0x42363e30 0 x4235c510 IDLE R 0 980 2 0x42348250 0 x423463b0 Tmr Svc B 31 1978 3 0x4234c220 0 x423483c0 ctrldev B 6 4026 8 0x4237d460 0 x42375690 cpu-vring-ipi B 31 8128 7 0x42374780 0 x42364950 ```
此帖出自
国产芯片交流论坛
点赞
关注
(0)
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
免费下载 | 安森美电动汽车充电白皮书,看碳化硅如何缓解“里程焦虑”!
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
TI 有奖直播 | 使用基于 Arm 的 AM6xA 处理器设计智能化楼宇
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
有奖直播报名:大联大世平集团&恩智浦 | AI 无所不在,单板电脑也可以
开源项目
更多>>
USB2TTL_CP2104
51贪吃蛇点阵屏
网络多功能像素灯Pro版(充电拓展版)
LT3763EFE 20A、脉宽调制、单 LED 驱动器的典型应用电路
AD7837SQ 双路 12 位数模转换器的典型应用
101020063, Grove - 响度传感器评估套件旨在检测环境声音
使用 Analog Devices 的 LT1086CM 的参考设计
IRAC27951SR-240W,具有 IRS27951 谐振半桥控制器的评估板
【物联网】鸿蒙智能WIFI开关+630545A
2019电赛A题-无线充电小车设计方案及报告(国二,南航)
随便看看
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS编译开发说明
3、RTOS编译开发说明3*RTOSSDK相关代码已集成到TinaLinux开发环境,TinaLinux开发环境下的rtos子目录即为RTOS开发环境。```├──brandy├──bsp├──build├──buildroot├──buildtop_build.sh├──device├──kernel├──openwrt├──out├──pla ...
【玩转多核异构】双核高速率CAN-FD详细评测
*为了能够让更多的工程师朋友了解多核异构处理器,飞凌嵌入式特别推出了【玩转多核异构】专题,帮助大家解决在多核异构处理器的开发过程中遇到的问题。【玩转多核异构】专题持续更新中,欢迎您的订阅关注。引言凭借实时性、抗干扰性和安全性等优点,CAN2s,每 ...
求助大神关于POE供电与网络通信问题
各位大佬,小弟在测试POE口通讯时发现,在不带载的情况下网络可正常通信,但是一旦带载,网络信号就会被中断。按说网络信号是差分信号,和直流供电是不影响的,所以不知道该怎么分析解决了,求大佬们帮忙分析一下问题!小弟感激不尽!
到底开关速度多少ns才算是高速MOS?怎么定义这个是不是高频MOS
有两个地方要加载库 是不是都要添加库的路径
求救stm8l中的spi与eeprom冲突
多地竞相布局 5G带动自动驾驶加速步入现实
coldfire v2介绍
关于对CRC码的校验
关于datasheet中输入阻抗的疑问?
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
电磁兼容试验项目
关系型数据库
伺服控制系统
数据采集仪
主控制芯片
电流转换器
电容式电机
正向电压
矫顽场强
贴片LED
相关文章
更多>>
珠海航展的这些展品,令人眼前一亮
今年的珠海航展非常火爆,作为我国军工“秀肌肉”的绝佳舞台,过去一些“过于先进,不宜展示”的东西,我们也能够有机会“一睹芳容”。 本次航展在珠海航展历史上和展品内容上都有不少亮点。其中最值得关注的,
曝iPhone 17全系首发3nm A19系列芯片:无缘台积电2nm工艺制程
11月19日消息,分析师Jeff Pu在报告中提到,iPhone 17、iPhone 17 Air首发搭载A19芯片,iPhone 17 Pro和iPhone 17 Pro Max首发搭载A19 P
供应链称上游元器件要大降价:国产手机现涨价潮后会主动下调售价吗
11月19日消息,市场调研机构GfK中国的报告显示,国产手机均价在2023年第三季度已涨至3480元,经过今年的涨价,国产手机的均价很可能会迈入4000元大关。 至于涨价原因,有专家分析称,一部分原
英伟达联手谷歌,加速开发量子计算处理器
消息称苹果将拿出近 1 亿美元用于解除印尼 iPhone 16 系列销售禁令
英伟达新一代 Blackwell GPU 被曝存在过热问题,导致交付延迟
我国正研发六足登月机器人:腿坏也不怕
消息称塔塔公司收购和硕在印度的唯一一家iPhone工厂,深化与苹果合作
华为战略部部长盖刚:开源欧拉操作系统累计装机量超1000万套
从探头到电源,泰克正引领电力电子测试全面创新
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
精选推荐
帮忙分析下EMI不过的原因
报名剩2天:30套RV1106 Linux开发板(带摄像头),邀您挑战边缘AI~
拯救电源EMI的铁三角:电感、磁珠、电容
开关电源上拉电阻和上拉电阻电路图解
启明云端&触觉智能与您相约2024年慕尼黑国际电子元器件博览会,不见不散!
深度学习框架的相关讨论
[STM32H7R/S]测评 ⑦制作一个NANO EDGE AI STUDIO采集数据使用的Data Logger
启明云端&触觉智能与您相约2024年慕尼黑国际电子元器件博览会,不见不散!
【2024 DigiKey创意大赛】基于树莓派的幸福晚年辅助宝
双11有什么较新的技术书推荐吗?打算屯一批。
有奖直播报名| 高可靠性IGBT新选择 —— 安世半导体650V IGBT
【直播时间】12月19日(周四)下午15:00-16:30
【直播好礼】定制双肩商务包、30元京东卡、吸管玻璃杯
查看 »
安世半导体直播报名中
直播主题:安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
直播时间:12月17日(周二)下午14:00
报名就有机会获得:定制双肩商务包、30元京东卡、吸管玻璃杯
查看 »
PI 电源小课堂 | 无 DC-DC 变换实现多路高精度输出反激电源
时间:即日起-12月15日
看视频学习电源干货,答题赢取京东卡!
查看 »
参会有好礼 | 2024 瑞萨电子MCU/MPU工业技术研讨会
深圳站:11月30日(周六)深圳湾万怡酒店
上海站:12月06日(周五)上海喜玛拉雅酒店
奖励设置:现金红包、螺丝刀套装或30元京东卡
查看 »
Littelfuse 新品赋能电子产品安全可靠并高效, 10+挑战等你探索!
Littelfuse 应用赋能星球,覆盖了诸多应用痛点及解决办法,邀请工程师一起探索,解锁更多设计力!
查看 »
了解英飞凌新品AIROC™ CYW5591x 无线MCU,答题赢好礼!
无线键盘鼠标套装、智能音箱、登山包、收纳包
查看 »
下载资料赢好礼!看Vicor模块化电源解决方案如何推动创新
活动时间:即日起-2024年12月31日
如何参与:点击活动页内您想了解的模块,找到资料下载即可参与抽奖,活动结束后统一发奖!
查看 »
有奖活动|英飞凌高密度双相电源模块为高性能运算平台而生
活动时间:即日起-12月15日
活动奖励:蓝牙音箱、氮化镓充电器套装、黑色小背包
查看 »
本月精选下载推荐:
Vishay——选型-汽车级表面贴装和通孔超快整流器
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
关闭
站长推荐
1
/10
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
嵌入式系统
单片机
国产芯片交流
电机驱动控制
FPGA/CPLD
模拟电子
电源技术
PCB技术
RF/无线
传感器
综合技术交流
下载中心专版
大学堂专版
测评中心专版
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
行业应用
汽车电子
移动便携
医疗电子
工控电子
安防电子
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛