- 2024-12-03
-
回复了主题帖:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之二--搭建RISC-V实验环境
gtq 发表于 2024-12-3 15:55
哇塞,学到啦,超感谢!多多积累经验哈,盼着有那么一天能派上用场呢。
一起学习!
-
回复了主题帖:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之二--搭建RISC-V实验环境
希望能为你的工作提供些许可借鉴之处。
其实软件安装中还有一些其他Tips,但不一定具有普遍性。比如有些版本的Windows上没有安装Hyper-V,需要自行安装。但限于篇幅,没有面面俱到。
- 2024-12-02
-
发表了日志:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之二--搭建RISC-V实验环境
-
发表了主题帖:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之二--搭建RISC-V实验环境
本帖最后由 goldjack 于 2024-12-2 22:19 编辑
因为手头没有RISC-V开发板,所以就借助奔跑吧Linux社区提供的VMware镜像在Windows上搭建了模拟的测试环境,并做了该书第二章中的主要实验。
首先根据奔跑吧Linux社区提供的网址下载了rlk_vmware_image_第二版_v1.5.2压缩包,把它加压后备用。
接着下载了VMware-player-full-17.5.0-22583795-win11用这个版本.exe文件,在 Win11上安装。
启动VMware Workstation 17 Player之后,导入上面已解压的虚拟机rlk_image_v2。
当你启动虚拟机的时候,可能会遇到一些问题:
1)提示你运行虚拟机时启用了侧通道缓解。
解决办法:VMware Workstation Player本身不含“高级”选项,你可以忽略或安装VMware Workstation。
2) 此平台不支持虚拟化的Intel VT-x/EPT,模块”HV””启动失败。
解决办法:你可以通过从Windows控制面板-->程序-->程序和功能-->启用或关闭Windows功能中,关闭Hyper-V功能。
该书的大部分试验是基于一个简单的小型操作系统试验平台BenOS,这个平台可以运行在QEMU和NEMU上。QEMU(Quick EMUlator)和NEMU是两种开源的模拟器。
实验一:在QEMU上运行BenOS:
QEMU输出“Welcome RISC-V!”说明成功运行了BenOS。
关闭QEMU的方法是先按CTRL+A,然后松手、快速按X键。
实验二:单步调试BenOS和MySBI(运行在M模式下的固件):
先在第一个终端(Terminal)中启动QEMU虚拟机的gdbserver:
再在第二个终端(Terminal)中启动GDB工具:
cd /home/rlk/rlk/riscv_programming_practice/chapter_2/benos
gdb-multiarch -tui benos.elf
执行如上命令就可以用工具对BenOS进行单步调试了。
同理,也可以用同样的方法用GDB工具单步调试MySBI固件的elf文件。
先在第一个终端(Terminal)中启动QEMU虚拟机的gdbserver:
cd /home/rlk/rlk/riscv_programming_practice/chapter_2/benos
make debug
再在第二个终端(Terminal)中启动GDB工具调试MySBI:
cd /home/rlk/rlk/riscv_programming_practice/chapter_2/benos
gdb-multiarch -tui mysbi.elf
初步的模拟实验环境搭好了,后面可以边学边做实验了。
To be continued......
-
回复了主题帖:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之一--概览
wangerxian 发表于 2024-11-30 16:18
感觉要知道一些ARM相关的内核和指令,看这个会更有收益。
嗯,比较学习会更有帮助。
- 2024-11-29
-
回复了主题帖:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之一--概览
李晨33 发表于 2024-11-29 15:26
本书的作者是奔跑吧Linux社区的创始人笨叔
对的,这本书的作者是奔跑吧Linux社区的创始人笨叔。
-
回复了主题帖:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之一--概览
本帖最后由 goldjack 于 2024-11-29 07:45 编辑
活动的链接里有,所以上文中没有赘述,这里再转发一下。谢谢!
https://bbs.eeworld.com.cn/elecplay/content/4f88f037#F5
书籍目录
第1章 RISC-V体系结构基础知识
第2章 搭建RISC-V实验环境
第3章 基础指令集
第4章 函数调用规范与栈
第5章 GNU汇编器
第6章 链接器与链接脚本
第7章 内嵌汇编代码
第8章 异常处理
第9章 中断处理与中断控制器
第10章 内存管理
第11章 高速缓存
第12章 缓存一致性
第13章 TLB管理
第14章 原子操作
第15章 内存屏障指令
第16章 合理使用内存屏障指令
第17章 与操作系统相关的内容
第18章 可伸缩矢量计算与优化
第19章 压缩指令扩展
第20章 虚拟化扩展
第21章 RISC-V高性能处理器架构分析
RISC-V体系结构自测题
附录A RISC-V体系结构自测题的参考答案与提示
附录B RV64I指令速查表
附录C RV64M指令速查表
附录D RV64常用伪指令速查表
-
发表了主题帖:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之一--概览
很幸运获得测评《RISC-V 体系结构编程与实践(第2版)》一书的机会,得以学习RISC-V相关的技术并与大家分享。感谢电子工程世界和人民邮电出版社!
书归正传,我会从本书的主要内容、实验环境的搭建和RISC-V相关的知识与具体的实践等几方面分享自己的读书心得。
今天是第一篇:概览。
本书的作者是奔跑吧Linux社区的创始人笨叔,这本书的第一版入选了2023年度国家科学技术学术著作出版基金资助项目。审校是开发了面向世界的RISC-V体系结构创新开元平台的香山处理器团队和RISC-V发明者创立的SiFive公司。
本书的推荐序是SiFive公司联合创始人兼首席架构师、加州大学伯克利分校研究生院教授Krste Asanovic写的,他介绍了RISC-V作为一种简单、高效、可扩展的、开源的指令集架构(ISA)的设计初衷及发展。RISC-V芯片和软件具有高性能、低功耗、灵活、可创新等特点,成千上万家公司支持着整个生态系统。
第二版的前言告诉大家,RISC-V已经成为继X86和ARM之后的第三大主流处理器架构,受到学术界和工业界的广泛关注,并着眼于移动计算、消费电子、数据中心、边缘基础设施等应用场景。
第一版的前言介绍了RISC-V的基本情况和作者的出发点。特别指出了本书的特色:突出动手实践、以问题为导向、基于64位处理器讲述、总结常见陷阱与项目经验。
本书正文共21章,还有RISC-V体系结构自测题和4个附录。较为全面的介绍了RISC-V的方方面面。
第1章是“RISC-V体系结构基础知识”。
RISC是Reduced Instruction Set Computer(精简指令集计算机)的缩写,V表示第五代。RISC-V指令集的优点:设计简洁、模块化、开源、具有丰富的生态。RISC-V指令集包含32位和64位指令集。
RISC-V体系结构特点:
对学术界和工业界完全开放。
真正适合硬件实现的指令集体系结构,而不是一个模拟或者二进制翻译的指令集体系结构。
属于通用的指令集体系结构,而不是针对某个特定微体系结构的实现。
拥有实现最小整数的指令集,作为基础指令集,可以用于教学。在此基础上还能实现众多可选扩展指令,以支持通用软件的开发。
支持IEEE754浮点标准。
支持众多扩展指令集。
支持32位及64位地址空间。
支持多核及异构体系结构。
支持可选的压缩指令编码,用以提高性能和能源效率,并优化静态代码。
支持虚拟化扩展。
支持可伸缩矢量指令扩展。
RISC-V常见处理器:SiFive FU740处理器、香山处理器。
RISC-V体系结构包含的6种处理器模式和各自的作用:
机器模式(M模式):具有对机器实现的的全部访问权限,常用于管理RISC-V上的安全执行环境。通常在M模式下运行SBI固件,为操作系统提供服务。
特权模式(S模式):通常用来运行操作系统的内核,为应用程序提供服务。
用户模式(U模式):特权级别最低,通常用来运行应用程序。
HS模式:用来运行虚拟化管理程序。
VS模式:通常用来运行虚拟机操作系统内核。
VU模式:通常用来运行虚拟机操作系统中的应用程序。
RISC-V体系结构包含的通用寄存器:
64位/32位的RISC-V体系结构包含32个64位/32位的整型通用寄存器,编号从x0到x31。对于浮点数运算,64位的RISC-V体系结构也提供32个浮点数通用寄存器,分别是f0到f31寄存器。
系统控制和状态寄存器(Control and Status Register, CSR):
1)M模式的系统寄存器;
2)S模式的系统寄存器;
3)U模式的系统寄存器。
To be continued......
-
发表了日志:
《RISC-V 体系结构编程与实践(第2版)》阅读心得之一--概览
- 2024-11-26
-
回复了主题帖:
《RISC-V 体系结构编程与实践(第2版)》互动:接龙解答作者笨叔出的思考题
第6章:
1.什么是链接器?为什么链接器简称LD?
答:链接器是用来完成链接过程的工具。而链接指的是把编译过程中生成的目标文件(也包括用到的标准库函数目标文件)的代码段、数据段以及符号表等内容收集起来,并按照某种格式(如ELF)组合成一个可执行二进制文件的过程。操作系统发展的早期并没有链接器的概念,操作系统的加载器(Loader,LD)做了所有的工作。后来操作系统越来越复杂,慢慢出现了链接器,所以LD成为链接器的代名词。
2.链接脚本中的输入段和输出段有什么区别?
答:链接脚本中的输入段用来告诉链接器如何输入文件映射到内存布局。输入段包括输入文件以及对应的输入段。输出段是链接器处理输入段后生成的最终可执行文件中的部分。一个输出段有虚拟内存地址(VMA)和加载内存地址(LMA)两个地址。
3.什么是加载地址和虚拟地址?
答:加载地址(Load Memory Address,LMA)通常指的是指令中指定的内存地址,用于指示CPU从该地址读取数据。加载地址可以是虚拟地址或物理地址,取决于是否启用了虚拟地址。虚拟地址(Virtual Memory Address, VMA)是CPU生成的一个地址,用于访问主存,必须经过地址翻译转换为物理地址。
-
回复了主题帖:
《RISC-V 体系结构编程与实践(第2版)》互动:接龙解答作者笨叔出的思考题
本帖最后由 goldjack 于 2024-11-26 19:14 编辑
第5章:
1.什么是汇编器?
答:汇编器是将汇编代码翻译为机器目标代码的程序。
2.如何给汇编代码添加注释?
答:“#”字符开始,表明其后的内容为注释。
3.什么是符号?
答:符号是一个核心概念。程序员使用符号命名事物,连接器使用符号链接,调试器使用符号调试。符号可以代表它所在的地址,也可以当做变量或者函数使用。
4.什么是伪指令?
答:伪指令是对汇编器发出的命令,它在源程序汇编期间由汇编器处理。伪指令是由汇编器预处理的指令,可以分解为几条指令的集合。
- 2024-11-21
-
回复了主题帖:
免费下载 | 安森美电动汽车充电白皮书,看碳化硅如何缓解“里程焦虑”!
不错!来学习!
- 2024-11-20
-
回复了主题帖:
读书入围名单:《RISC-V 体系结构编程与实践(第2版)》
个人信息无误,确认可以完成阅读计划和打卡任务
- 2024-09-27
-
加入了学习《DigiKey 应用说:Raspberry Pi 5 在视频直播中的应用》,观看 Raspberry Pi 5 在视频直播中的应用
-
加入了学习《littlefulse 多元新技术赋能安全可靠和高效》,观看 LIT-3762-11_SZSMF4L_Captions-CN
-
加入了学习《littlefulse 多元新技术赋能安全可靠和高效》,观看 LIT-3762-22-25_MATE12B-MITI7L-ReedSwitches-Captions-CN
-
加入了学习《littlefulse 多元新技术赋能安全可靠和高效》,观看 LIT-3762-23_TTapeCaptions-CN