您尚未登录。

#1 2021-01-11 17:12:11 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

[juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

基于指令集 rv64i
实现了mtime,超级精简的uart和mmu sv39.
支持的参数:
-a 关闭所有调试打印
-e 关闭错误打印
-g 用更好的方式来显示打印
-d 开启所有调试打印(包括寄存器和csr列表)

QQ图片20210111171052.png

juice_vm_release_for_Linux_and_win_0420de4b.zip



以下 2021-03-06 更新:
--------------------------------
无第三方库不到5000行C语言实现一个risc-v虚拟机,带mmu
基于指令集 rv64i
实现了mtime,超级精简的uart和mmu sv39.
支持的参数:
-a 关闭所有调试打印
-e 关闭错误打印
-g 用更好的方式来显示打印
-d 开启所有调试打印(包括寄存器和csr列表)
-i 开启指令解码调试信息
-m 开启mmu调试信息
1. 已经支持了c语言编程。
2. 已完成freertos移植。
3. 已完成mebedtls移植。
4. 已完成mmu sv39测试。
5. 已完成mtimer测试。
6. 已完成opensbi移植。

最近编辑记录 xiaohui (2021-01-11 17:28:18)

离线

#2 2021-01-11 17:12:56 分享评论

光头程序员
会员
注册时间: 2020-03-03
已发帖子: 14
积分: 14

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

牛皮, 强势围观!

离线

#3 2021-01-11 17:33:45 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

附上之前的freertos移植流程,传送门:https://whycan.com/t_5766.html

离线

#4 2021-01-11 17:42:24 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

例子里的rv_config.h忘记上传了,里面的内容就是

#define RV_CPU_SIM_RAM_START_ADDR   0
#define RV_CPU_SIM_RAM_SIZE         10 * RAM_SIZE_MB

离线

#5 2021-01-11 17:58:17 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

测试例程所用的编译器下载链接,传送门:https://www.sifive.com/software#GCC

最近编辑记录 xiaohui (2021-01-11 18:03:22)

离线

#6 2021-01-13 15:09:16 分享评论

assert
会员
注册时间: 2018-06-13
已发帖子: 54
积分: 54

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

来了来了 给大佬点赞来了

离线

#7 2021-01-14 17:29:50 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

assert 说:

来了来了 给大佬点赞来了

谢谢大佬围观

离线

#8 2021-01-19 18:07:08 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

更新,发布安卓版本的可执行文件:juice_vm_android_0420de4b.zip

这个发布包里没有包含测试例子,测试例子使用本帖一楼的测试即可。

最近编辑记录 xiaohui (2021-01-19 18:07:46)

离线

#9 2021-03-06 17:52:58 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

juice_vm_release_for_Win64_f041c8a2.zip
202210306更新:
1. 已经支持了c语言编程。
2. 已完成freertos移植。
3. 已完成mebedtls移植。
4. 已完成mmu sv39测试。
5. 已完成mtimer测试。
6. 已完成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

最近编辑记录 xiaohui (2021-03-06 18:54:19)

离线

#10 2021-03-06 18:08:16 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

运行freertos的截图:
_20210306180737.png

离线

#11 2021-03-06 19:25:05 分享评论

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 200
积分: 189
个人网站

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

楼主高产

离线

#12 2021-03-07 00:55:00 分享评论

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 520
积分: 503.5
个人网站

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

厉害,是个好东西

离线

#13 2021-03-07 15:14:19 分享评论

novice
会员
注册时间: 2019-07-26
已发帖子: 51
积分: 48.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

貌似没有源代码,都是编译后的二进制执行文件。

离线

#14 2021-04-23 18:00:01 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

juice_vm_release_for_Linux_57ba985a.zip
20210424更新:
1. 已完成rt-thread移植。
2.新增-L参数用于指定打印日志方式。
3.新增-l参数用于在出现死循环的时候结束运行。
4.新增-r参数用于开启trap调试打印
5.更新了Alive logo。
6.新增-T参数用于执行过程输出反汇编调试打印。
7.新增m模块支持。
8.新增s-mode支持(u-mode支持中)。
juicevm_rtt.jpg

最近编辑记录 xiaohui (2021-04-23 18:18:46)

离线

#15 2021-04-23 19:02:40 分享评论

qianhao
会员
注册时间: 2017-12-14
已发帖子: 132
积分: 126

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

牛逼了 围观一下,我对这个riscv也是比较有兴趣的

离线

#16 2021-04-23 21:47:50 分享评论

zuoyi
会员
注册时间: 2018-05-29
已发帖子: 10
积分: 9.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

厉害(20210424更新?我穿越了?

离线

#17 2021-04-27 13:56:43 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

zuoyi 说:

厉害(20210424更新?我穿越了?

哈哈,是的,欢迎来到未来。

离线

#18 2021-04-27 14:03:35 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

20210427更新:
提交了RT-Thread 的适配 到官方仓库:详情请点击https://github.com/RT-Thread/rt-thread/tree/master/bsp/juicevm

离线

#19 2021-04-27 22:37:30 分享评论

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 200
积分: 189
个人网站

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

用来学习risc-v指令真不错

离线

#20 2021-05-07 18:44:21 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

global_vm_log_init output_mode_sel: 0  JUICE_VM_LOG_MAX_NUM:2900
      gg ,ggg,         gg      ,a8a,     ,gggg,   ,ggggggg, ,ggg,         ,g,ggg, ,ggg,_,ggg,  
     dP8dP  Y8a        88     ,8   8,  ,88   Y8b,dP      Y8dP  Y8a       ,8dP  Y8dP  Y88P  Y8b 
    dP YYb, `88        88     d8   8b d8      `Yd8'    a  YYb, `88       d8Yb, `88'  `88'  `88 
   ,8  `8`   88        88     88   88d8'   8b  d88      Y8P'`   88       88 `   88    88    88 
   I8   Yb   88        88     88   8,8I     Y88P`8baaaa         88       88     88    88    88 
   `8b, `8,  88        88     Y8   8I8'        ,d8P             I8       8I     88    88    88 
    ` Y88888 88        88     `8, ,8d8         d8               `8,     ,8'     88    88    88 
         Y8  88        888888   8,8 Y8,        Y8,               Y8,   ,8P      88    88    88 
         ,88,Y8b,____,d88`8b,  ,d8b,`Yba,,_____`Yba,,_____,       Yb,_,dP       88    88    Y8,
     ,ad88888  Y888888P Y8  Y88P   Y8 ` Y8888888 ` Y8888888         Y8P         88    88    `Y8
   ,dP '   Yb                                                                                  
  ,8'      I8                                                                                  
 ,8'       I8                                                                                  
 I8,      ,8'                                                                                  
 `Y8,___,d8'                                                                                   
    Y888P                                                                                      
 email:                                                                       juicemail@163.com
version:f259ffe5 f259ffe5 Fri, 7 May 2021 16:31:18 +0800 xiaoxiaohuixxh feat(vm): pass ui ua si test but lrsc and scr test
firm_addr:build/platform/juice/juiceRv/firmware/fw_payload.bin
fd = 3
file_size = 6169144
interrupt_vertor_register_mag_init
rv_csr_register_init
csr_addr_misa 8000000000040101
csr_addr_mvendorid 0000000000000000
csr_addr_marchid 0000000000000000
csr_addr_mimpid 0000000000000000
csr_addr_mhartid 0000000000000000
rv_peripheral_device_init
[rv64_sim][dev][mmu]rv.c(6114):rv_peripheral_device_mmu_init,Sv39 mode support only
[rv64_sim][dev][mtime]rv.c(5773):rv_peripheral_device_mtime_init
[rv64_sim][dev][mtime]rv.c(5792):pdev_mtime_irq_info 0x55f859de9110 92c00003 92c00007
[rv64_sim][proc][err]rv.c[interrupt_vertor_register](1910){pc:0000000000000000}:interrupt_vertor_register err->irq info err irq_v 1 addr_min 4
[rv64_sim][dev][mtime]rv.c(5803):pdev_mtime_irq_info_on_umode (nil) 92c00003 92c00007
[rv64_sim][dev][uart0]rv.c(5580):rv_peripheral_device_uart0_init
[rv64_sim][dev][uart0]rv.c(5596):pdev_uart0_irq_info 0x55f859de90f0
rv sim start...loading
cpu run...
[juiceRv]set_rv_scr csr_addr 0000000000000180(csr_addr_satp) new_v 0000000000000000
get_MODE_xsatp(get_rv_csr(csr_addr_satp)) 0

OpenSBI v0.9
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name             : juice-JuiceRv
Platform Features         : timer,mfdeleg
Platform HART Count       : 1
Firmware Base             : 0x80000000
Firmware Size             : 80 KB
Runtime SBI Version       : 0.3

Domain0 Name              : root
Domain0 Boot HART         : 0
Domain0 HARTs             : 0*
Domain0 Region00          : 0x0000000080000000-0x000000008001ffff ()
Domain0 Region01          : 0x0000000000000000-0xffffffffffffffff (R,W,X)
Domain0 Next Address      : 0x0000000080200000
Domain0 Next Arg1         : 0x0000000082200000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes

Boot HART ID              : 0
Boot HART Domain          : root
Boot HART ISA             : rv64ias
Boot HART Features        : scounteren,mcounteren,time
Boot HART PMP Count       : 64
Boot HART PMP Granularity : 4
Boot HART PMP Address Bits: 54
Boot HART MHPM Count      : 29
Boot HART MHPM Count      : 29
Boot HART MIDELEG         : 0x0000000000000222
Boot HART MEDELEG         : 0x000000000000b109
[juiceRv]set_rv_scr csr_addr 0000000000000105(csr_addr_stvec) new_v 0000000080200000
[juiceRv]set_rv_scr csr_addr 0000000000000180(csr_addr_satp) new_v 0000000000000000
get_MODE_xsatp(get_rv_csr(csr_addr_satp)) 0
H
D
C
B
M
S
R
R1[juiceRv]set_rv_scr csr_addr 0000000000000105(csr_addr_stvec) new_v ffffffff800003a4
23[juiceRv]set_rv_scr csr_addr 0000000000000180(csr_addr_satp) new_v 800000000008021c
get_MODE_xsatp(get_rv_csr(csr_addr_satp)) 8
[rv64_sim][dev][mmu][err]rv.c(6220):V:0 R:0 W:0
[rv64_sim][dev][mmu][err]rv.c(6221):如果pte.v = 0,或者pte.r = 0且pte.w = 1,则停止并引发与原始访问类型相对应的页面错误异常。
[rv64_sim][dev][mmu][err]rv.c(6305):rv_peripheral_device_mmu_translation pc:0000000080200394 va 0000000080200394 pa 0000000000000000
[rv64_sim][proc][err]rv.c[RISCVTrap](1404){pc:0000000080200394}:RV_exception_Instruction_page_fault va 0000000080200394
[rv64_sim][dev][mmu][err]rv.c(6317):this addr not found
5
[juiceRv]set_rv_scr csr_addr 0000000000000105(csr_addr_stvec) new_v ffffffff800003f0
6[juiceRv]set_rv_scr csr_addr 0000000000000180(csr_addr_satp) new_v 80000000000805a7
get_MODE_xsatp(get_rv_csr(csr_addr_satp)) 8
I
Parse_dtb
start_kernel
[    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[    0.000000] memblock_add enter
[    0.000000] No DTB passed to the kernel
[    0.000000] func start_kernel ( 647 )
[    0.000000] func start_kernel ( 651 )
[    0.000000] func start_kernel ( 653 )
[    0.000000] func start_kernel ( 656 )
[    0.000000] func start_kernel ( 659 )
[    0.000000] func start_kernel ( 661 )
[    0.000000] func start_kernel ( 668 )
[    0.000000] func start_kernel ( 670 )
[    0.000000] Linux version 5.0.0-g1e922e1de (xiaohui@DESKTOP-7HFR7VO) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #51 Mon Mar 29 01:40:29 CST 2021
[    0.000000] func start_kernel ( 672 )
[    0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
[    0.000000] printk: bootconsole [sbi0] enabled
[    0.000000] 
[    0.000000]  reg->base: 80200000 reg->size: e00000
[    0.000000] 
[    0.000000] mem_size: 0000000000e00000
[    0.000000] 
[    0.000000] memblock_end_of_DRAM end addr: ffffffff800e269c
[    0.000000] initrd not found or empty - disabling initrd
[    0.000000] 
[    0.000000] memblock_dump_all end addr: ffffffff800217bc
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000080200000-0x0000000080ffffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080200000-0x0000000080ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x0000000080ffffff]
[    0.000000] On node 0 totalpages: 3584
[    0.000000] memblock_alloc_try_nid_nopanic: 229376 bytes align=0x40 nid=0 from=0x0000000000000000 max_addr=0x0000000000000000 alloc_node_mem_map.constprop.34+0x70/0xc0
[    0.000000]   DMA32 zone: 49 pages used for memmap
[    0.000000]   DMA32 zone: 0 pages reserved
[    0.000000]   DMA32 zone: 3584 pages, LIFO batch:0
[    0.000000] memblock_alloc_try_nid_nopanic: 8 bytes align=0x40 nid=0 from=0x0000000000000000 max_addr=0x0000000000000000 setup_usemap.isra.8+0x5c/0x78
[    0.000000] memblock_alloc_try_nid: 2740 bytes align=0x8 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 early_init_dt_alloc_memory_arch+0x20/0x30
[    0.000000] memblock_alloc_try_nid_nopanic: 67108864 bytes align=0x1000 nid=-1 from=0x0000000000000000 max_addr=0x00000000ffffffff swiotlb_init+0x64/0xd8
[    0.000000] software IO TLB: Cannot allocate buffer
[    0.000000] elf_hwcap is 0x1101
[    0.000000] func start_kernel ( 696 )
[    0.000000] func start_kernel ( 702 )
[    0.000000] func start_kernel ( 704 )
[    0.000000] func start_kernel ( 706 )
[    0.000000] func start_kernel ( 708 )
[    0.000000] memblock_alloc_try_nid: 67 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 start_kernel+0x1fc/0xcc8
[    0.000000] memblock_alloc_try_nid: 67 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 start_kernel+0x228/0xcc8
[    0.000000] memblock_alloc_try_nid: 67 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 start_kernel+0x250/0xcc8
[    0.000000] func start_kernel ( 710 )
[    0.000000] func start_kernel ( 712 )
[    0.000000] memblock_alloc_try_nid_nopanic: 4096 bytes align=0x1000 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_alloc_alloc_info+0x68/0xc4
[    0.000000] memblock_alloc_try_nid_nopanic: 32768 bytes align=0x1000 nid=-1 from=0x0000000080200000 max_addr=0x0000000000000000 setup_per_cpu_areas+0x48/0xb8
[    0.000000] memblock_alloc_try_nid: 8 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_setup_first_chunk+0x394/0x78c
[    0.000000] memblock_alloc_try_nid: 8 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_setup_first_chunk+0x3b4/0x78c
[    0.000000] memblock_alloc_try_nid: 4 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_setup_first_chunk+0x3d0/0x78c
[    0.000000] memblock_alloc_try_nid: 8 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_setup_first_chunk+0x3ec/0x78c
rs1 >= 0 && rs2 >= 0rs1 >= 0 && rs2 >= 0rs1 >= 0 && rs2 >= 0[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] memblock_alloc_try_nid: 240 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_setup_first_chunk+0x69c/0x78c
[    0.000000] memblock_alloc_try_nid: 105 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_alloc_first_chunk+0x98/0x314
[    0.000000] memblock_alloc_try_nid: 1024 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_alloc_first_chunk+0xd8/0x314
[    0.000000] memblock_alloc_try_nid: 1032 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_alloc_first_chunk+0x100/0x314
[    0.000000] memblock_alloc_try_nid: 160 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 pcpu_alloc_first_chunk+0x124/0x314
rs1 <= 0 && rs2 >= 0rs1 >= 0 && rs2 >= 0[    0.000000]    memblock_free: [0x0000000080fc6000-0x0000000080fc6fff] pcpu_free_alloc_info+0x24/0x34
[    0.000000] func start_kernel ( 714 )
[    0.000000] func start_kernel ( 716 )
[    0.000000] func start_kernel ( 718 )
[    0.000000] Built 1 zonelists, mobility grouping off.  Total pages: 3535
[    0.000000] func start_kernel ( 721 )
[    0.000000] func start_kernel ( 723 )
[    0.000000] Kernel command line: console=hvc0 earlycon=sbi console=hvc0 earlycon=sbi memblock=debug
[    0.000000] func start_kernel ( 726 )
[    0.000000] func start_kernel ( 728 )
[    0.000000] func start_kernel ( 733 )
[    0.000000] func start_kernel ( 737 )
[    0.000000] func start_kernel ( 740 )
[    0.000000] func start_kernel ( 747 )
[    0.000000] memblock_alloc_try_nid_nopanic: 16384 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 alloc_large_system_hash+0x2c4/0x4c0
[    0.000000] Dentry cache hash table entries: 2048 (order: 2, 16384 bytes)
[    0.000000] memblock_alloc_try_nid_nopanic: 8192 bytes align=0x40 nid=-1 from=0x0000000000000000 max_addr=0x0000000000000000 alloc_large_system_hash+0x2c4/0x4c0
[    0.000000] Inode-cache hash table entries: 1024 (order: 1, 8192 bytes)
[    0.000000] func start_kernel ( 749 )
[    0.000000] Sorting __ex_table...
[    0.000000] func start_kernel ( 751 )
[juiceRv]set_rv_scr csr_addr 0000000000000105(csr_addr_stvec) new_v ffffffff80020e54
[    0.000000] func start_kernel ( 753 )
[    0.000000] func mm_init ( 621 )
[    0.000000] Memory: 10068K/14336K available (2794K kernel code, 181K rwdata, 620K rodata, 128K init, 240K bss, 4268K reserved, 0K cma-reserved)
[    0.000000] func mm_init ( 623 )
[rv64_sim][dev][mmu][err]rv.c(6220):V:0 R:0 W:0
[rv64_sim][dev][mmu][err]rv.c(6221):如果pte.v = 0,或者pte.r = 0且pte.w = 1,则停止并引发与原始访问类型相对应的页面错误异常。
[rv64_sim][dev][mmu][err]rv.c(6305):rv_peripheral_device_mmu_translation pc:ffffffff800b3004 va 000000017fc861df pa 0000000080579c10
[rv64_sim][proc][err]rv.c[RISCVTrap](1456){pc:ffffffff800b3004}:RV_exception_Load_page_fault va 000000017fc861df
[rv64_sim][dev][mmu][err]rv.c(6317):this addr not found
[    0.000000] Unable to handle kernel paging request at virtual address 000000017fc861df
[    0.000000] Oops [#1]
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 5.0.0-g1e922e1de #51
[    0.000000] sepc: ffffffff800b3004 ra : ffffffff800b3004 sp : ffffffff80379c20
[    0.000000]  gp : ffffffff803a3178 tp : ffffffff80382418 t0 : 0000000000008000
[    0.000000]  t1 : 0000000000000000 t2 : 0000000000000000 s0 : 000000017fc862ef
[    0.000000]  s1 : ffffffff80391468 a0 : 0000000000000000 a1 : ffffffff80de4008
[    0.000000]  a2 : 0000000000000001 a3 : 0000000000000000 a4 : 0000000000000000
[    0.000000]  a5 : ffffffffffffff01 a6 : 00000000000000ff a7 : 0000000000000000
[    0.000000]  s2 : 0000000000000000 s3 : 0000000000000000 s4 : ffffffff80391458
[    0.000000]  s5 : ffffffff8039fdf0 s6 : 000000007fc60188 s7 : 0000000000000001
[    0.000000]  s8 : 0000000000000001 s9 : 0000000000000000 s10: 0000000000000088
[    0.000000]  s11: 00000000003fffff t3 : ffffffff8039fe78 t4 : 0000000000000001
[    0.000000]  t5 : ffffffff8039fe78 t6 : c000000000000000
[    0.000000] sstatus: 0000000000000000 sbadaddr: 000000017fc861df scause: 000000000000000d
[    0.000000] random: get_random_bytes called from print_oops_end_marker+0x58/0x7c with crng_init=0
[    0.000000] ---[ end trace c955a8d686188788 ]---
[    0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
[    0.000000] ---[ end Kernel panic - not syncing: Attempted to kill the idle task! ]---
oops! stop!!!
------------------------global_vm_log_output global_vm_log_pos:0------------------------

最新进度,linux kernel还是没跑起来

离线

#21 2021-05-07 19:35:47 分享评论

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 657
积分: 640

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

bellard的riscv&x86模拟器
https://bellard.org/tinyemu/

离线

#22 2021-05-08 10:55:19 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

kekemuyu 说:

bellard的riscv&x86模拟器
https://bellard.org/tinyemu/

谢谢大佬分享,一直也有关注这个天才大佬的项目。

离线

#23 2021-05-08 15:59:40 分享评论

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 193
积分: 185.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

20210508更新:
1,上传一个ubuntu20.04上可以正常运行的发布包,感谢@XBOOT大佬的反馈。
2,添加了div指令支持。
3,修复了divuw,divw,remu,remw,amomin.w,amoswap.w的指令错误。
juice_vm_for_Linux_b58244f3.zip

最近编辑记录 xiaohui (2021-05-08 16:01:15)

离线

#24 2021-05-08 17:51:08 分享评论

xboot
会员
注册时间: 2019-10-15
已发帖子: 226
积分: 177

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

退出时,恢复一下终端的状态吧,看不到光标了,还有参数选项解释可以详细点,现在不知道怎么传参

离线

#25 2021-05-08 18:24:27 分享评论

novice
会员
注册时间: 2019-07-26
已发帖子: 51
积分: 48.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

kekemuyu 说:

bellard的riscv&x86模拟器
https://bellard.org/tinyemu/

下了,1M大小,支持X86和RISC-V,还可以json配置。不错,正在学习。

离线

#26 2021-05-14 09:02:58 分享评论

ma6254
会员
注册时间: 2019-11-03
已发帖子: 38
积分: 36.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

可以gdb调试吗?

离线

#27 2021-05-14 09:19:59 分享评论

raspberryman
会员
注册时间: 2019-12-27
已发帖子: 490
积分: 458.5

Re: [juicevm] 只需要不到5000行代码实现一个risc-v虚拟机,纯c语言实现,无第三方库

kekemuyu 说:

bellard的riscv&x86模拟器
https://bellard.org/tinyemu/

https://github.com/franzflasch/riscv_em  RISCV模拟器

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn