在Ubuntu下运行QEMU仿真FreeBSD riscv64系统

在Ubuntu下运行QEMU仿真FreeBSD riscv64系统

突发奇想,尝试在Ubuntu下运行QEMU仿真FreeBSD riscv64系统,

参考这篇文档:手把手教你在QEMU上运行RISC-V Linux_qemu 运行 .bin-CSDN博客

并参考FreeBSD的Wiki:riscv - FreeBSD Wiki 

以前做过尝试,是在FreeBSD里仿真FreeBSD riscv64系统 以及Ubuntu里QEMU仿真Riscv64 linux系统,这回是在Ubuntu下运行QEMU仿真FreeBSD riscv64系统。本次实践是在Ubuntu24.04下进行QEMU仿真FreeBSD riscv64系统,发现当前新的QEMU使用起来更加简单方便,基本只需要包安装,不需要编译安装(这样实践耗时大大减少)

以前的实践:QEMU安装和使用@Ubuntu(待续)_qumu安装与使用-CSDN博客

FreeBSD下qemu启动FreeBSD riscv64 zfs 映像

使用buildboot创建文件系统(非必须)

看参考文档里,讲的使用buildboot,比较复杂,主要是make menuconfig 耗时非常长,没有等待编译成功。所以后期放弃这个方法了。

使用buildboot

下载:https://buildroot.org/downloads/buildroot-2024.11.tar.xz

wget https://buildroot.org/downloads/buildroot-2024.11.tar.xz

 解压

unxz buildroot-2024.11.tar.xz

解包

tar -xvf buildroot-2024.11.tar.xz

进入目录,执行make menuconfig:

cd buildroot-2022.02.6
make menuconfig

进入菜单,设置为riscv ,选64位,选ext3

然后编译

make -j 8 

Saving to: ‘/home/skywalk/download/buildroot-2024.11/output/build/.util-linux-2.40.2.tar.xz.s98aRn/output’
编译事件较长,没有等到编译完成,所以最终放弃了该方法。

实践,在Windows10 Ubuntu24.04下QEMU仿真FreeBSD riscv64系统

准备好FreeBSD riscv64系统虚拟镜像

从中科大下载FreeBSD riscv64系统虚拟镜像

wget https://mirrors.ustc.edu.cn/freebsd/releases/VM-IMAGES/14.2-RELEASE/riscv64/Latest/FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw.xz

但是中科大的站可能不允许直接wget,所以要通过lynx从网页端过去,先安装lynx

sudo apt install lynx

用lynx打开中科大镜像站:

lynx https://mirrors.ustc.edu.cn

点击里面的FreeBSD镜像,也就是进入这个页面:

lynx https://mirrors.ustc.edu.cn/freebsd/releases/VM-IMAGES/14.2-RELEASE/riscv64/Latest/

下载这个文件:FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw.xz

解压:

unxz FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw.xz

扩充文件到40G

truncate -s 20G FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw

拿到FreeBSD的boot kernel 

发现在Ubuntu下拿这个文件比较难,建议直接找一台机器到FreeBSD下去拿。

准备一台FreeBSD系统

可以用实体机安装FreeBSD

也可以用Vmware或者VirtualBox等创建FreeBSD的虚拟机,然后安装FreeBSD系统。

也可以用QEMU创建FreeBSD的仿真,然后用启动光盘安装或运行FreeBSD系统。

安装u-boot-qemu-riscv64 

在FreeBSD系统下,使用pkg install来安装u-boot-qemu-riscv64:

sudo pkg install opensbi u-boot-qemu-riscv64 qemu

 从FreeBSD系统拿到u-boot文件

我们需要u-boot.bin这个文件,位置FreeBSD系统的/usr/local/share/u-boot/u-boot-qemu-riscv64/u-boot.bin

可以使用scp从FreeBSD系统scp到Ubuntu,比如FreeBSD系统的ip是192.168.1.5,scp到当前目录:

scp 192.168.1.5://usr/local/share/u-boot/u-boot-qemu-riscv64/u-boot.bin .

启动QEMU仿真

将u-boot.bin 和 FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw 文件都放在当前目录,然后启动QEMU仿真:

qemu-system-riscv64 -machine virt -m 2048M -smp 2 -nographic \-kernel u-boot.bin \-drive file=FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \-netdev user,id=net0,ipv6=off,hostfwd=tcp::8022-:22 -device virtio-net-device,netdev=net0

 启动成功,用uname看看:

root@freebsd:~ # uname -a
FreeBSD freebsd 14.2-RELEASE FreeBSD 14.2-RELEASE releng/14.2-n269506-c8918d6c7412 GENERIC riscv

好了,现在实践完成。

网络好像还没有通,大约是需要打开nat转发,这个以后再调试:

ifconfig
vtnet0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500options=80028<VLAN_MTU,JUMBO_MTU,LINKSTATE>ether 52:54:00:12:34:56inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255inet6 fe80::5054:ff:fe12:3456%vtnet0 prefixlen 64 scopeid 0x1media: Ethernet autoselect (10Gbase-T <full-duplex>)status: activend6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>inet 127.0.0.1 netmask 0xff000000inet6 ::1 prefixlen 128inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2groups: lond6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

后来才知道,当时网络已经通了,只是ping不通罢了。

但是没有pkg,所以需要手工下载ports.txz ,然后到/usr/ports/ports-mgmt/pkg 目录下编译make install安装才行。参考:如果一台Riscv FreeBSD系统没有pkg怎么办?_freebsd 没有pkg-CSDN博客 

调试

qemu-system-riscv64启动后卡住

Domain0 Name              : root
Domain0 Boot HART         : 3
Domain0 HARTs             : 0*,1*,2*,3*
Domain0 Region00          : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: ()
Domain0 Region01          : 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: ()
Domain0 Region02          : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()
Domain0 Region03          : 0x0000000000000000-0xffffffffffffffff M: (R,W,X) S/U: (R,W,X)
Domain0 Next Address      : 0x0000000000000000
Domain0 Next Arg1         : 0x00000000bfe00000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes
Domain0 SysSuspend        : yes

Boot HART ID              : 3
Boot HART Domain          : root
Boot HART Priv Version    : v1.12
Boot HART Base ISA        : rv64imafdch
Boot HART ISA Extensions  : time,sstc
Boot HART PMP Count       : 16
Boot HART PMP Granularity : 4
Boot HART PMP Address Bits: 54
Boot HART MHPM Count      : 16
Boot HART MIDELEG         : 0x0000000000001666
Boot HART MEDELEG         : 0x0000000000f0b509

看了下感觉是没有写kernel的缘故,最终是到FreeBSD下安装了uboot,拿到了这个文件:usr/local/share/u-boot/u-boot-qemu-riscv64/u-boot.bin

并在命令里加入:    -kernel u-boot.bin 这个参数,问题解决。

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

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

相关文章

大模型微调---Prompt-tuning微调

目录 一、前言二、Prompt-tuning实战2.1、下载模型到本地2.2、加载模型与数据集2.3、处理数据2.4、Prompt-tuning微调2.5、训练参数配置2.6、开始训练 三、模型评估四、完整训练代码 一、前言 Prompt-tuning通过修改输入文本的提示&#xff08;Prompt&#xff09;来引导模型生…

Visual Studio 、 MSBuild 、 Roslyn 、 .NET Runtime、SDK Tools之间的关系

1. Visual Studio Visual Studio 是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供代码编写、调试、测试和发布等功能。它内置了 MSBuild、Roslyn 和 SDK Tools&#xff0c;并提供图形化界面来方便开发者进行项目管理和构建。与其他组件的关系&#xf…

Winnows基础(2)

Target 了解常见端口及服务&#xff0c;熟练cmd命令&#xff0c;编写简单的 .bat 病毒程序。 Trail 常见服务及端口 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主机管理系统登陆&#xff08;国外用的…

Edge Scdn用起来怎么样?

Edge Scdn&#xff1a;提升网站安全与性能的最佳选择 在当今互联网高速发展的时代&#xff0c;各种网络攻击层出不穷&#xff0c;特别是针对网站的DDoS攻击威胁&#xff0c;几乎每个行业都可能成为目标。为了确保网站的安全性与稳定性&#xff0c;越来越多的企业开始关注Edge …

通信技术以及5G和AI保障电网安全与网络安全

摘 要&#xff1a;电网安全是电力的基础&#xff0c;随着智能电网的快速发展&#xff0c;越来越多的ICT信息通信技术被应用到电力网络。本文分析了历史上一些重大电网安全与网络安全事故&#xff0c;介绍了电网安全与网络安全、通信技术与电网安全的关系以及相应的电网安全标准…

梯度(Gradient)和 雅各比矩阵(Jacobian Matrix)的区别和联系:中英双语

雅各比矩阵与梯度&#xff1a;区别与联系 在数学与机器学习中&#xff0c;梯度&#xff08;Gradient&#xff09; 和 雅各比矩阵&#xff08;Jacobian Matrix&#xff09; 是两个核心概念。虽然它们都描述了函数的变化率&#xff0c;但应用场景和具体形式有所不同。本文将通过…

时间序列预测论文阅读和相关代码库

时间序列预测论文阅读和相关代码库列表 MLP-based的时间序列预测资料DLinearUnetTSFPDMLPLightTS 代码库以及论文库&#xff1a;Time-Series-LibraryUnetTSFLightTS MLP-based的时间序列预测资料 我会定期把我的所有时间序列预测论文有关的资料链接全部同步到这个文章中&#…

引言和相关工作的区别

引言和相关工作的区别 引言 目的与重点 引言主要是为了引出研究的主题,向读者介绍为什么这个研究问题是重要且值得关注的。它通常从更广泛的背景出发,阐述研究领域的现状、面临的问题或挑战,然后逐渐聚焦到论文要解决的具体问题上。例如,在这篇关于联邦学习数据交易方案的…

GitLab分支管理策略和最佳实践

分支管理是 Git 和 GitLab 中非常重要的部分&#xff0c;合理的分支管理可以帮助团队更高效地协作和开发。以下是一些细化的分支管理策略和最佳实践&#xff1a; 1. 分支命名规范 • 主分支&#xff1a;通常命名为 main 或 master&#xff0c;用于存放稳定版本的代码。 • …

批量提取zotero的论文构建知识库做问答的大模型(可选)——含转存PDF-分割统计PDF等

文章目录 提取zotero的PDF上传到AI平台保留文件名代码分成20个PDF视频讲解 提取zotero的PDF 右键查看目录 发现目录为 C:\Users\89735\Zotero\storage 写代码: 扫描路径‘C:\Users\89735\Zotero\storage’下面的所有PDF文件,全部复制一份汇总到"C:\Users\89735\Downl…

LabVIEW实现NB-IoT通信

目录 1、NB-IoT通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网…

面试题整理9----谈谈对k8s的理解2

面试题整理9----谈谈对k8s的理解2 1. Service 资源1.1 ServiceClusterIPNodePortLoadBalancerIngressExternalName 1.2 Endpoints1.3 Ingress1.4 EndpointSlice1.5 IngressClass 2. 配置和存储资源2.1 ConfigMap2.2 Secret2.3 PersistentVolume2.4 PersistentVolumeClaim2.5 St…

精准采集整车信号:风丘混合动力汽车工况测试

一 背景 混合动力汽车是介于纯电动汽车与燃油汽车两者之间的一种新能源汽车。它既包含纯电动汽车无污染、启动快的优势&#xff0c;又拥有燃油车续航便捷、不受电池容量限制的特点。在当前环境下&#xff0c;混合动力汽车比纯电动汽车更符合目前的市场需求。 然而&#xff0c…

带标题和不带标题的内部表

什么是工作区&#xff1f; 什么是工作区&#xff1f;简单来说&#xff0c;工作区是单行数据。它们应具有与任何内部表相同的格式。它用于一次处理一行内部表中的数据。 内表和工作区的区别 &#xff1f; 一图胜千言 内表的类型 有两种类型的内表&#xff1a; 带 Header 行…

【图像分类实用脚本】数据可视化以及高数量类别截断

图像分类时&#xff0c;如果某个类别或者某些类别的数量远大于其他类别的话&#xff0c;模型在计算的时候&#xff0c;更倾向于拟合数量更多的类别&#xff1b;因此&#xff0c;观察类别数量以及对数据量多的类别进行截断是很有必要的。 1.准备数据 数据的格式为图像分类数据集…

【Leetcode 每日一题】2545. 根据第 K 场考试的分数排序

问题背景 班里有 m m m 位学生&#xff0c;共计划组织 n n n 场考试。给你一个下标从 0 0 0 开始、大小为 m n m \times n mn 的整数矩阵 s c o r e score score&#xff0c;其中每一行对应一位学生&#xff0c;而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…

React系列(八)——React进阶知识点拓展

前言 在之前的学习中&#xff0c;我们已经知道了React组件的定义和使用&#xff0c;路由配置&#xff0c;组件通信等其他方法的React知识点&#xff0c;那么本篇文章将针对React的一些进阶知识点以及React16.8之后的一些新特性进行讲解。希望对各位有所帮助。 一、setState &am…

PCIe_Host驱动分析_地址映射

往期内容 本文章相关专栏往期内容&#xff0c;PCI/PCIe子系统专栏&#xff1a; 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入 深入解析非桥PCI设备的访问和配置方法 PCI桥设备的访问方法、软件角度讲解PCIe设备的硬件结构 深入解析PCIe设备事务层与配置过程 PCIe的三…

【阅读记录-章节6】Build a Large Language Model (From Scratch)

文章目录 6. Fine-tuning for classification6.1 Different categories of fine-tuning6.2 Preparing the dataset第一步&#xff1a;下载并解压数据集第二步&#xff1a;检查类别标签分布第三步&#xff1a;创建平衡数据集第四步&#xff1a;数据集拆分 6.3 Creating data loa…

ip_output函数

ip_output函数是Linux内核(特别是网络子系统)中用于发送IPv4数据包的核心函数。以下是一个示例实现,并附上详细的中文讲解: int ip_output(struct net *net, struct sock *sk, struct sk_buff *skb) {struct iphdr *iph; /* 构建IP头部 */iph = ip_hdr(skb);/* 设置服务…