riscv64架构上运行rt-thread
扫描二维码
随时随地手机看文章
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的驱动,这些都是对国产芯片最新的尝试,让大学生去接触最新最前沿的东西,而不是学一些已经过时的东西,我觉得是很必要的。虽然当前点亮计划项目中代码处理的不是完善,只能作为学习使用,并且很多设计不是很合理,对于一个大学生来说,这可能是已经尽了自己最大的努力了。万事开头难,只要有人开了这个头,就能够不断的完善,让其变成一个更加通用,好用的东西。
从非盈利的角度上来看,应该大力倡导开源,大力完善知识共享体系。