网站首页 > 技术文章 正文
现在RISC-V在主流操作系统上基本都能模拟了,不过我还是觉得Linux下好用。
之前在Mac上想用Linux,基本就是在Virtual Box上创建一个虚拟机,从网上下一个Ubuntu的安装iso,安一个就行了(估计运行性能损失会大一些)。
最近发现Docker挺好用,据说性能损失会小。最开始用Docker是沿用VBox上的使用思路,安装openssh-server,用ssh访问(
https://www.cnblogs.com/mengw/p/11413461.html)。后来看到更方便的例子,直接把Guest机的目录映射到Host机的目录,启动起来就能用,保存在Host机目录中的内容也不会随着容器的删除而删除(当然VBox上的共享目录也能做到,没这么方便)。
docker build -t myubuntu:0.0.1
docker run -it --mount type=bind,source=$(PWD),destination=/mnt myubuntu:0.0.1
登进去后/mnt就是Host机的当前目录$(PWD)。如果想登录多个终端就用
docker exec -it <container id> /bin/bash
这样看来,以后Mac上基本不用在Virtual Box中安装Linux了。我也试了在64位Mac的Docker中,使用32位Ubuntu,用是能用,就是运行起来的仍然是x86_64,算了,我就不深究了。
QEMU是个好东西,能够模拟多种不同架构的系统,比只能虚拟相同架构的Virtual Box强多了(有点冤枉,毕竟VBox还能在64位上虚拟32位架构)。安装qemu-user包后出现的qemu-<yyy>模拟的是用户程序执行环境。例如
apt-get install -y qemu-user gcc-riscv64-linux-gnu
riscv64-linux-gnu-gcc -static hello_world.c
qemu-riscv64 ./a.out
如果要开发自己的操作系统,貌似安装gcc-riscv64-unknown-elf和qemu-system就够了。qemu包中的qemu-system-<xxx>模拟的是操作系统(但riscv32/64所在的包是qemu-system-misc)。
gcc-riscv64-linux-gnu - GNU C compiler for the riscv64 architecture
gcc-riscv64-unknown-elf - GCC compiler for embedded RISC-V chips
啥区别?
在Mac下也可以直接安装RISC-V模拟环境。(
https://github.com/riscv/homebrew-riscv)我在Mac上用gdb调试RISC-V程序时gdb功能有点问题,在Linux下就可以,就当macOS支持不好吧。
我没找到支持RISC-V的32位gcc交叉编译器的安装包,只能自己编译一个(
https://github.com/riscv/riscv-gnu-toolchain)。如果在Mac上编译,源码需要在能区分大小写的文件系统上。我的Mac文件系统是不区分大小写的(缺省安装,Mac上Unity工程需要的文件系统只能是不区分大小写的)。使用macOS系统的磁盘管理工具可以很方便地把整个磁盘挂载成区分大小写的APFS宗卷,用的都是同一块硬盘空间,需要区分大小写就用这个挂载点。
但国内恶劣的github下载速度严重影响了我国的IT发展。
用qemu跑一个RISC-V版的linux步骤可参考(
https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html),其中qemu用toolchain中的module就可以,不用单独clone qemu工程。
有没有RISC-V CPU的笔记本电脑可用啊?(
https://abopen.com/news/building-a-risc-v-pc/)
猜你喜欢
- 2025-08-01 AI 推理 | vLLM 快速部署指南
- 2025-08-01 Java实现调用nvidia硬编解码
- 2025-08-01 运维必备:掌握这3个存储技术
- 2025-08-01 Claude Code:完爆 Cursor 的编程体验
- 2025-08-01 【Docker 新手入门指南】第十章:Dockerfile
- 2025-08-01 Linux漏洞检测与修复工具示例
- 2025-08-01 Dify存储告急别焦虑!6步迁移教程,系统无缝切换,流畅度暴涨!
- 2025-08-01 技术栈:全网疯传的Claude code,保姆级使用教程来啦!
- 2025-08-01 如何使用 Prometheus 监控 Linux 服务器性能
- 2025-08-01 LLVM IR入门:编写自定义优化Pass的完整教程与性能影响分析
- 08-01Linux Systemd入门
- 08-01使用 Checkmk 监控 Oracle 服务器
- 08-01核心库CPU飙到99%了!我发现很多DBA都不会看日志……
- 08-01China's CETC Kingbase Unveils AI-Powered Database Appliances Amid Rising Demand for Intelligent Data Infrastructure
- 08-01Docker安装部署Oracle/Sql Server
- 08-01Oracle数据库安装 | 步骤详细
- 08-01基于Springboot + vue实现的社团管理系统
- 08-01前端开发如何用Mock.js进行数据接口模拟
- 1520℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
-
- Linux Systemd入门
- 使用 Checkmk 监控 Oracle 服务器
- 核心库CPU飙到99%了!我发现很多DBA都不会看日志……
- China's CETC Kingbase Unveils AI-Powered Database Appliances Amid Rising Demand for Intelligent Data Infrastructure
- Docker安装部署Oracle/Sql Server
- Oracle数据库安装 | 步骤详细
- 基于Springboot + vue实现的社团管理系统
- 前端开发如何用Mock.js进行数据接口模拟
- 使用vite为vue项目配置@别名
- 基于Springboot + vue3实现的教务管理系统
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- js~~ (67)
- node_modules怎么生成 (87)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)