Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RISC-V_milk-v_CV1800B
milkv-duo256 Linux 下使用 Remoteproc 启动小核 RT-Thead 系统
发布于 2024-08-22 20:39:08 浏览:233
订阅该版
[tocm] milkv-duo 系列开发板包括duo/duo256/duos,RISCV64双核,大小核均已支持 RT-Thread 系统。 milkv-duo 官方 Linux-SDK arduino 分支 [https://github.com/milkv-duo/duo-buildroot-sdk/tree/arduino](https://github.com/milkv-duo/duo-buildroot-sdk/tree/arduino) 已经支持了 Linux 下使用 remoteproc 启动小核系统,本文主要介绍通过 remoteproc 启动小核 RT-Thread 系统的步骤。 ## Linux 固件编译 1. 下载 [milkv-duo arduino](https://github.com/milkv-duo/duo-buildroot-sdk/tree/arduino) 分支的 SDK,并切换到该分支。 ```shell $ git clone https://github.com/milkv-duo/duo-buildroot-sdk -b arduino $ cd duo-buildroot-sdk ``` 2. 编译 根据目标开发板,选择 `milkv-duo-sd` 或者 `milk-duo256m-sd`,然后执行以下命令进行编译。 ```shell $ ./build.sh lunch ``` 编译完成后,将 output 目录下的 image 镜像文件烧录至 SD 卡。 或直接使用官方已经编译完成的镜像文件: - [milkv-duo-sd](https://github.com/milkv-duo/duo-buildroot-sdk/releases/download/Duo-V1.1.2/arduino-milkv-duo-sd-v1.1.2-2024-0801.img.zip) - [milkv-duo256m-sd](https://github.com/milkv-duo/duo-buildroot-sdk/releases/download/Duo-V1.1.2/arduino-milkv-duo256m-sd-v1.1.2-2024-0801.img.zip) 烧录完成后将 SD 卡插入开发板,并启动 Linux 系统,可以在启动日志中看到 remoteproc 服务已经正常启动: ```shell [ 1.089982] usbhid: USB HID core driver [ 1.095181] remoteproc remoteproc0: c906l_rproc@0 is available [ 1.101495] remoteproc remoteproc0: powering up c906l_rproc@0 [ 1.108062] usbcore: registered new interface driver snd-usb-audio [ 1.118110] remoteproc remoteproc0: Direct firmware load for cvirtos.elf failed with error -2 ``` 默认没有 cvirtos.elf 文件,所以加载失败。 ## 小核系统编译 1. 下载 [RT-Thread](https://github.com/RT-Thread/rt-thread) 源码,milkv-duo 系列开发板在 bsp/cvitek 目录下,小核对应的 c906_little 。 ```shell $ git clone https://github.com/RT-Thread/rt-thread.git $ cd rt-thread/bsp/cvitek/c906_little ``` 根据 README 相关说明,正确配置 toolchain 目录,并根据当前目标开发板,选择正确的目标开发板。 ```shell $ scons --menuconfig Board Type (milkv-duo256m) ---> ( ) milkv-duo (X) milkv-duo256m ``` 默认为 milkv-duo256m,无需修改。 2. 编译 ```shell $ scons -j8 ``` 编译完成后在 bsp/cvitek/c906_little 目录下会生成 rtthread.elf 文件,该文件即为小核 elf 文件。 ## 小核系统启动 1. 将小核 elf 文件拷贝到 Linux 系统中,例如拷贝到 /tmp 目录下。 ```shell $ scp rtthread.elf root@192.168.42.1:/lib/firmware ``` 2. 在 Linux 系统中执行以下命令启动小核系统。 ```shell $ cd /lib/firmware $ echo -n rtthread.elf > /sys/class/remoteproc/remoteproc0/firmware $ echo start > /sys/class/remoteproc/remoteproc0/state ``` echo -n 表示不换行输出。 3. 停止小核系统 ```shell $ echo stop > /sys/class/remoteproc/remoteproc0/state ``` 启动成功后,可以看到小核系统正常运行,并输出 RT-Thread 版本信息。 ```shell RT_HW_HEAP_BEGIN:8fe335c0 RT_HW_HEAP_END:90000000 size: 1886784 \ | / - RT - Thread Operating System / | \ 5.2.0 build Aug 18 2024 17:32:46 2006 - 2024 Copyright by RT-Thread team Hello, RISC-V! msh > ``` 小核默认日志输出在 uart1 口 (GP0/GP1),波特率为 115200。 ![milk-v-duo-gpio.png](https://oss-club.rt-thread.org/uploads/20240822/4255ba9fdf082453dcd64e1d1e76e0b5.png.webp) ## 自动加载小核系统 上面提到,在 Linux 系统启动时,remoteproc 服务会自动加载小核系统,但是默认没有 cvirtos.elf 文件,所以加载失败。该文件在 Linux 设备树中定义。 - milkv-duo: build/boards/default/dts/cv180x/cv180x_default_memmap.dtsi - milkv-duo256m: build/boards/default/dts/cv181x/cv181x_default_memmap.dtsi ```shell c906l_rproc: c906l_rproc@0 { compatible = "cvitek,cv18xx-c906l-rproc"; memory-region = <&c906l>; core-name = "cv18xx-c906l"; firmware-name = "cvirtos.elf"; status = "okay"; }; ``` 我们可以直接将 /lib/firmware 目录下的 rtthread.elf 重命名为 cvirtos.elf,然后重新启动 Linux 系统,尝试 remoteproc 服务会自动加载小核系统。 ```shell $ mv rtthread.elf cvirtos.elf $ reboot ``` 结果还是失败了,提示如下信息: ```shell [ 1.095219] remoteproc remoteproc0: c906l_rproc@0 is available [ 1.101533] remoteproc remoteproc0: powering up c906l_rproc@0 [ 1.108100] usbcore: registered new interface driver snd-usb-audio [ 1.118146] remoteproc remoteproc0: Direct firmware load for cvirtos.elf failed with error -2 [ 1.127703] cvitek-i2s 4100000.i2s: cvi_i2s_probe [ 1.132702] remoteproc remoteproc0: request_firmware failed: -2 ``` 查看 linux_5.10/drivers/base/firmware_loader/main.c 文件,发现 -2 是没有发现 cvirtos.elf 文件的错误,原因待进一步分析。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
燕十三
这家伙很懒,什么也没写!
文章
12
回答
15
被采纳
0
关注TA
发私信
相关文章
1
在ubt下编译cv1800大核不通过的问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部