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.hqwc.cn/news/512751.html

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

相关文章

可持久化数据结构

可持久化数据结构必须满足在操作过程中数据结构本身的拓扑结构不变,可以用来存下数据结构的所有历史版本。 核心思想:只记录每一个版本与前一个版本不一样的地方。 这里我们讨论两种数据结构的可持久化——trie和线段树。 Trie的可持久化 由于之前没…

02. Nginx入门-Nginx安装

Nginx安装 yum安装 编辑yum环境 cat > /etc/yum.repos.d/nginx.repo << EOF [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.key module_…

PTA L2-009 抢红包

题目&#xff1a; 没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录&#xff0c;请你统计一下他们抢红包的收获。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤104&#xff09;&#xff0c;即参与发红包和抢红包的总人数&#xff0c;则…

L2-001 紧急救援(Java)

作为一个城市的应急救援队伍的负责人&#xff0c;你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候&#xff0c;你的任务是带领你的…

干货!带你快速了解Python元组

1.元组 元组一般用来存储多个数据&#xff0c;使用() 2.创建元组 创建空元组 tup1 () print(tup1) # () print(type(tup1)) # <class tuple> 创建非空元组&#xff08;元组中只有一个元素&#xff0c;一般要在元素的后面加 , 若不加 , 该数据类型不一定是元组…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 3 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…

AI时代的数据分析软件DeepBI与传统BI数据分析的差距

#BI智能数据分析工具# 目前AI在各行业的渗透正在改变我们的工作方式和生活方式&#xff0c;尤其是在智能数据分析领域。今天我们就来看一下新时代数据分析的产品DeepBI与传统BI之间的差距有多大。 BI在过去的二十年被错误定义数据可视化&#xff0c;根本原因在于&#xff0c;…

低代码工具APEX的入门使用(未包含安装)

第一次使用APEX是2019年&#xff0c;这个技术成名已久只是我了解的比较晚。请看Oracle ACE的网站&#xff0c;这就是用APEX做的。实际上有一次我看O记的人操作他们的办公流程&#xff0c;都是用APEX做的。 那一年&#xff0c;我用APEX做了一个CMDB的管理系统。那时候还没有流行…

网络工程师笔记7

路由器需要知道下一跳和出接口才能把数据转发出去 各个协议的优先级 直连&#xff1a;0 OSPF&#xff1a;10 ISIS&#xff1a;15 静态&#xff1a;60 RIP :100 静态路由 ip route-static <目的ip地址> 掩码 下一跳地址 例…

关于大数据技术的学习

关于大数据技术的学习 《Java编程》、《python程序开发》&#xff0c;《Linux操作系统》、《Hadoop大数据平台构建与应用》、《网络爬虫技术与应用》、《大数据平台运维》、《Docker容器技术与应用》、《数据库技术》、《数据挖掘》、《可视化设计与开发》、《大数据分析实战》…

鸿蒙开发,对于前端开发来说,究竟是福是祸呢?

提前声明&#xff1a; 先说好哈&#xff0c;不要一上来就开喷&#xff0c;好吧&#xff0c;不感兴趣的话你可以不用看下文直接划走&#xff0c;直接喷俺有点承受不住&#xff0c;心脏不好。如果你感兴趣&#xff0c;你可以先把这篇文章看完&#xff0c;看完后感觉俺讲的还挺有道…

华容道问题求解第一部分_详细设计(二)之棋子和游戏类_棋盘和棋子渲染

&#xff08;续上篇&#xff09; HrdGame 类中的图像输出部分的函数&#xff0c;包括两部分&#xff0c;布局定义和绘制。 布局定义 广义上讲&#xff0c;布局只是棋子众多排列组合中一个快照&#xff0c;或者说是一个状态&#xff0c;因此引入了一个GameState 类&#xff0c…