久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2732|回復: 0
打印 上一主題 下一主題
收起左側

無第三方庫不到5000行C語言 risc-v虛擬機juicevm

[復制鏈接]
跳轉到指定樓層
樓主
ID:930728 發表于 2021-6-1 15:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 juicerv 于 2021-6-1 16:09 編輯



簡介
https://github.com/juiceRv/JuiceVm
juice vm誕生于2020年,以實現可運行最新kernel主線的RISC-V最小虛擬機為目標而誕生的,設計之初秉承著可以在 RAM 只有 百KB 級別的平臺上運行,不引入除了c99標準外的第三方依賴。

juice vm按照gcc所支持的C99標準編寫,無第三方庫依賴,淺顯易懂,且具有方便移植的特性(可快速移植到多種主流 MCU 及支持c環境的所有平臺上)。

juice vm去掉注釋后展開所有的宏的代碼行數僅12523行,僅36104字,足夠的小巧。

Juice Vm的優點

  • 資源占用極低。
  • 跨平臺、可快速移植。

Juice Vm的組成

  • 指令集:RV64IMASU.
  • 支持了M-mode,U-mode,S-mode下的mtime.
  • 超級精簡的uart,只有讀和寫兩個外設寄存器.
  • 超級精簡的MMU SV39支持.
  • 支持RISC-V官方標準的異常和中斷托管

Juice Vm 代碼統計


Juice Vm的地址空間分布

虛擬機版本號起始地址大小(字節)寄存器名稱說明所用宏名稱
c21682d30x800000000x12C00000SRAM內部存儲RV_CPU_SIM_RAM_START_ADDR RV_CPU_SIM_RAM_SIZE
c21682d30x92C000000x1UART_WRITEuart發送寄存器pdev_uart0_write_addr
c21682d30x92C000010x1UART_READuart接收寄存器pdev_uart0_read_addr
c21682d30x92C000020x1UART_STATEuart狀態寄存器pdev_uart0_state_addr pdev_uart0_free_state pdev_uart0_readbusy_state
c21682d30x92C000030x8mtimemtime當前計數寄存器pdev_mtime_mtime_addr
c21682d30x92c000070x8mtimecmpmtime當前比較寄存器pdev_mtime_mtimecmp_addr

Juice Vm下的軟件移植進度

  • 已經支持了c語言編程。
  • 已完成freertos移植。
  • 已完成mbedtls移植。
  • 已完成mmu sv39測試。
  • 已完成mtime測試。
  • 已完成opensbi移植 傳送門
  • 已完成rt-thread移植,感謝@熊大和@Andy Chen的支持 傳送門
  • 已完成kernel主線5.0.0 傳送門
  • 上傳Juice Vm下的GCC toolchain 傳送門
  • 適配 GDB 通用接口支持 TODO
  • 適配 RT-SMART TODO

快速安裝

  • UBUNTU/DEBIAN APT安裝
    1.   echo "deb [url]http://xiaohui.mongoyun.com:3333/[/url] trusty main" | sudo tee -a /etc/apt/sources.list
    2.   wget -O - [url]http://xiaohui.mongoyun.com:3333/key/deb.gpg.key[/url] | sudo apt-key add -
    3.   sudo apt update
    4.   sudo apt install juicevm
    5.   juicevm
    復制代碼

  • CENTOS
    1.   echo "deb [url]http://xiaohui.mongoyun.com:3333/[/url] trusty main" | sudo tee -a /etc/apt/sources.list
    2.   wget -O juice_vm_release_for_Linux_laster.zip [url]https://github.com/juiceRv/JuiceVm/raw/master/juice_vm_release_for_Linux_laster.zip[/url]
    3.   unzip juice_vm_release_for_Linux_laster.zip
    4.   cd juice_vm_release_for_Linux_c21682d3/juice_vm_release_for_Linux
    5.   sudo chmod +x juice_vm_for_Linux.out
    6.   ./juice_vm_for_Linux.out
    復制代碼

  • WINDOW

編譯中

快速上手


運行freertos 截圖


運行rt-thread 截圖



運行linx 5.0.0 截圖


軟件參數使用說明

參數參數名稱說明
tenable test mode進入固件測試模式<br>當出現下面的狀態會結束運行并且打印出通過還是失敗的字樣,x3_gp寄存器的值為1 和 x17_a7寄存器的值為93時,進入了ecall異常就會觸發。x10_a0 寄存器的值為 0時打印pass字樣,否則打印fail字樣
Tenable trap debug mode使能異常調試模式,出現異常時會打印當前異常的調試信息
denable debug mode打開虛擬機內所有的調試選項,輸出最詳細的調試信息,包括指令譯碼,處理執行,當前寄存器列表,csr列表等
cprint cst operation msg打開虛擬機的csr寄存器讀寫調試信息。讀寫csr寄存器的時候都會打印對應的csr寄存器的值
adiable all debug msg關閉所有調試選項,譯碼調試默認打開
xenable test mode for exception打開異常測試模式,當出現異常時結束運行
genable better readability printing使用可讀性更好的方式打印信息
edisable all error msg關閉所有的錯誤信息打印
ienable all instr debug msg打開所有指令調試信息打印
menable mmu debug msg打開mmu的遍歷調試信息
pprint mmu page 8 byte datahexdump打印mmu頁表里的8字節數據
Pprint mmu page 4K Byte datahexdump打印mmu頁表里的4K字節數據
suart addr not use mmu translation啟用mmu翻譯時,忽略uart的外設地址,在啟用了mmu的時候也可以直接通過uart原始物理地址來操作uart外設
Sswitch mode debug info打開切換mode時的調試信息,m-mode,s-mode和u-mode切換的時候都會打印調試信息
Mdisable mmu err msg關閉mmu缺頁異常,訪問異常,加載異常的錯誤信息
renable trap debug msg打印更詳細的進入中斷的調試信息
Aenable addr translation debug print打印地址轉換的調試打印
L(n)log modeoutput_mode_sel n = 0 -> stdout<br> 1 -> log_buf UNIX SYS ONLY(buf_size:2900)<br> 2 -> none<br> 選擇虛擬機輸出的方式,1,直接標準輸出。2,使用一個buf先緩存,退出的時候再輸出bug大小2900Byte。3,不輸出。<br>
lenable endless loop check (RV_ENDLESS_LOOP_CHECK_EXIT_CNT:3)啟用死循環監測機制,當有連續3次出現同樣的指令執行流程(包括寄存器和csr寄存器的值都沒有改變),結束虛擬機的運行。可以搭配-L參數使用,方便調試固件。一般assert都是直接死循環。

社區支持

   挖坑網首發 感謝暈哥一路的支持:https://whycan.com/t_5844.html

CHANGE LOG

2021-05-25




20210524進展公布,發布包發布juice_vm_release_for_Linux_c21682d3.zip:

  • 修復了mtime在m-mode,s-mode和u-mode下的中斷處理漏洞。
  • 修復了ecall在s-mode下的漏洞。
  • 修復了在s-mode和u-mode下進入異常模式,更新csr寄存器的漏洞。
  • 移植了linux。  

    juice_vm成功運行kernel主線5.0.0。
    juice_vm成功運行kernel主線5.0.0。
    juice_vm成功運行kernel主線5.0.0。



20210508更新:

  • 上傳一個ubuntu20.04上可以正常運行的發布包,感謝@XBOOT大佬的反饋。
  • 添加了div指令支持。
  • 修復了divuw,divw,remu,remw,amomin.w,amoswap.w的指令錯誤。



20210427更新:

  1. 提交了RT-Thread 的適配 到官方倉庫:詳情請點擊[url]https://github.com/RT-Thread/rt-thread/tree/master/bsp/juicevm[/url]
復制代碼



20210424更新:

軟件適配進度

1.已完成rt-thread移植。

更新了支持的參數:

  • 新增-L參數用于指定打印日志方式。
  • 新增-l參數用于在出現死循環的時候結束運行。
  • 新增-r參數用于開啟trap調試打印
  • 更新了Alive logo。
  • 新增-T參數用于執行過程輸出反匯編調試打印。
  • 新增m模塊支持。
  • 新增s-mode支持(u-mode支持中)。



202210306更新:

軟件適配進度

  • 已經支持了c語言編程。
  • 已完成freertos移植。
  • 已完成mebedtls移植。
  • 已完成mmu sv39測試。
  • 已完成mtimer測試。
  • 已完成opensbi移植。

更新了支持的參數:

  • -m 參數用于開啟mmu調試信息

    提交日志
  • 1113e998 add sfence.vma instr
  • f118d476 add print instr support
  • 1e3e7204 add AMOSWAP.D LR.D and SC.D instr support
  • 686741ea add AMOSWAP.D LR.D and SC.D instr support
  • f2f699c0 add -i arg to enable instr print support
  • 113f66da add misa csr support
  • 19cf60d1 fix divu err
  • ad512e54 add divu remw and remu instr
  • 9abc0566 fix mem overflow
  • 0ceb663e fix divw instr and add REMW instr
  • 10a2ea78 fix divw instr
  • 9c93c4ce add amoswap.w , mul and divw instr
  • df10ad45 change the fireware start addr to 0x80000000
  • d31b4ac1 add amoadd.w inst



以下 2021-03-06 更新:

無第三方庫不到5000行C語言實現一個risc-v虛擬機,帶mmu

基于指令集 rv64i

實現了mtime,超級精簡的uart和mmu sv39.

更新了支持的參數:

  • -a 關閉所有調試打印
  • -e 關閉錯誤打印
  • -g 用更好的方式來顯示打印
  • -d 開啟所有調試打印(包括寄存器和csr列表)
  • -i 開啟指令解碼調試信息
  • -m 開啟mmu調試信息

軟件適配進度

  • 已經支持了c語言編程。
  • 已完成freertos移植。
  • 已完成mebedtls移植。
  • 已完成mmu sv39測試。
  • 已完成mtimer測試。
  • 已完成opensbi移植。

鳴謝


聯系作者
https://github.com/juiceRv/JuiceVm
juicemail@163.com


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产伦精品一区二区三区照片91 | 一区二区三区国产精品 | av成年人网站 | 天堂色| 国产精品亚洲成在人线 | 在线观看 亚洲 | 黄色一级网| 一区视频| 亚洲在线一区二区 | 希岛爱理在线 | 精品欧美一区二区三区久久久小说 | 91在线一区二区三区 | 网站黄色在线免费观看 | 亚洲黄色一区二区三区 | 亚洲不卡一 | 精品国产乱码久久久久久中文 | 欧美精品久久久 | 国产精品69av | 久久久精品日本 | 国产精品久久欧美久久一区 | 国产精品99精品久久免费 | 欧美在线观看一区 | 亚洲精品永久免费 | 91精品国产综合久久精品图片 | 国产日韩免费视频 | 国产精品美女一区二区 | 91视频www.| 红色av社区 | 夜夜爽99久久国产综合精品女不卡 | 成年免费在线观看 | 国产精品电影网 | 国产探花 | 成人免费在线视频 | 99热热99 | 影音先锋欧美资源 | 成人av电影免费在线观看 | 99精品国产一区二区青青牛奶 | 狠狠干五月天 | 亚洲欧美综合精品久久成人 | 成人h视频在线 | 国产一级片免费在线观看 |