首页
苦瓜小仔
取消

【笔记】rCore (RISC-V):tmux 使用记录

背景 tmux 是一个流行且相当成熟的终端复用工具。在 Ubuntu 中,你可以使用 apt install tmux 安装它。 终端复用只有一个目的:在一个终端界面运行多个终端会话,从而尽可能地减少窗口的数量,但尽可能多地控制多个终端。 作为一个每天使用终端的人,有必要梳理和介绍我在这方面的终端使用经验。 实现终端复用 (terminal multiplex) 或者类似的效果有多种...

【笔记】rCore (RISC-V):qemu 使用记录

Qemu 有两种运行模式 qemu-system-riscv64 qemu-system-riscv64 模拟系统级模拟一台 RISC-V 64 裸机,它包含处理器、内存及其他外部设备,支持运行完整的操作系统。 常用以下命令启动内核: qemu-system-riscv64 \ -machine virt \ -nographic \ -bios ../boo...

【笔记】rCore (RISC-V):特权级

src: https://rcore-os.cn/rCore-Tutorial-Book-v3/chapter2/1rv-privilege.html Why 实现特权级机制的根本原因是应用程序运行的安全性不可充分信任。 从我的理解来看,权级的出现主要是为了 处理程序的错误 和 限制程序的资源(指令、内存地址)。 对于前者,一个程序出现错误时,这导致执行环境被破坏,影...

【笔记】rCore (RISC-V):程序的内存布局

程序的内存布局 一个程序加载到内存之后,这部分内存可以划分为两大块:代码区域和数据区域。 可以用段 (section) 来描述一段连续的内存空间,用 .name 来命名一个段,在汇编中,用 .section .name 声明一个段的开始。 代码 (code memory):.text 用来存放代码(也就是指令) 数据 (data memory): ...

【笔记】rCore (RISC-V):GDB 使用记录

安装 GDB GDB 需要针对 riscv64 平台编译的版本才能用来调试内核,其二进制文件为 riscv64-unknown-elf-gdb。 rCore 教程的配置环境一章给了 GDB 预编译二进制的下载链接,但那是在 2020 年版本了。 最大的缺点在于不支持 TUI 插件和 dbg-dashboard。 所以,为了愉快地调试代码,需要自己编译最新的 GDB。GDB 编译流程在...

【笔记】rCore (RISC-V):指令的二进制格式

示例:beq x1 x2 0x1f 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 1...

【笔记】rCore (RISC-V):函数调用与调用栈

函数调用是一种控制流结构 程序中构造的 控制流 (Control Flow) 具有多种结构。在汇编级别,它们核心都是利用跳转一类的指令: 控制流结构 汇编指令 说明 分支结构 (如 if/switch 语句) B 型指令 (条件分支) beq, bne, blt, b...

【笔记】《期货市场技术分析》约翰·墨菲

《道氏理论》基本原则 平均价格包容消化一切因素。 市场具有三种趋势。 趋势定义是,只要相继的上冲价格波海和波谷都对应地高过前一个波峰、波谷, 那么市场就处在上升趋势之中。换言之,上升趋势必须体现在依次上升的蜂和谷上。 相反,下降趋势则以依次下降的峰和谷为特征。 趋势分成三类——主要趋势、次要趋势和短暂趋势。 ...

LazyLock 未稳定的难点

LazyLock 的背景 翻看古老的教程,初始化数据用的最多的是 lazy_static!。 但实际上,它正逐渐在被 once_cell 库替代: lazy_static 库已经存在了 10 年,截止目前下载量超过 1.56 亿次,不久前官方宣布 落幕 once_cell 库仅存在 5 年,下载量就已突破 1.4 亿次,其作者就是 Rust Analyzer 的作者 onc...

syn 的高级封装库 parsel

使用 syn 库解析语法树时,常常人工编写 Parse trait 的实现。 最近发现一个基于 syn 和 quote 两个库,具有良好设计和封装的高级库 parsel,它具有以下亮点: 通过自定义类型和 #[derive(Parse, ToTokens)] 的方式,无需重复编写 input.parse() 这种“显而易见”的啰嗦代码 无缝使用 syn 和 quote 库 通...