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

server/2024/12/22 15:28:27/

在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.ppmy.cn/server/152253.html

相关文章

Solon 集成 activemq-client

原始状态的 activemq-client sdk 集成非常方便&#xff0c;也更适合定制。就是有些同学&#xff0c;可能对原始接口会比较陌生&#xff0c;会希望有个具体的示例。 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client&l…

【redis的使用、账号流程、游戏服Handler的反射调用】1.自增id 2.全局用户名这样子名字唯一 3.

一、web服 1)账号注册 // 用于唯一命名服务 com.xinyue.game.center.business.account.logic.AccountRegisterService#accountRegister public void accountRegister(AccountEntity account) {accountManager.checkUsername(account.getUsername());accountManager.checkPass…

写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践

自OceanBase 4.3.3版本推出以来&#xff0c;向量检索的能力受到了很多客户的关注&#xff0c;也纷纷表达希望OB能拓展更多 多模数据库大模型 的AI应用实践。 在上篇文章 &#x1f449; OceanBase LLM&#xff0c;免费构建你的专属 AI 助手 &#xff0c;我们介绍了如何去搭建一…

React+Vite项目框架

基于React Vite 搭建的项目框架&#xff0c;使用ESLint 用于代码检查 、Prettier 用于代码格式化、Husky 用于 Git 钩子、lint-staged 用于暂存文件的检查、commitlint 用于提交信息规范等&#xff0c;实现了路由配置、状态管理、样式响应式设计、亮/暗主题切换等功能。 做这…

python学opencv|读取图像(十五)BGR图像和HSV图像通道合并

【1】引言 前序学习进程中&#xff0c;已经掌握了BGR图像和HSV图像通道拆分的基本技巧&#xff0c;即使用split()函数抓取各个通道的具体数值。具体文章链接为&#xff1a; python学opencv|读取图像&#xff08;十四&#xff09;BGR图像和HSV图像通道拆分-CSDN博客 在此基础…

ECharts柱状图-柱图38,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

YOLOv9-0.1部分代码阅读笔记-downloads.py

downloads.py utils\downloads.py 目录 downloads.py 1.所需的库和模块 2.def is_url(url, checkTrue): 3.def gsutil_getsize(url): 4.def url_getsize(urlhttps://ultralytics.com/images/bus.jpg): 5.def safe_download(file, url, url2None, min_bytes1E0, erro…

36.5 自定义指标接入prometheus-operator

prometheus-operator优势总结 自定义的采集配置接入更方便&#xff0c;只要定义serviceMonitor即可采集的参数修改也很方便&#xff0c;对比之前只能由prometheus管理员修改job段配置告警配置也是 prometheus-operator劣势总结 数据的长期存储没有解决高可用性和扩展性没解决…