riscv64架構(gòu)上運(yùn)行rt-thread
掃描二維碼
隨時隨地手機(jī)看文章
riscv64架構(gòu)上運(yùn)行rt-thread
-
1.本文目的
-
2.環(huán)境搭建
-
2.1 qemu編譯riscv版本
-
2.2 交叉編譯工具鏈下載
-
2.3 編譯opensbi
-
2.4 編譯rt-thread
-
3.程序運(yùn)行
-
4.總結(jié)
1.本文目的
本文主要描述如何在riscv64 的qemu上運(yùn)行rt-thread。該項(xiàng)目大部分工作借鑒中科院的點(diǎn)亮計(jì)劃的項(xiàng)目,為這些不斷貢獻(xiàn)開源的同學(xué)點(diǎn)贊。項(xiàng)目地址如下:
https://isrc.iscas.ac.cn/gitlab/summer2020/students/proj-2023112
該項(xiàng)目已經(jīng)完成riscv64適配rt-thread的工作,但是使用起來還是有一些復(fù)雜,因?yàn)闀ㄟ^qemu加載opensbi然后啟動一個uboot,通過uboot加載rt-thread編譯生成的固件。
本文的目的就是簡化啟動流程,直接通過qemu+opensbi+rt-thread,這種方式運(yùn)行。因?yàn)楫?dāng)前rt-thread工程中任會依賴opensbi的部分接口實(shí)現(xiàn)的。
2.環(huán)境搭建
需要準(zhǔn)備四個工具,本次環(huán)境搭建主要以Ubuntu18.04環(huán)境下進(jìn)行測試。
1.qemu開源最新版本
2.riscv交叉編譯工具
3.opensbi開源最新代碼
4.rt-thread適配源代碼
下面從上面四個環(huán)境來進(jìn)行描述:
2.1 qemu編譯riscv版本
從官網(wǎng)可以下載最新的版本
https://www.qemu.org/
可以適配最新的版本:
下載完成后解壓,然后開始編譯
./configure --target-list=riscv64-softmmu make j4 make install
編譯完成后,可以輸入qemu-system-riscv64 --version進(jìn)行驗(yàn)證
# 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,所以需要下載對應(yīng)的交叉編譯工具鏈:
可以在如下的網(wǎng)站進(jìn)行下載:
https://www.sifive.com/software
下載對應(yīng)平臺的編譯工具鏈解壓即可:
下載完成后解壓即可。
2.3 編譯opensbi
接下來從github上獲取最新的opensbi工程文件。
git clone https://github.com/riscv/opensbi.git
下載完成后進(jìn)入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
原生點(diǎn)亮計(jì)劃的工程無法正常的,我已經(jīng)完成當(dāng)前工程的適配工作,可以在下面地址下載代碼:
git clone https://gitee.com/bigmagic/riscv64_rtt.git
進(jìn)入對應(yīng)的bsp:
riscv64_rtt/bsp/riscv64-virt
設(shè)置交叉編譯工具鏈:
當(dāng)前設(shè)置交叉編譯工具鏈有兩張方式:
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
正常情況下會生成對應(yīng)的rtthread.elf文件。
3.程序運(yùn)行
當(dāng)前我已將集成運(yùn)行腳本和opensbi生成的fw_jump.elf上傳上去了。所以直接執(zhí)行
./start.sh
可以看到程序正常運(yùn)行起來了。
當(dāng)然,也可測試一下tick和線程運(yùn)行情況。
均正常執(zhí)行。
如果想通過自己編譯的opensbi固件,可以按照第二章節(jié)的opensbi進(jìn)行自行替換。
啟動腳本如下:
qemu-system-riscv64 -M virt -smp 2 -bios fw_jump.elf -kernel rtthread.elf -nographic
這里沒什么特別需要注意的地方。
4.總結(jié)
在riscv64的qemu上運(yùn)行rt-thread是一種全新的嘗試,有助于對riscv的深入理解和掌握。其中需要借助opensbi的接口進(jìn)行設(shè)計(jì),這種思想很特別。具體我也還需要深入研究,不敢斷下結(jié)論。
這次的點(diǎn)亮計(jì)劃在rt-thread這邊有兩個項(xiàng)目還是很有研究價(jià)值的,一個是riscv的rtt port,另外一個是龍芯2k1000的驅(qū)動,這些都是對國產(chǎn)芯片最新的嘗試,讓大學(xué)生去接觸最新最前沿的東西,而不是學(xué)一些已經(jīng)過時的東西,我覺得是很必要的。雖然當(dāng)前點(diǎn)亮計(jì)劃項(xiàng)目中代碼處理的不是完善,只能作為學(xué)習(xí)使用,并且很多設(shè)計(jì)不是很合理,對于一個大學(xué)生來說,這可能是已經(jīng)盡了自己最大的努力了。萬事開頭難,只要有人開了這個頭,就能夠不斷的完善,讓其變成一個更加通用,好用的東西。
從非盈利的角度上來看,應(yīng)該大力倡導(dǎo)開源,大力完善知識共享體系。