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

news2024/12/22 2:50:11

在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 1500
        options=80028<VLAN_MTU,JUMBO_MTU,LINKSTATE>
        ether 52:54:00:12:34:56
        inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255
        inet6 fe80::5054:ff:fe12:3456%vtnet0 prefixlen 64 scopeid 0x1
        media: Ethernet autoselect (10Gbase-T <full-duplex>)
        status: active
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        groups: lo
        nd6 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.coloradmin.cn/o/2263545.html

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

相关文章

汽车供应链 “剧变”开始,“智能感知潜在龙头”诞生

智能汽车产业链“剧变”已经开启&#xff0c;智能感知软硬件能力的权重正在不断被放大。 比如满足高阶泊车的第二代AK2超声波传感器、满足人机共驾场景需求的电子外后视镜&#xff08;CMS&#xff09;、iTOF 3D成像视觉感知&#xff08;用于舱内监控&#xff09;等新产品&…

Python+OpenCV系列:AI看图识人、识车、识万物

在人工智能风靡全球的今天&#xff0c;用 Python 和 OpenCV 结合机器学习实现物体识别&#xff0c;不仅是酷炫技能&#xff0c;更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入&#xff0c;识别人、动物、车辆及其他物品&#xff0c;让你的程序瞬间具备 AI …

JVM 详解

一. JVM 内存区域的划分 1. 程序计数器 程序计数器是JVM中一块比较小的空间, 它保存下一条要执行的指令的地址. [注]: 与CPU的程序计数器不同, 这里的下一条指令不是二进制的机器语言, 而是Java字节码. 2. 栈 保存方法中的局部变量, 方法的形参, 方法之间的调用关系. 栈又…

C# opencvsharp 流程化-脚本化-(2)ROI

ROI ROI也是经常需要使用的方法。特别是在图像编辑中。ROI又称感兴趣的区域&#xff0c;但是图像是矩阵是矩形的&#xff0c;感兴趣的是乱八七糟的&#xff0c;所以还有一个Mask需要了解一下的。 public class RoiStep : IImageProcessingStep{public ImageProcessingStepType…

wazuh-modules-sca-scan

sca模块主函数wm_sca_main -> wm_sca_start 检查policy文件中的每一个项目wm_sca_check_policy static int wm_sca_check_policy(const cJSON * const policy, const cJSON * const checks, OSHash *global_check_list) {if(!policy) {return 1;}const cJSON * const id c…

uniapp 自定义图标03

插入工程&#xff0c;修改名称文件内容 编译运行

在Windows本地用网页查看编辑服务器上的 jupyter notebook

​ Motivation: jupyter notebook 可以存中间变量&#xff0c;方便我调整代码&#xff0c;但是怎么用服务器的GPU并在网页上查看编辑呢&#xff1f; 参考 https://zhuanlan.zhihu.com/p/440080687 服务端(Ubuntu)&#xff1a; 激活环境 source activate my_env安装notebook …

【YOLO 项目实战】(11)YOLO8 数据集与模型训练

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与检测 【YOLO 项目实战】&#xff08;10&#xff09;YOLO8 环境配置与推理检测 【YOLO 项目实战】&#xff08;11&#xff09;YOLO8 数据…

Ubuntu22.04上安装esp-idf

一、安装准备# 建议使用Ubuntu 20.04 或 Ubuntu 22.04 操作系统 为了在 Ubuntu 22.04 中使用 esp-idf&#xff0c;需要安装一些依赖包 sudo apt-get install git wget flex bison gperf python3\python3-pip python3-venv cmake ninja-build ccache\libffi-dev libssl-dev dfu…

nginx-虚拟主机配置笔记

目录 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm1001.2014.3001.5501 一、 基于域名 二、 基于IP 三、 基于端口 nginx的安装可以查看nginx安装https://blog.csdn.net/m0_68472908/article/details/144609023?spm100…

AlipayHK支付宝HK接入-商户收款(PHP)

一打开支付宝国际版 二、点开商户服务 三、下载源码

Soul Android端稳定性背后的那些事

前言&#xff1a;移动应用的稳定性对于用户体验和产品商业价值都有着至关重要的作用。应用崩溃会导致关键业务中断、用户留存率下降、品牌口碑变差、生命周期价值下降等影响&#xff0c;甚至会导致用户流失。因此&#xff0c;稳定性是APP质量构建体系中最基本和最关键的一环。当…

深度学习模型 DeepSeek-VL2 及其消费级显卡需求分析

DeepSeek-VL2 是由 DeepSeek 团队开发的一款先进的视觉语言模型&#xff0c;采用了混合专家&#xff08;MoE&#xff09;架构&#xff0c;旨在提升多模态理解能力。该模型包括三个版本&#xff1a;DeepSeek-VL2-Tiny、DeepSeek-VL2-Small 和 DeepSeek-VL2。每个版本具有不同的模…

首批|云轴科技ZStack成为开放智算产业联盟首批会员单位

近日 &#xff0c;在Linux基金会AI & Data及中国开源软件推进联盟的指导之下&#xff0c;开放智算产业联盟成立大会在北京成功召开。在大会上&#xff0c;联盟首次公布了组织架构并颁发了首批会员单位证书。凭借ZStack AIOS平台智塔和在智算领域的技术创新&#xff0c;云轴…

word实现两栏格式公式居中,编号右对齐

1、确定分栏的宽度 选定一段文字 点击分栏&#xff1a;如本文的宽度为22.08字符 2、将公式设置为 两端对齐&#xff0c;首行无缩进。 将光标放在 公式前面 点击 格式-->段落-->制表位 在“制表位位置”输入-->11.04字符&#xff08;22.08/211.04字符&#xff09;&…

go语言zero框架中config读取不到.env文件问题排查与解决方案

在Go语言中&#xff0c;如果你使用.env文件来存储环境变量&#xff0c;通常会用到一些第三方库&#xff0c;例如github.com/joho/godotenv&#xff0c;它可以帮助我们从.env文件中读取环境变量。然而&#xff0c;在使用godotenv时&#xff0c;可能会遇到一些问题&#xff0c;导…

修改vscode设置的原理

转载请标明出处&#xff1a;小帆的帆的专栏 修改vscode设置 首先需要理解的是&#xff0c;vscode的系统设置和插件设置都是通过settings.json文件管理的。 vscode中有三个Settings&#xff0c;三个Settings分别对应三个settings.json文件 Default Settings&#xff1a;默认…

Qt之修改窗口标题、图标以及自定义标题栏(九)

Qt开发 系列文章 - titles-icons-titlebars&#xff08;九&#xff09; 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时&#xff0c;经常需要修改窗口标题、更改软…

环境变量的知识

目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下&#xff0c;也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…

【时时三省】(C语言基础)通讯录1

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 通讯录 1 .通讯录中能够存放1000个人的信息 每个人的信息&#xff1a; 名字年龄性别电话地址 2、增加人的信息 3、删除指定人的信息 4、修改指定人的信息 5&#xff0c;查找指定人的信…