TinyEMU编译与使用(一)

TinyEMU编译与使用(一)

  • 1 介绍
  • 2 准备工作
  • 3 编译TinyEMU
    • 3.1 安装依赖库
    • 3.2 编译
  • 4 运行TinyEMU
    • 4.1 在线运行
    • 4.2 离线运行
  • 5 共享目录
    • 5.1 修改root_9p-riscv64.cfg
    • 5.2 启动TinyEMU
    • 5.3 执行挂载命令
  • 6 TinyEMU命令帮助

1 介绍

原名为riscvemu,于2018-09-23,改为TinyEMU。

TinyEMU是Fabrice Bellard写的一个RISC-V和X86模拟器,它的目的是小而简单,同时又完整。Fabrice Bellard正是开发鼎鼎大名QEMU的作者。
官网:https://bellard.org/tinyemu/

主要特点:

  • 支持RV128IMAFDQC基本ISA(用户级ISA版本2.2,特权架构版本1.10)的RISC-V系统仿真器包括:
  • 32/64/128位整数寄存器
  • 32/64/128位浮点指令(使用SoftFP库)
  • 压缩指令
  • 动态XLEN变化
  • 基于KVM的x86系统仿真器
  • 虚拟控制台、网络、块设备、输入和9P文件系统
  • 带SDL的图形显示
  • JSON配置文件
  • 远程HTTP块设备和文件系统
  • 代码小,易于修改,外部依赖性少
  • Javascript版本运行Linux和Windows 2000。

2 准备工作

通过官网,下载以下内容。

  • TinyEMU源码:tinyemu-2019-12-21.tar.gz
  • RISC-V boot loader、Linux kernel、filesystem:diskimage-linux-riscv-2018-09-23.tar.gz

3 编译TinyEMU

本文环境为Ubuntu 20.04。

3.1 安装依赖库

需要安装 libcurl、OpenSSL 和 SDL 库,TinyEMU源码对这些库函数有依赖。

以下为,其他情况,可忽略。

  • 如果环境中实在缺少这些库,也可以通过注释掉Makefile中的CONFIG_FS_NET或CONFIG_SDL,来编译TinyEMU。
  • 如果在32位主机上编译,可以通过编辑Makefile,以禁止编译为128位目标(对于生成128位RISCV目标,编译器必须支持__int128 C扩展)。

3.2 编译

进入源码目录tinyemu-2019-12-21中,编译TinyEMU源码:

make

编译成功,可执行程序为temu。
也可以选择,通过以下命令,将temu程序,安装到 /usr/local/bin 系统路径下:

make install

编译时,若报错:“fatal error: curl/multi.h: No such file or directory”
原因:缺少libcurl库
解决办法:sudo apt-get install libcurl4-openssl-dev,安装libcurl。

4 运行TinyEMU

根据RISC-V boot loader、Linux kernel、filesystem文件获取方式的不同,TinyEMU可以有2种运行方式:

  • 在线运行(无需下载);
  • 离线运行。

4.1 在线运行

在官网https://bellard.org/jslinux/index.html,有如下OS镜像:
在这里插入图片描述
图中标识,表示在riscv64 CPU运行的,不带图形界面的Linux Kernel系统,这样环境的TinyEMU配置文件,在“TEMU Config”列的“url”链接处。打开后,如下所示:
在这里插入图片描述
buildroot-riscv64.cfg文件中,记录了RISC-V boot loader、Linux kernel、filesystem这些文件的名称及路径配置。
因此,我们可通过如下命令,在线加载相关文件:

./temu https://bellard.org/jslinux/buildroot-riscv64.cfg

需要等待几分钟,加载快慢,取决于网络环境。
linux内核加载,并启动完成,如下所示:
在这里插入图片描述
打印Welcome信息,当前目录下有hello.c,我们使用gcc hello.c -o hello编译,可能也需要等一会。
在这里插入图片描述
编译与执行成功,说明linux内核,已经在TinyEMU上成功跑起来了。
上述列表中,其他OS也可以通过这样的方式,运行起来,这里不再赘述。

4.2 离线运行

在准备工作中,我们下载的diskimage-linux-riscv-2018-09-23.tar.gz文件,这里才发挥作用。

解压后,如下内容:
在这里插入图片描述
该目录下,有RISC-V boot loader、Linux kernel、filesystem等文件,这次,我们使用root-riscv64.cfg配置文件。

将可执行程序temu,拷贝至diskimage-linux-riscv-2018-09-23目录下,然后执行:

./temu -ctrlc root-riscv64.cfg

-ctrlc,参数表示可以使用Ctrl+C快捷键,退出模拟器;未加此选项的话,Ctrl+C无效。

非常快,秒进OS,如下所示:
在这里插入图片描述
随便执行几条命令,如下所示:
在这里插入图片描述
说明linux内核,已经在TinyEMU上成功运行。

5 共享目录

TinyEMU中运行的linux虚拟机,如何与TinyEMU所在的主机,进行文件共享和传输呢?

TinyEMU也是支持的,主要有以下三个步骤。

5.1 修改root_9p-riscv64.cfg

官方提供的root_9p-riscv64.cfg,文件内容,如下:

/* VM configuration file */
{version: 1,machine: "riscv64",memory_size: 128,bios: "bbl64.bin",cmdline: "console=hvc0 root=/dev/vda rw",drive0: { file: "root-riscv64.bin" },/* Also access to the /tmp directory. Use mount -t 9p /dev/root /mntto access it. */fs0: { tag: "/dev/root", file: "/tmp" },eth0: { driver: "user" },
}

需在bios行后,添加内容kernel: "kernel-riscv64.bin",

5.2 启动TinyEMU

然后,再启动TinyEMU:

./temu -ctrlc root_9p-riscv64.cfg

如果未按上述要求,修改cfg文件,则启动时,会报如下错误:
在这里插入图片描述

5.3 执行挂载命令

在TinyEMU中执行的linux虚拟机(Guest)上,执行挂载命令:

mount -t 9p /dev/root /mnt

到此,主机(Host)上的 /tmp 目录下内容,在linux虚拟机的 /mnt 中已经可见了。

基于此功能,可在Host和Guest之间,传输文件。

6 TinyEMU命令帮助

TinyEMU命令使用形式,如下所示:

temu [options] config_file

其各项参数含义,如下所示:

  • options可为以下任一或多个选项。
    • -m ram_size:设置内存大小,单位为MB
    • -rw:允许对磁盘镜像(default=snapshot)进行写访问,打开之后,在虚拟机中对文件系统做的修改,可以被保存(比如,保存到root-riscv64.bin中),下次启动后,该修改依然存在。
    • -ctrlc:拦截Ctrl+C按键,以便退出TinyEMU模拟器
    • -append cmdline:将cmdline附加到内核命令行
    • -no-accel:禁用虚拟机加速(仅限KVM、x86机器)
    • -h:打印帮助信息
  • config_file为*.cfg文件名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven【5】在IDEA环境中配置和使用Maven

文章目录 【1】创建父工程1.创建 Project2.开启自动导入 【2】配置 Maven 信息【3】创建 Java 模块工程1.创建2.maven命令操作 【4】创建 Web 模块工程1.创建模块2.Web设定 【1】创建父工程 1.创建 Project 按照idea工程的布局,project相当于父工程,里…

javascript中的强制类型转换和自动类型转换

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属专栏:前端泛海 景天的主页:景天科技苑 文章目录 1.转换函数2.强制类型转换(1)Number类型强转&…

day11_SpringCloud(Nacos注册中心,LoadBalancer,OpenFeign)

文章目录 Spring Cloud Alibaba1 系统架构演进1.1 单体架构1.2 微服务架构1.3 分布式和集群 2 Spring Cloud Alibaba概述2.1 Spring Cloud简介2.2 Spring Cloud Alibaba简介 3 微服务环境准备3.1 工程结构说明3.2 父工程搭建3.3 用户微服务搭建3.3.1 基础环境搭建3.3.2 基础代码…

安装或卸载VMware时,显示无法打开注册表项,以及开启虚拟机电脑蓝屏重启的解决方法

我之前安装过一次VMware,之后就随手把他删除了,但没有删除干净,最近我再次安装VMware的时候,出现了一系列问题,我决定分享一下我的解决方案。 一:安装或卸载VMware时,显示无法打开注册表项 解决…

围坝胶的粘度一般是多少

围坝胶的一般粘度是多少?围坝胶,作为一种广泛应用于汽车、电子等领域的粘合剂,其粘度是评估其性能的重要指标之一。了解围坝胶的粘度有助于我们更好地选择和使用这种粘合剂。 首先,我们要明白什么是粘度。粘度是流体流动时抵抗剪切力的能力&…

09. C语言内嵌汇编代码

C语言函数内可以自定义一段汇编代码,在GCC编译器中使用 asm 或 __asm__ 关键词定义一段汇编代码,并可选添加volatile关键字,表示不要让编译器优化这段汇编代码。 内嵌汇编代码格式如下: __asm__ ("汇编代码":输出描述…

Git 入门

Git 入门 版本控制 什么是版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 除了项目源代码,你可以对任何类型的文件进行版本控制。 为什么要版本控制 有了它你就可以将某个文件回溯到之前的状态&#xff…

WordPress建站入门教程:忘记后台管理员密码了怎么办?

前面跟大家分享的『WordPress建站入门教程:如何在本地电脑搭建WordPress网站?』一文介绍了搭建WordPress网站,但是有些站长跟boke112百科一样,没有记录后台管理密码,这种情况应该怎么办呢?有以下2种方法解决…

我国离子注入设备市场规模不断增加 本土企业仍有较大发展空间

我国离子注入设备市场规模不断增加 本土企业仍有较大发展空间 离子注入是半导体器件和集成电路生产的关键工艺之一,其提供的高精度和高均匀性可以大幅度提高集成电路的成品率。离子注入设备是芯片制造的核心工艺装备。 从全球市场来看,随着科学技术不断进…

javascript基础入门

1.第一个javascript程序 javascript程序不能够独立的运行,必须依赖于HTML文件,type属性值用来说明脚本的类型,这里 是指使用javascript编写的文本文件; 2.alert警告框 alert()函数显示一条指定的信息&am…

正大国际:什么是美联储?对于实业与期货市场到底是什么关系?

第一美联储是谁? 美国联邦储备系统,简称美联储(fed),负责履行美国中央银行的职权。与世界上大部分央行不同,美联储并不完全属于美国政府,从某个角度来说,美联储是一家私有央行。 一家私人银行凌驾于国家之…

创建Net8WebApi自动创建OpenApi集成swagger

问题:用Net8创建WebAPI时勾选启动OpenAPI,项目自动集成了Swagger,但是接口注释没有展示? 解决: 1.需要生成Api项目的XML文件。操作如下: 2.生成XML文件后,还需要在启动类Program.cs里面配置Sw…

架构(十六)本地方法缓存

一、引言 作者需要在底层公共包里面加一个方法反射的工具类,看起来很简单的事,问题也不少,这里讲讲过程。在结合同事的思维误区聊聊本地加锁块的问题。 二、方案选型 其实一开始有两种方案,一种是传入Function和入参,…

selenium_001基本学习

第 1 章webdriver 环境搭建好了,我们正式学习 selenium 的 webdriver 框架,它不像 QTP 之类的有 GUI 界面的可视化工具,是webdriver 框架的 API。 2.1.1 打开网页 注解:我们用谷歌浏览器 # from selenium import webdriver …

ue4.27 发现 getRandomReachedLocation 返回 false

把这个玩意儿删掉,重启工程,即可 如果还不行 保证运动物体在 volum 内部,也就是绿色范围内确保 project setting 里面的 navigation system 中 auto create navigation data 是打开的(看到过博客说关掉,不知道为啥) 如果还不行&…

小兴教你做平衡小车-stm32程序开发(PWM)

1 程序分享 main.c文件。 #include "stm32f10x.h" #include "led.h" #include "delay.h" #include "usart.h" #include "key.h" #include "tim.h" #include "pwm.h" #include "stdio.h"int…

专业的安全数据交换系统,如何进行网间数据安全交换?

网络隔离是企业网络安全管理的重要组成部分,它有助于提高网络的整体安全性,保护企业资产和客户数据,同时满足法规合规要求。很多企业为了防止内部核心数据泄露,都实施了网络隔离,比如划分成内网、外网,有的…

关于爬虫发展历史,价值,问题和应对恶意爬虫的策略

作为一个互联网的技术开发,爬虫不管是自己写的还是所负责的网站被爬,都是挺常见的。 但是一个很常见的东西,却一直没有系统梳理过,今天我们从发展历史,价值,问题和应对恶意爬虫的策略来聊一聊爬虫。 1 爬…

三八妇女节放假么 妇女节放假安排备忘录提醒别忘记

每年的节日像是生活中的小驿站,给我们带来了休息和欢乐。而当三八妇女节临近时,你是否也在期待着那半天的假期呢? 想象一下,公司的走廊里,同事们都在窃窃私语:“三八妇女节会放假吗?”这个问题…

Javaweb之SpringBootWeb案例之自动配置案例的自定义starter实现的详细解析

3.2.4.2 自定义starter实现 自定义starter的步骤我们刚才已经分析了,接下来我们就按照分析的步骤来完成自定义starter的开发。 首先我们先来创建两个Maven模块: 1). aliyun-oss-spring-boot-starter模块 创建完starter模块后,删除多余的文件…