riscv64架構上運行rt-thread
掃描二維碼
隨時隨地手機看文章
riscv64架構上運行rt-thread
-
1.本文目的
-
2.環(huán)境搭建
-
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
該項目已經(jīng)完成riscv64適配rt-thread的工作,但是使用起來還是有一些復雜,因為會通過qemu加載opensbi然后啟動一個uboot,通過uboot加載rt-thread編譯生成的固件。
本文的目的就是簡化啟動流程,直接通過qemu+opensbi+rt-thread,這種方式運行。因為當前rt-thread工程中任會依賴opensbi的部分接口實現(xiàn)的。
2.環(huán)境搭建
需要準備四個工具,本次環(huán)境搭建主要以Ubuntu18.04環(huán)境下進行測試。
1.qemu開源最新版本
2.riscv交叉編譯工具
3.opensbi開源最新代碼
4.rt-thread適配源代碼
下面從上面四個環(huán)境來進行描述:
2.1 qemu編譯riscv版本
從官網(wǎng)可以下載最新的版本
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,所以需要下載對應的交叉編譯工具鏈:
可以在如下的網(wǎng)站進行下載:
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
原生點亮計劃的工程無法正常的,我已經(jīng)完成當前工程的適配工作,可以在下面地址下載代碼:
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上傳上去了。所以直接執(zhí)行
./start.sh
可以看到程序正常運行起來了。
當然,也可測試一下tick和線程運行情況。
均正常執(zhí)行。
如果想通過自己編譯的opensbi固件,可以按照第二章節(jié)的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的驅動,這些都是對國產(chǎn)芯片最新的嘗試,讓大學生去接觸最新最前沿的東西,而不是學一些已經(jīng)過時的東西,我覺得是很必要的。雖然當前點亮計劃項目中代碼處理的不是完善,只能作為學習使用,并且很多設計不是很合理,對于一個大學生來說,這可能是已經(jīng)盡了自己最大的努力了。萬事開頭難,只要有人開了這個頭,就能夠不斷的完善,讓其變成一個更加通用,好用的東西。
從非盈利的角度上來看,應該大力倡導開源,大力完善知識共享體系。