QEMU模拟器源码编译与使用

news2024/9/20 20:49:46

QEMU模拟器源码编译与使用

  • 1 编译MySBI+BenOS
  • 2 编译QEMU
  • 3 QEMU运行MySBI+BenOS
  • 4 使用gdb调试QEMU
  • 5 通过QEMU调试指令
  • 6 小结

本文属于 《RISC-V指令集差分测试(DiffTest)系列教程》之一,欢迎查看其它文章。

1 编译MySBI+BenOS

参考《NEMU模拟器源码编译与使用》中,第2节内容。

生成了,如下文件:

  • benos.bin,BenOS可执行文件
  • benos.elf,BenOS带调试信息的ELF文件
  • mysbi.bin,MySBI固件的可执行文件
  • mysbi.elf,MySBI带调试信息的ELF文件
  • benos_payload.bin,把benos.bin和mysbi.bin整合到一个可执行二进制文件中。

需要在QEMU中运行的文件有:mysbi.bin、benos.bin、benos.elf。

2 编译QEMU

参考《在QEMU上运行OpenSBI+Linux+Rootfs》中,第1节内容。

3 QEMU运行MySBI+BenOS

将mysbi.bin、benos.bin、benos.elf,拷贝到qemu-7.1.0/build/目录下。
在QEMU中,运行MySBI+BenOS

./qemu-system-riscv64 -nographic -machine virt -m 128M -bios mysbi.bin -device loader,file=benos.bin,addr=0x80200000 -kernel benos.elf

运行效果,如下所示:
在这里插入图片描述

我们的BenOS,通过串口打印出了信息:Welcome RISC-V!

BenOS代码kernel.c,实现代码,如下所示:

#include "uart.h"

void kernel_main(void)
{
	uart_init();
	uart_send_string("Welcome RISC-V!\r\n");

	while (1) {
		;
	}
}

后续打印信息,QEMU是以打印Kernel panic结束,如下:

Oops - Load page fault
Call Trace:
[<0x00000000802039e0>] trigger_load_access_fault+0x8/0x10
sepc: 00000000802039e0 ra : 0000000080202584 sp : 000000008020aff0
 gp : 0000000000000000 tp : 0000000000000000 t0 : 0000000000000005
 t1 : 0000000000000005 t2 : 0000000080200020 t3 : 000000008020b000
 s1 : 0000000080200010 a0 : 0000000080000000 a1 : 0000000000000000
 a2 : 0000000000000000 a3 : 0000000080210008 a4 : 0000000081000000
 a5 : 0000000081000000 a6 : 0000000000000000 a7 : 0000000000000001
 s2 : 0000000000000000 s3 : 0000000000000000 s4 : 0000000000000000
 s5 : 0000000000000000 s6 : 0000000000000000 s7 : 0000000000000000
 s8 : 0000000080200040 s9 : 0000000000000000 s10: 0000000000000000
 s11: 0000000000000000 t3 : 00510133000012b7 t4: 0000000000000000
 t5 : 0000000000000000 t6 : 0000000000000000
sstatus:0x0000000200000120  sbadaddr:0x0000000080000000  scause:0x000000000000000d
Kernel panic

此时,无法退出QEMU。可以通过以下命令,来退出QEMU:

kill $(ps aux | grep qemu | grep -v grep | awk '{print $2}')

4 使用gdb调试QEMU

上述步骤,编译的QEMU,直接就可以gdb调试,只是有一些还是有所优化,如果要完全无优化,可能还需要自己配置再重新编译。

直接在上述命令前,加gdb --args

gdb --args ./qemu-system-riscv64 -nographic -machine virt -m 128M -bios mysbi.bin -device loader,file=benos.bin,addr=0x80200000 -kernel benos.elf

启动调试,如下所示:
在这里插入图片描述
在/target/riscv/translate.c:1052行,打断点:b translate.c:1052,然后
r运行,即可在该断点处停住。

gdb调试QEMU代码成功。

5 通过QEMU调试指令

我们使用QEMU内置的RISCV调试器,来调试MySBI固件代码mysbi.elf。

我们在,上述QEMU启动命令中,加入-S -s,以启动gdb server:

./qemu-system-riscv64 -S -s -nographic -machine virt -m 128M -bios mysbi.bin -device loader,file=benos.bin,addr=0x80200000 -kernel benos.elf

-s参数也可以用-gdb tcp:1234代替,含义一样;此参数相当于,启动了一个端口1234的TCP服务器。
需要注意,对于-gdb tcp:1234参数,有些QEMU版本可能不支持,跑不起来。

在另外一个终端中,输入如下命令启动gdb:

gdb-multiarch --tui benos.elf

在gdb命令行中,输入以下命令:

target remote localhost:1234		# 连接gdb server
b _start							# 在_start处打断点
c									# 运行

可以看到在src/boot.S文件中,第6行_start处停住了。
QEMU调试MySBI固件代码成功。

6 小结

QEMU通过-S -s启动了gdb server,通讯方式是TCP,端口1234。

那么,如果我们知道与gdb server的数据包协议,是不是就可以编写一个程序,去控制QEMU的单步执行,以及获取CPU寄存器、内存等,是的,这是可行的。

这个设想,正是后续文章中,介绍的NEMU与QEMU通过socket方式,做DiffTest的底层原理。

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

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

相关文章

AI绘画Midijourney操作技巧及变现渠道喂饭式教程!

前言 盘点Midijourney&#xff08;AIGF&#xff09;热门赚米方法&#xff0c;总有一种适合你之AI绘画操作技巧及变现渠道剖析 【表情包制作】 首先我们对表情包制作进行详细的讲解&#xff1a; 当使用 Midjourney&#xff08;AIGF&#xff09; 绘画来制作表情包时&#xff…

【Linux网络】网络基础

本篇博客整理了 Linux 网络编程的前置知识&#xff0c;例如网络的发展、协议和协议栈分层、网络通信原理、网络地址等&#xff0c;为后续进入 Linux 网络编程作铺垫。 目录 一、网络发展 二、网络协议 1&#xff09;协议的作用 2&#xff09;协议栈 3&#xff09;协议分层…

自动驾驶(萝卜快跑)是毁灭出租司机工作机会的灾难?

引言 自动驾驶技术的飞速发展在全球范围内引发了广泛的讨论和担忧&#xff0c;特别是在中国&#xff0c;自动驾驶出租车服务“萝卜快跑”成为了热门话题。本文探讨自动驾驶对出租司机工作机会的影响&#xff0c;以及这种技术变革背后的社会经济因素。 自动驾驶的历史与现状 …

yoloV8导出engine模型

yoloV8导出engine模型 引言&#xff1a; 目的是TensorRT加速YOLO实例分割模型。 本博客记录达成此目的所需的步骤&#xff0c;及步骤中可能遇到的问题。 as follow&#xff1a; 1. 首先导出onnx模型的脚本命令&#xff1a; yolo export modelbest.pt formatonnx opset12 simpl…

全网都在找数学建模美赛模版,免费直接复制,无需关注公众号!!!

文件夹结构如下 美版论文模版预览(截选) tex文件代码如下 \documentclass{mcmthesis} \mcmsetup{CTeX false, % 使用 CTeX 套装时&#xff0c;设置为 truetcn 1111111, problem ABCDEF,sheet true, titleinsheet true, keywordsinsheet true,titlepage false, abstra…

C++ | Leetcode C++题解之第226题翻转二叉树

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root nullptr) {return nullptr;}TreeNode* left invertTree(root->left);TreeNode* right invertTree(root->right);root->left right;root->right …

深度学习5 神经网络

生物神经网络是指人的大脑&#xff0c;这是人工神经网络的技术原型。根据生物神经网络的原理&#xff0c;人们用计算机复现了简化的神经网络。当然&#xff0c;人工神经网络是机器学习的一大分支。 1.基本组成 1.1神 经 元 神经元是神经网络的基本组成。激活函数又称作激励函…

【java报错已解决】“Array Out of Bounds“

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法&#xff1a;2.1 方法一&#xff1a;范围检查2.…

案例效果展示小程序制作承载信息宣传

如工商财税、房地产、装修、鲜花、五金等很多行业&#xff0c;都有商品/服务/案例/效果等展示宣传获客的需求&#xff0c;传统线下门店/传单方式效果比较低&#xff0c;线上渠道则更多更利于商家随时开展。 然而更多的图片和文字介绍分享混乱难以整理且无法全面覆盖&#xff0…

如何利用人工智能大模型分析流量来源,提升数字化营销效果

摘要 流量来源分析是数字化营销中的一个重要环节&#xff0c;它可以帮助产品经理和运营人员了解用户从哪里来&#xff0c;为什么来&#xff0c;以及如何留住他们。流量来源分析可以分为三大类&#xff1a;搜索引擎流量&#xff0c;社交媒体流量&#xff0c;和广告投放流量。每…

代理模式(大话设计模式)C/C++版本

代理模式 C #include <iostream> using namespace std;class Subject // Subject 定义了RealSubject和Proxy的共用接口..这样就在任何使用RealSubject的地方都可以使用Proxy { public:virtual void func(){cout << "Subject" << endl;} };class R…

SQL 将titles_test表名修改为titles_2017

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 将titles_tes…

2024年辽宁省数学建模竞赛B题超详细解题思路+问题一代码分享

B题相关优秀论文问题一数据预处理代码分享链接&#xff1a; https://pan.baidu.com/s/1wpNZYW5v8jf2iM0uB7pDEA 提取码&#xff1a;sxjm B题 钢铁产品质量优化 研究现状 冷轧带钢是钢铁企业的高附加值产品&#xff0c;其产品质量稳定性对于钢铁企业的经 济效益具有非常重要…

SpringBoot整合JAX-RS接口

目录 二、创建RESTful资源 三、注册JAX-RS资源 四、修改配置等信息 五、启动SpringBoot程序、访问服务 六、遇到的问题 七、与feign进行配合使用 1、接口定义 2、接口实现 3、注册资源 4、调用方web服务实现&#xff0c;跟注入普通服务一样 5、启动两个服务&#xff…

很多人误解:谷歌账号就是谷歌邮箱账号吗?Google账号=Gmail?

在服务的过程中&#xff0c;我发现有一些朋友对于什么是Google账号、谷歌账号和gmail地址&#xff0c;谷歌邮箱和辅助邮箱等等的概念和用法搞得不够清爽&#xff0c;使得偶会会出现问题&#xff0c;甚至给谷歌账号带来一些风险。所以这篇文章&#xff0c;GG账号服务为大家解析一…

LeetCode刷题之HOT100之打家劫舍Ⅲ

2024 7/13 七月就要过去一半了&#xff0c;伴随着蝉鸣&#xff0c;酷暑被窗户隔离&#xff0c;我坐在凳子上&#xff0c;有一只蚊子不愿意放过我。 1、题目描述 2、算法分析 前面做过打家劫舍Ⅱ&#xff0c;今天来做打家劫舍Ⅲ&#xff0c;小偷也是越来越聪明了&#xff0c;意…

集训 Day 3 总结 虚树 + dfs tree + 基环树

虚树 虚树&#xff0c;顾名思义是 只关注原树上的某些 关键点&#xff0c;在保留原树祖孙关系的前提下建出的一棵边数、点数大大减少的树 适用于优化某些在整棵树上进行 d p dp dp、 d f s dfs dfs 的问题 通常是题目中出现多次询问&#xff0c;每次给出树上的一些关键点&a…

唯一索引插入引发的死锁问题

MySQL 8.4.0 RR隔离级别 场景复现 分析下面SQL死锁的场景 对于switch表&#xff0c;有主键索引id和唯一索引(uid、type)。 CREATE TABLE switch (id int NOT NULL AUTO_INCREMENT COMMENT Unique identifier for each switch,uid int NOT NULL COMMENT User ID associated wi…

Autoware 定位之基于ARTag的landmark定位(六)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

AI大模型来了,低代码还有机会吗?

AI大模型的突飞猛进&#xff0c;不仅引领了技术的革新浪潮&#xff0c;也为各行各业的发展带来了前所未有的挑战与机遇。近年来&#xff0c;随着人工智能技术的不断进步&#xff0c;关于各行各业将被AI取代的论调此起彼伏&#xff0c;引发了许多从业者的不安。 几年前&#xf…