byd yes
这个作者很懒,什么都没留下…
展开
-
macbook m2 安装riscv-elf-gdb
macbook m2上远程单步调试linux内核。原创 2023-02-24 13:39:53 · 554 阅读 · 1 评论 -
risc-v 栈分析
下面查看该进程的内存映射(memory map),要查看GDB attach了的进程的内存映像,可以执行一下命令,执行该命令后,GDB就会显示与被调试的进程相对应的/proc//maps的信息。它表示栈空间,栈空间的顶端是0x3fff800000。然而,刚看到的栈指针的值却是0x3fff7ffff0,超出了栈的范围。访问地址超出了栈的范围,也就是说,发生了栈溢出。GDB等调试器的backtrace功能是通过搜索栈中保存的 信息来实现的。LR_c 指的是父函数调用子函数时,返回子函数的pc值。......原创 2022-08-26 12:40:21 · 1483 阅读 · 0 评论 -
riscv ELF bss段解析
在调试risc-v-bm的时候,实现malloc函数后,risc-v-bm出现错误。原因是在exec中,没有实现对bss段的初始化。怎么找到这个问题的呢?malloc代码_block_head变量是全局定义为0的。编译器将其放在了bss段。使用readelf可以读取每个段的信息。bss的type为NOBITS,flags为WA, WA意思是可写、需要分配内存,size为8,sh程序只定义了一个全局变量,变量值为0。注意:只有全局变量,且值为0才会放在bss段。读取bss的代码。......原创 2022-07-13 09:34:17 · 599 阅读 · 0 评论 -
riscv ASID疑问
最近几天调试自己写的risc-v的裸机操作系统,在写完malloc程序后,调用malloc程序分配内存时,最终调用到了sbrk,sbrk中分配vma或者扩大vma的容量。在程序真正是用内存时,触发缺页异常,映射真正的内存。free的时候,使用brk释放内存。在反复malloc/free的时候出现了程序跑飞了。经过不断的gdb和printk debug,发现释放的内存还可以被访问,而不是访问新映射的内存。经过测试,需要刷tlb。在每次map/unmap的时候刷新tlb。代码链接在risc-v-bm程序中原创 2022-07-13 09:17:15 · 473 阅读 · 0 评论 -
risc-v “access fault“和“page fault“区别
access fault简单的说access fault发生在PMP检测时。意味着处理器使用没有权限的内存。发生在至少有user模式的机器上,因为在machine模式下,处理器可以访问所有的内存。因此只有 M 模式的处理器可能无法通过 PMP 检查。此外,access fault可能是由于 PMA(物理内存属性)检查失败而导致的,这也适用于 M 模式。page fault当处理器试图使用它可能有权限使用的内存,但内存块尚未可用时,通常会产生page fault。page fault只能发生在具有原创 2022-05-26 17:39:27 · 2246 阅读 · 0 评论 -
RISCV WMO和TSO具体解决什么问题
本文给人解释RISCV的WMO和TSO模型具体解决什么问题。多核CPU的Cache问题很麻烦。多核不复杂,就是有多个执行体,各有各的动作而已。Cache也不复杂,就是访问内存的时候留一份下来,下次访问的时候直接从Cache(通常是SRAM之类更快的内存)中取而已。但把这两个简单的概念都放进来,这个问题就复杂了:在你的Cache中的数据,怎么能够让其他人知道呢?其他人按什么顺序知道呢?定义指令的时候这是个非常复杂的问题,规矩复杂了,代码没法写。规矩简单了,硬件做不出效率来。为此,我们先定义两个基本的概转载 2022-04-19 08:58:16 · 649 阅读 · 0 评论 -
12. 自制操作系统: risc-v ACLINT
ACLINT全称: Advanced Core LocalInterruptor1.介绍这个RISC-V ACLINT规范定义了一组内存映射设备,这些设备在一个多HART RISC-V平台上为每个HART提供处理器间中断(IPI)和定时器功能。这些hart级的IPI和定时器功能是在多hart RISC-V平台上运行的操作系统、引导加载程序和固件所必需的。SiFive核心本地中断器(CLINT)在RISC-V世界中被广泛采用,以提供机器级IPI和定时器功能。不幸的是,SiFive CLINT对于.原创 2022-04-15 15:15:47 · 1536 阅读 · 0 评论 -
11. 自制操作系统: risc-v Svnapot/Svpbmt标准扩展
Svnapot“Svnapot” Standard Extension forNAPOT Translation Contiguity,Version 1.0在Sv39、Sv48和Sv57中,当PTE的N位等于1时,此时的PTE表示一个区域内的连续虚拟地址到物理地址的转换,并且这个区域的PTE[5:0]比特位均相同,说明这个需要连续转换的页面的属性相同。此类范围必须是自然对齐的 2的N次方 (NAPOT) 粒度,大于基本页面大小。Svnapot扩展依赖于Sv39在地址转换...原创 2022-04-13 11:18:29 · 2808 阅读 · 0 评论 -
10.4 自制操作系统: risc-v 虚拟内存系统
Sv32全称: Page-Based 32-bit Virtual-Memory Systems当Sv32是被写入到satp.MODE时,s-mode是在一个32-bit的虚拟内存系统。在这种模式下,supervisor和user虚拟地址通过遍历基树页表转换为supervisor物理地址。当 SXLEN=32 时支持 Sv32,并且旨在包含足以支持现代基于 Unix 的操作系统的机制。Addressing and Memory Protection(寻址和内存保护)Sv32 实现支持原创 2022-04-12 10:35:35 · 3046 阅读 · 2 评论 -
10.3 自制操作系统: risc-v Supervisor寄存器satp
satp全称 Supervisor Address Translation and Protection Registersupervisor模式下的地址翻译和保护寄存器satp是一个SXLEN-bit 读写寄存器,控制s-mode下地址转换和地址保护。格式如下:此寄存器保存root page table的物理地址编号(PPN),例如supervisor物理地址被分割为4KiB;地址空间标识符(ASID),方便在每个地址空间的基础上进行地址转换。MODE字段,选择当前的地址.原创 2022-04-11 14:28:38 · 3585 阅读 · 1 评论 -
10.2 自制操作系统: risc-v Supervisor寄存器sscratch/sepc/scause/stval/senvcfg
Supervisor Scratch Register (sscratch)sscratch是一个SXLEN-bit 读写寄存器,在supervisor下使用。通常,在hart执行user代码时,sscratch是用于保存一个指向本地 supervisor上下文的地址。在trap处理开始时,sscratch与user 寄存器交换,提供一个初始的working寄存器。Supervisor Exception Program Counter (sepc)管理者异常程序计数器sepc是一个SXLEN-bi原创 2022-04-10 19:14:53 · 4525 阅读 · 0 评论 -
10.1 自制操作系统: risc-v Supervisor寄存器 timers/performace counters/scounteren
Supervisor Timers and Performance Counters管理器软件使用与用户模式软件相同的硬件性能监视工具,包括time、cycle和instret CSRs。具体实现中会提供修改counter值的机制。在实现中,必须依据real-time counter, time提供调度timer中断。Counter-Enable Register (scounteren)counter-enable寄存器scounteren是一个32位寄存器,它控制u模式下硬件性能监控计数器的可原创 2022-04-08 20:35:11 · 803 阅读 · 0 评论 -
10. 自制操作系统: risc-v Supervisor寄存器sstatus/stvec/sip/sie
sstatus 全称:Supervisor Status Registersstatus寄存器是一个SXLEN-bit读写寄存器,跟踪处理器当前运行状态。 字段名称 bit 含义 功能 SSP 8 0:表示之前的mode为U-mode 记录hart在进入s-mode前的执行模式。 当执行 SRET 指令从trap...原创 2022-04-05 13:17:30 · 4742 阅读 · 3 评论 -
9. 自制操作系统: risc-v内存相关介绍
Memory Ordering RVWMO内存一致性模型 RISC-V使用一种名为“RVWMO”(RISC-V弱内存排序, RISC-V Weak Memory Ordering)的内存模型,旨在为架构师提供灵活性,以构建高性能可伸缩的设计,同时支持易于处理的编程模型.在RVWMO下,从同一hart上的其他内存指令的角度来看,运行在单个hart上的代码似乎是按照顺序执行的,但来自另一个hart的内存指令可能会观察到第一个hart上的内存指令以不同的顺序执行。因此,多线程代码可能需要显式的同步.原创 2022-04-02 17:25:05 · 4940 阅读 · 0 评论 -
8.7 自制操作系统: risc-v Machine寄存器mscratch/mepc/mcause/mtval
mscratch 全称: Machine Scratch Register,不晓得这里scratch该如何翻译,姑且就翻译成机器模式临时存储寄存器。mscratch寄存器是专用于机器模式的mxlen位读/写寄存器。通常,它用于保存指向机器模式hart-本地上下文空间的指针,并在进入m模式trap处理程序时与用户寄存器进行交换。 mepc 全称:机器模式异常程序计数器( Machine Exception Program Counter)mepc是一个MAXLEN-bit的...原创 2022-04-01 17:45:32 · 5980 阅读 · 0 评论 -
8.6 自制操作系统: risc-v Machine寄存器mcounteren/mcountinhibit
mcounteren 全称:机器计数器使能寄存器( Machine Counter-Enable Register)counter-enable寄存器mcounteren是一个32-bit的寄存器,控制硬件性能监视器couters作用域下一个最低特权模式。此寄存器仅控制可访问性。读取或写入这个寄存器的行为不会影响底层计数器,即使在不可访问时,这些计数器也会继续增加。当清除mcounteren寄存器中的CY、TM、IR或HPMn位时,当以s模式或u模式执行时,试图读取周期、时间、in...原创 2022-03-31 15:46:59 · 1096 阅读 · 0 评论 -
8.5 自制操作系统: risc-v Machine Hardware Performance Monitor
Hardware Performance MonitorM-mode包括一个基本的硬件性能监控设施。mcycle CSR计算hart运行的处理器内核所执行的时钟周期数。minstret CSR计数器统计已经执行的指令数量(The minstret CSR counts the number of instructions the hart has retired "参考:Instructions Retired Event")。在所有的RV32和RV64系统上,mcycle和minstret都是64..原创 2022-03-29 14:48:40 · 1334 阅读 · 0 评论 -
8.4 自制操作系统: risc-v Machine寄存器 mip/mie
mip全称Machine Interrupt-Pending Registermip寄存器是一个MXLEN-bit的读/写寄存器,包含了挂起中断的信息mie全称Machine Interrupt-Enable Registermie寄存器是第一个的MAXLEN-bit位的读写寄存器,包含允许中断位mie和mip的bits[15:0]是分配给标志中断的。bits[16:MAXLEN-1]是用户自定义。如下图红色框所示。如果中断i想陷入M模式,必须原创 2022-03-11 15:10:01 · 2437 阅读 · 0 评论 -
8.3 自制操作系统: risc-v Machine寄存器 mtvec/medeleg/mideleg
mtvec全称Machine Trap-Vector Base-Address Register机器陷阱向量基地址寄存器1.mtvec必须是被实现的2.边界必须4字节对齐,MODE域的实现,可能会增加额外的对齐条件例如当Mode=vectored时,在机器模式下发送timer中断时,pc将被设置为BASE+0x1c.medeleg和medeleg全称Machine Trap Delegation Registers机器陷阱代理寄存器medeleg: mac..原创 2022-03-09 11:48:17 · 3340 阅读 · 0 评论 -
8.2 自制操作系统: risc-v Machine寄存器说明mstatus和mstatush
机器模式下的CSRs 寄存器名字 全称 权限 功能 描述 misa Machine ISA Register misa WARL read-write ...原创 2022-03-09 11:41:19 · 5511 阅读 · 2 评论 -
8.1 自制操作系统: risc-v 控制和状态寄存器(CSRs)
系统主要操作码用于对RISC-V ISA中所有特权指令进行编码。主要被分为两类原子read-modify-write控制和状态寄存器(CSRs), 被定义在Z扩展中。标准CSRs对于读没有副作用,但是可能对于写可能有影响。1.CSR地址映射的约定标准RISC-V ISA为多达4,096个csr留出12位编码空间(csr[11:0])。按照约定,CSR地址的前4位(CSR[11:8])根据权限级别对CSR的读写可访问性进行编码,最上面的两位(csr[11:10])表示寄存器是读/写(00、01或1原创 2022-03-09 11:30:34 · 4563 阅读 · 0 评论 -
7. 自制操作系统: risc-v 通用寄存器
RISC-V基础ISA由31个用于保存整数值的通用寄存器x1-x31组成。寄存器x0固定连接到常数0。还有一个额外的用户可见程序计数器pc寄存器,它保存当前指令的地址。RISC-V没有定义一个特定的子例程返回地址链接寄存器,但它确实建议标准软件调用约定应该使用寄存器x1来存储调用的返回地址。这些寄存器的宽度由使用的RISC-V基变量定义。也就是说,对于RV32,寄存器是32位宽,对于RV64,寄存器是64位宽调用惯例在传统的RISC-V软件中,堆栈向下增长,堆栈指针总是16字节对齐。原创 2022-03-07 09:02:03 · 2965 阅读 · 0 评论 -
6.自制操作系统: risc-v 比较和跳转指令
比较指令 指令名称 功能 ISA type 用法 含义 BEQ 相等时分支 RV32I/RV64I B beq rs1, rs2, offset 若寄存器 x[rs1]和寄存器 x[rs2]的值相等,把 pc 的值设为当前值加上符号位扩展的偏移 offset。原创 2022-03-03 09:43:39 · 4982 阅读 · 0 评论 -
5.自制操作系统: risc-v 算术和移位指令
算术指令 指令名称 功能 ISA type 用法 含义 ADD 加法 RV32I/RV64I R add rd. rs1. rs2 把寄存器 x[rs2]加到寄存器 x[rs1]上,结果写入 x[rd]。忽略算术溢出。 ADDI 加立即原创 2022-03-03 08:53:58 · 1269 阅读 · 0 评论 -
4.自制操作系统: risc-v 加载存储指令
加载指令 指令名称 功能 ISA type 用法 含义 LA 地址加载,伪指令 RV32I/RV64I 伪指令 la rd, symbol 将 symbol 的地址加载到 x[rd]中。当编译位置无关的代码时,它会被扩展为对全局偏移量表 (Global Of.原创 2022-02-28 20:04:50 · 2766 阅读 · 0 评论 -
3.自制操作系统: risc-v qemu virt board debug
根据上一篇文章的步骤,可以在终端输出"hello world"现在我们使用工具gdb-multiarch单步调试程序安装sudo apt install gdb-multiarch编译$ makerm -rf build *.img kernel.mapmkdir -p buildriscv64-linux-gnu-gcc -g -Wall -nostdlib -Iinclude -MMD -c src/start.c -o build/start_c.oriscv64-原创 2022-02-22 17:44:11 · 667 阅读 · 0 评论 -
2.自制操作系统: risc-v virt board output “hello world“
平台查看qemu支持的riscv64的board$ qemu-system-riscv64 -machine helpSupported machines are:none empty machinesifive_e RISC-V Board compatible with SiFive E SDKsifive_u RISC-V Board compatible with SiFive U SDKspike原创 2022-02-22 16:59:29 · 1043 阅读 · 1 评论 -
1. 自制操作系统:搭建risv-c qemu开发环境
宿主机:ubuntu 20.04安装qemu-system-riscv64和qemu-system-riscv32sudo apt install qemu-system-misc查看环境$ qemu-system-riscv32 --versionQEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.19)Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project deve原创 2022-02-21 09:25:29 · 2055 阅读 · 0 评论