rust-工具链常用的命令

7 月 9 日
阅读 2 分钟
334
Rust 语言本身包括以下几个部分:编译器(rustc):将 Rust 代码编译为可执行文件或库。标准库(std):提供常用的数据结构、算法、I/O 操作等。

risc-v--sv39汇编实现

7 月 8 日
阅读 3 分钟
261
第一级页表(页目录):负责最高的 9 位虚拟地址。第二级页表(页中间目录):负责中间的 9 位虚拟地址。第三级页表(页表):负责最低的 9 位虚拟地址。

risc-v 函数调用规范

7 月 8 日
阅读 1 分钟
338
RISC-V 的寄存器分为以下几类:临时寄存器:t0-t6(x5-x7, x28-x31)保存寄存器:s0-s11(x8, x9, x18-x27)参数寄存器:a0-a7(x10-x17)返回地址寄存器:ra(x1) 注意:不是返回值,call函数的时候的下一条指令栈指针寄存器:sp(x2)全局指针寄存器:gp(x3)线程指针寄存器:tp(x4)

risc-v--PLIC中断原理

7 月 8 日
阅读 1 分钟
248
PLIC 硬件结构包括以下几个主要部分:优先级寄存器(Priority Registers):每个中断源都有一个优先级寄存器,用于设置中断的优先级。挂起寄存器(Pending Registers):每个挂起寄存器包含32个中断源的挂起状态。中断使能寄存器(Enable Registers):每个hart都有一组中断使能寄存器,用于使能或禁用特定中断源。阈值...

risc-v--sv39分页

7 月 7 日
阅读 3 分钟
253
问题一: PTE的格式怎么样? 不同的模式格式都是一样的吗? 问题二: MMU需要什么样的数据,怎么样提前准备呢?问题三: 怎么配置一个虚拟地址到物理地址到映射呢?问题四: 内存的场景的位操作是怎么样的呢?问题五: cpu怎么知道页的大小呢?

risc-v--sv39(rust版本)

7 月 7 日
阅读 3 分钟
206
虚拟地址虽然虚拟地址是 64 位的,但在 Sv39 模式下,只使用前 39 位。最高的 25 位用于符号扩展,以确保地址的正确性。具体来说:如果位 38 是 0,则虚拟地址的高位(位 63 到 39)应全部为 0。如果位 38 是 1,则虚拟地址的高位(位 63 到 39)应全部为 1。这样可以确保虚拟地址在进行符号扩展后仍然是有效的 64 位地址。

risc-v-- satp寄存器

7 月 7 日
阅读 2 分钟
369
问题一:cpu 怎么知道自己用的是那种分页方式呢? 靠MODE字段问题二:PNN怎么设计的呢?问题三:多个虚拟地址对应一个物理地址怎么办呢?

risc-v-- PMP寄存器

7 月 7 日
阅读 3 分钟
611
PMP 是 RISC-V 中用于实现物理内存保护的机制。它允许配置多个内存保护区域,并对每个区域设置访问权限,以防止未授权的访问。PMP 的功能

risc-v--立即数

7 月 6 日
阅读 1 分钟
374
12 位的 0x800 的十进制表示0x800 是一个 12 位的十六进制数。在 RISC-V 中,12 位立即数是有符号的,这意味着最高位是符号位。如果最高位是 1,该数值表示负数。

如何使用vscode调试risc-v

7 月 6 日
阅读 2 分钟
425
debug的配置文件launch.json {代码...} debug效果如何显示内存呢?我使用的是这个插件:risc-v 默认是小端排序,现实的也是小端内存显示的配置页面:这个是1个字节排序结果这个是8个字节排序结果

risc-v实战--最简单的函数调用

7 月 6 日
阅读 1 分钟
202
最简单的函数调用场景:1+2=3 {代码...} makefile文件: {代码...} 停止程序:pkill -f qemu-system-riscv64

risc-v 指令设计的规范

7 月 4 日
阅读 1 分钟
148
[链接]入门到精通 :

risc-v -- 引导程序sbi

7 月 4 日
阅读 2 分钟
163
SBI(Supervisor Binary Interface)在 RISC-V 架构中的意义在于:提供标准化接口,抽象硬件细节,提高系统的可移植性。简化操作系统开发,使操作系统开发者可以专注于更高层次的功能实现。提供关键系统服务接口,如定时器、中断控制和处理器核管理等。促进 RISC-V 生态系统的发展,使硬件厂商和操作系统开发者可以更加...

二进制分析实战--环境搭建

7 月 1 日
阅读 1 分钟
178
安装依赖环境 {代码...} makefile {代码...} c代码 {代码...} file hello.o {代码...} file hello.out {代码...} 剥离二进制文件: {代码...} 剥离之后 {代码...} 解释:relocatable:not stripped:statically linked:

risc-v-->kvm-->qemu-->docker

7 月 1 日
阅读 2 分钟
240
虚拟化扩展(H 扩展)是 RISC-V 支持虚拟化的核心。它引入了以下关键特性:虚拟机监控器模式(H-mode):提供了一个新的特权级别,用于虚拟机监控器的运行和管理。虚拟化相关寄存器:增加了一些新的寄存器,用于管理和控制虚拟化环境。例如,hgatp(Hypervisor Guest Address Translation and Protection)、hedeleg(Hy...

FreeRTOS源码分析--环境搭建

6 月 29 日
阅读 1 分钟
211
基于官方的源码,把代码平铺到项目的根目录,代码可以直接编译通过。最近在学习risc-v,工程只兼容risc-v。进一步降低代码量。后续,我会加一些中文注解。

risc-v--系统调用

6 月 28 日
阅读 1 分钟
137
陷入入口, 系统调用会触发下面逻辑 {代码...} 系统调用的具体逻辑实现逻辑 {代码...} 系统调用-系统层面封装 {代码...}

risc-v--定时任务

6 月 28 日
阅读 3 分钟
243
定时器中断的触发是由硬件来检查和处理的。在RISC-V架构中,CLINT(Core Local Interruptor)负责管理定时器中断。具体来说,硬件会不断比较 mtime 寄存器和每个硬件线程的 mtimecmp 寄存器的值,当 mtime 的值达到或超过 mtimecmp 的值时,硬件会触发一个定时器中断。

risc-v-- 锁的本质

6 月 28 日
阅读 1 分钟
194
锁的本质是什么?系统内的很多事情,本质上都是触发中断。内核就是一个响应中断的for循环。 就是cpu内核有一个hart , 关闭了mstatus的中断位。拉了总闸门。导致当前这个时间只能那个线程里面的事情。

xIE寄存器和xIP寄存器

6 月 28 日
阅读 2 分钟
211
课前准备: 中断是trap 的一种xie可以控制各种中断cpu有全局中断和本地中断, plic就是全局中断,mstatus是中断的总开关一个负载均衡, 后端就是cpu的hart

risc-v --多任务切换的灵魂来了

6 月 28 日
阅读 2 分钟
202
先抛出来一个问题,为什么不直接使用 mscratch ?直接使用 mscratch 作为基地址是不合适的,因为 mscratch 是一个CSR寄存器,而 reg_save 和 reg_restore 宏需要一个通用寄存器作为基地址。此外,mscratch 不能用于加载和存储指令的基地址,因为这些指令只接受通用寄存器作为基地址。

risc-v --怎么使用内存呢?

6 月 27 日
阅读 2 分钟
167
1 << PAGE_ORDER =2的12方 order-1 的值是 0xFFF,它的二进制表示是 1111 1111 1111。address加上 order(即 0xFFF 或 4095)是为了确保任何未对齐的地址在加上 order 后会超过下一个页面边界。然后,通过清空低12位,可以将地址对齐到下一个4KB边界。

risc-v--链接脚本案例之一(权限,变量)

6 月 27 日
阅读 1 分钟
205
主要是涉及对某一个段的权限的配置, 以及给某一个段起一个变量名称, 方便后续使用 {代码...}

risc-v--位运算的黑科技

6 月 26 日
阅读 2 分钟
255
一位操作 {代码...} 多位操作 {代码...}

risc-v --接入第一个系统外设uart

6 月 26 日
阅读 2 分钟
269
课前准备 {代码...} 点评:方法三可读性更好,为啥? 1️⃣不同进制数据算数运算很奇怪,难以理解 2️⃣ 这个场景下0x00 2位够用内存映射I/O(Memory-Mapped I/O,MMIO)操作的是 I/O设备的硬件寄存器,看着是内存而已这种外设一般都需要一个基地址,访问不同的寄存器,在这个基地址上加加的。外设的同一个寄存器,可能有多...

risc-v --ABI规范

6 月 26 日
阅读 2 分钟
300
risc-v 有通用寄存器, 也有一些特殊的寄存器(csr)下表方便查阅吧,一般都是用别名多一些点评:因为是16字节对齐, 所有sp空间-16,不考虑这个情况, 用不了这么多 c 代码 {代码...} 编译:riscv64-elf-gcc -S main.c -o main.srisc-v 代码 {代码...} 寄存器使用约定RISC-V 共有32个通用寄存器,每个寄存器都有特定的...

risc-v --系统内核启动分析

6 月 26 日
阅读 1 分钟
306
每个hart都有一个自己的sp,但是,多个hart 公用一块内存,每个hart的sp 存储的内容是不一样的。关键的代码是 slli t0, t0, 10 这一行。 比如,下面的程序,hart0的栈顶是 stacks+0, hart1 是stacks+1024,hart2 是stacks+2048,...

risc-v --数据对齐问题

6 月 26 日
阅读 2 分钟
327
每个内存地址指向一个字节的数据。因此,地址 0x00 指向一个字节,地址 0x01 指向下一个字节。1字节对齐的数据可以存储在任何地址上,每个数据项只占用1个字节。 {代码...} 2字节对齐的数据必须存储在地址是2的倍数的位置上,每个数据项占用2个字节。 {代码...} 4字节对齐的数据必须存储在地址是4的倍数的位置上,每个数...

risc-v--常用跳转指令

6 月 26 日
阅读 1 分钟
478
jal rd, offset:跳转到 PC + offset,并将返回地址存储到 rd。jalr rd, offset(rs1):跳转到 rs1 + offset,并将返回地址存储到 rd。

risc-v--mcause寄存器

6 月 26 日
阅读 1 分钟
2.4k
#### 点评:描述是哪一种类型, risc-v中中断和异常都是陷入 {代码...} N位:陷入类型:0 表示异常,1 表示中断。N-1到0位: 异常类型陷入类型细分:中断异常