tag risc-v

標籤
貢獻4
76
07:54 AM · Nov 06 ,2025

@risc-v / 博客 RSS 訂閱

putao - sbi--Hart 各種操作

各個狀態流轉的解釋 STARTED :HART 處於正常執行狀態。 轉移到STOP_PENDING狀態:當調用 sbi_hart_stop 之後,當前HART會請求停止。 STOP_PENDING: HART 正在停止過程中。 轉移到 STOPPED狀態: 當HART停止過程完成時。 轉移到 STARTED狀態: 如果停止過程被取消。 STOPPED : HART

asm , rust , risc-v , 引導

收藏 評論

putao - sbi--sbi_remote_sfence

規範: Function Name SBI Version FID EID sbi_remote_fence_i 0.2 0 0x52464E43 清除所有目標HART的指令緩存 sbi_remote_sfence_vma 0.2 1 0x52464E43 使所有目標HA

asm , rust , risc-v , 引導

收藏 評論

putao - risc-v--多任務切換原理

rust 代碼實現。current_task_cx_ptr 當前任務是一段空的內存區域。 用來存放當前任務的寄存器環境。 fn run_next_task(self) { if let Some(next) = self.find_next_task() { let mut inner = self.inner.exclusive_access();

asm , rust , risc-v

收藏 評論

openEuler - RISC-V SIG 新進展:Chromium 等多個桌面軟件登錄歐拉開源操作系統

近日,RISC-V SIG 成功將 Chromium 等桌面軟件適配到 openEuler RISC-V,這是繼 openSUSE 之後第二個跑起來 Chromium 的 RISC-V 發行版。作為桌面應用的核心軟件,瀏覽器決定着一個操作系統整體的用户體驗。目前,RISC-V SIG 已經為 openEuler RISC-V 適配完成 Chromium 和 Firefox 兩大開源瀏覽器。此外,K

操作系統 , openeuler , risc-v , firefox , Linux

收藏 評論

putao - sbi--rustsbi解讀

sbi-rt :按照sbi規範制定的接口,寫的挺好的。這裏直接調用了彙編代碼 sbi-spect: sbi-rt 裏面用到一些常量 sbi-testing:測試 src: 不知道啥用。貌似某個學校寫的玩具,還有第幾章的字樣, 不能嚴謹一點嗎? 到這裏,還沒有看到具體的實現呢? rust-qemu 能給qemu虛擬機直接用的。 整體寫的過於麻煩了,寫的底層的也不是很容易,還要

asm , rust , risc-v , 引導

收藏 評論

putao - risc-v--sv39彙編實現

在 Sv39 模式下,虛擬地址是 39 位,分為三級頁表來管理: 第一級頁表(頁目錄):負責最高的 9 位虛擬地址。 第二級頁表(頁中間目錄):負責中間的 9 位虛擬地址。 第三級頁表(頁表):負責最低的 9 位虛擬地址。 9 位虛擬地址可以表示2的9次方=512個條目。 512條目×8字節/條目=4096字節=4KB 假設我們有一個頁表,包含多個條目,每個條目佔用 8 字節:

asm , risc-v

收藏 評論

putao - risc-v --全部的關鍵字

.ascii:插入一串不以零結尾的字符。 .asciz:插入一串以零結尾的字符。 .balign:在當前位置插入字節以使地址對齊到指定的字節邊界。 .byte:插入一個或多個字節值。 .data:轉到數據段,通常用於定義數據信息。 .define:通常用於定義宏或常量符號,但在不同彙編器中使用可能有所不同。 .double:插入一個或多個雙精度浮點數。 .

asm , risc-v

收藏 評論

putao - risc-v--sv39分頁

sv39分頁:虛擬地址只用了39位,所以才有這個名字 問題一: PTE的格式怎麼樣? 不同的模式格式都是一樣的嗎? 問題二: MMU需要什麼樣的數據,怎麼樣提前準備呢? 問題三: 怎麼配置一個虛擬地址到物理地址到映射呢? 問題四: 內存的場景的位操作是怎麼樣的呢? 問題五: cpu怎麼知道頁的大小呢? 在RISC-V架構中,無論是Sv32、Sv39還是Sv48模式,頁表條

asm , risc-v

收藏 評論

putao - risc-v--sv39(rust版本)

這是一種面向對象的思想。 非常好!!! satp 虛擬地址 雖然虛擬地址是 64 位的,但在 Sv39 模式下,只使用前 39 位。最高的 25 位用於符號擴展,以確保地址的正確性。具體來説: 如果位 38 是 0,則虛擬地址的高位(位 63 到 39)應全部為 0。 如果位 38 是 1,則虛擬地址的高位(位 63 到 39)應全部為 1。 這樣可以確保虛擬

asm , rust , risc-v

收藏 評論

putao - risc-v-- PMP寄存器

問題一:pmp怎麼配置呢? 問題二:什麼時候出發pmp的檢查呢? PMP 是 RISC-V 中用於實現物理內存保護的機制。它允許配置多個內存保護區域,並對每個區域設置訪問權限,以防止未授權的訪問。 PMP 的功能 訪問控制:PMP 可以限制對內存區域的讀、寫和執行訪問。 區域配置:PMP 支持定義多個內存區域,每個區域可以有不同的訪問權限。 特權級別:PMP 可以根據特權級

asm , risc-v

收藏 評論

putao - risc-v 函數調用規範

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(x

asm , risc-v

收藏 評論

putao - risc-v--PLIC中斷原理

PLIC 硬件結構包括以下幾個主要部分: 優先級寄存器(Priority Registers):每個中斷源都有一個優先級寄存器,用於設置中斷的優先級。 掛起寄存器(Pending Registers):每個掛起寄存器包含32箇中斷源的掛起狀態。 中斷使能寄存器(Enable Registers):每個hart都有一組中斷使能寄存器,用於使能或禁用特定中斷源。 閾值寄存器(T

asm , risc-v

收藏 評論

putao - 二進制分析實戰--環境搭建

安裝依賴環境 brew install riscv-gnu-toolchain riscv64-unknown-elf-gcc --version makefile all: riscv64-unknown-elf-gcc -g hello.c -o hello.out #預處理 e: riscv64-unknown-elf-gcc -E -P hello.c -o hell

二進制 , risc-v

收藏 評論

Veronicaaa - 從AMD64到 RISC-V、LoongArch、ARM64,向你介紹deepin的多架構適配之路

全文引述 longlong 在 WHLUG 上的演講,故存在口語化表達。本文僅代表個人觀點和立場。 deepin 23 作為 deepin 20 的後繼版本,最大的改變之一就是添加了多架構支持:從原本只支持 AMD64 架構,到目前支持AMD64、RISC-V、LoongArch(新世界)、ARM64 多個CPU架構平台。 目前 deepin 23 已經發布了AMD64 架構的 Stable 鏡像

linux-kernel , 龍芯 , risc-v , Linux , deepin

收藏 評論

Ackerman - freertos portASM.S之freertos_risc_v_trap_handler函數解析

源碼 源碼複製: .func freertos_risc_v_trap_handler: addi sp, sp, -portCONTEXT_SIZE store_x x1, 1 * portWORD_SIZE( sp ) store_x x5, 2 * portWORD_SIZE( sp ) store_x x6, 3 * portWORD_SIZE( sp )

異常 , risc-v , 中斷 , cpu

收藏 評論

putao - sbi--寄存器ID用法

macros.rs macro_rules! write_csr { ($csr_number:literal) = { /// Writes the CSR #[inline] #[allow(unused_variables)] unsafe fn _write(bits: usize) { mat

asm , rust , risc-v

收藏 評論

putao - risc-v+rust-- 加載用户的app的底層原理?

文章寫的有點墨跡, 我在梳理梳理一下, 其實,就是一個技巧: 內核棧裏面放入的是用户態的數據。還有一點, 用户的程序放到一個位置, 內核去這個位置讀取數據 之前都是內核態,用的棧也是內核態的sp. extern "C" { //彙編地址的入口 fn __restore(cx_addr: usize); } unsafe { //

asm , rust , risc-v

收藏 評論

putao - sbi--底層原理以及調用規範(sbi_call)

用rust 實現規範的定義 // 定義 SbiRet 結構體,用於存儲 SBI 調用的返回值 struct SbiRet { error: i64, value: i64, } /// 實現一個封裝SBI調用的函數 #[inline(always)] fn sbi_call(extension: usize, function: usize, arg0: usize, arg1

asm , rust , risc-v , 引導

收藏 評論

putao - sbi--sbi_send_ipi

如何確定HART掩碼對應關係 每個位的位置對應一個HART ID。例如: 第0位(最低位)對應HART 0 第1位對應HART 1 第2位對應HART 2 如果你想指定HART 1,HART掩碼將是0x2(二進制表示為0b10),因為第1位是1,其他位是0。 // 發送處理器間中斷(IPI)的函數 fn send_ipi(hart_mask: usize) - SbiR

asm , rust , risc-v , 引導

收藏 評論

putao - risc-v-- satp寄存器

問題一:cpu 怎麼知道自己用的是那種分頁方式呢? 靠MODE字段 問題二:PNN怎麼設計的呢? 問題三:多個虛擬地址對應一個物理地址怎麼辦呢? satp(Supervisor Address Translation and Protection)寄存器用於管理地址轉換和保護機制。satp 寄存器的具體格式取決於 RISC-V 的地址空間寬度(如 32 位或 64 位)。 64位的s

asm , risc-v

收藏 評論