当前位置:首页 > 公众号精选 > 嵌入式IoT

riscv64架构上运行rt-thread

  • 1.本文目的

  • 2.环境搭建

    • 2.1 qemu编译riscv版本

    • 2.2 交叉编译工具链下载

    • 2.3 编译opensbi

    • 2.4 编译rt-thread

  • 3.程序运行

  • 4.总结

1.本文目的

本文主要描述如何在riscv64 的qemu上运行rt-thread。该项目大部分工作借鉴中科院的点亮计划的项目,为这些不断贡献开源的同学点赞。项目地址如下:

https://isrc.iscas.ac.cn/gitlab/summer2020/students/proj-2023112

该项目已经完成riscv64适配rt-thread的工作,但是使用起来还是有一些复杂,因为会通过qemu加载opensbi然后启动一个uboot,通过uboot加载rt-thread编译生成的固件。

本文的目的就是简化启动流程,直接通过qemu+opensbi+rt-thread,这种方式运行。因为当前rt-thread工程中任会依赖opensbi的部分接口实现的。

2.环境搭建

需要准备四个工具,本次环境搭建主要以Ubuntu18.04环境下进行测试。

1.qemu开源最新版本

2.riscv交叉编译工具

3.opensbi开源最新代码

4.rt-thread适配源代码

下面从上面四个环境来进行描述:

2.1 qemu编译riscv版本

从官网可以下载最新的版本

https://www.qemu.org/

可以适配最新的版本:

下载完成后解压,然后开始编译

./configure --target-list=riscv64-softmmu
make j4
make install 

编译完成后,可以输入qemu-system-riscv64 --version进行验证

# qemu-system-riscv64 --version QEMU emulator version 5.2.0
Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers

2.2 交叉编译工具链下载

由于需要编译opensbi与rt-thread,所以需要下载对应的交叉编译工具链:

可以在如下的网站进行下载:

https://www.sifive.com/software

下载对应平台的编译工具链解压即可:

下载完成后解压即可。

2.3 编译opensbi

接下来从github上获取最新的opensbi工程文件。

git clone https://github.com/riscv/opensbi.git

下载完成后进入opensbi目录

export CROSS_COMPILE=/riscv64-unknown-elf-
make PLATFORM=generic

编译完成后可以生成

build/platform/generic/firmware/fw_jump.elf

其中fw_jump.elf是启动rt-thread需要的。

2.4 编译rt-thread

原生点亮计划的工程无法正常的,我已经完成当前工程的适配工作,可以在下面地址下载代码:

git clone https://gitee.com/bigmagic/riscv64_rtt.git

进入对应的bsp:

riscv64_rtt/bsp/riscv64-virt

设置交叉编译工具链:

当前设置交叉编译工具链有两张方式:

1.修改rtconfig.py修改

if CROSS_TOOL == 'gcc':
 PLATFORM    = 'gcc' EXEC_PATH   = r'/your_path/riscv64-unknown-elf-gcc-8.3.0-2020.04.0-x86_64-linux-ubuntu14/bin' 

将EXEC_PATH改为自己的交叉编译工具链路径。

2.在控制台输入

export RTT_EXEC_PATH=/your_path/riscv64-unknown-elf-gcc-8.3.0-2020.04.0-x86_64-linux-ubuntu14/bin

开始编译

scons -c
scons

正常情况下会生成对应的rtthread.elf文件。

3.程序运行

当前我已将集成运行脚本和opensbi生成的fw_jump.elf上传上去了。所以直接执行

./start.sh

可以看到程序正常运行起来了。

当然,也可测试一下tick和线程运行情况。

均正常执行。

如果想通过自己编译的opensbi固件,可以按照第二章节的opensbi进行自行替换。

启动脚本如下:

qemu-system-riscv64 -M virt -smp 2 -bios fw_jump.elf -kernel rtthread.elf -nographic

这里没什么特别需要注意的地方。

4.总结

在riscv64的qemu上运行rt-thread是一种全新的尝试,有助于对riscv的深入理解和掌握。其中需要借助opensbi的接口进行设计,这种思想很特别。具体我也还需要深入研究,不敢断下结论。

这次的点亮计划在rt-thread这边有两个项目还是很有研究价值的,一个是riscv的rtt port,另外一个是龙芯2k1000的驱动,这些都是对国产芯片最新的尝试,让大学生去接触最新最前沿的东西,而不是学一些已经过时的东西,我觉得是很必要的。虽然当前点亮计划项目中代码处理的不是完善,只能作为学习使用,并且很多设计不是很合理,对于一个大学生来说,这可能是已经尽了自己最大的努力了。万事开头难,只要有人开了这个头,就能够不断的完善,让其变成一个更加通用,好用的东西。

从非盈利的角度上来看,应该大力倡导开源,大力完善知识共享体系。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭