Closed hehellooedas closed 1 month ago
通过 QEMU 仿真 RISC-V 环境并启动 openEuler RISC-V 系统,设法输出 neofetch 结果并截图提交
下载镜像后解压缩,并参考镜像源里的start_vm.sh脚本,写一个适合当前系统的run.sh
qemu-system-riscv64 \
-nographic -machine virt \
-smp 8 -m 4G \
-bios fw_payload_oe_uboot_2304.bin \
-drive file=openEuler-24.03-V1-base-qemu-testing.qcow2,format=qcow2,id=hd0 \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-gpu \
-device virtio-rng-device,rng=rng0 \
-device virtio-blk-device,drive=hd0 \
-device virtio-net-device,netdev=usernet \
-netdev user,id=usernet,hostfwd=tcp::10001-:22 \
-device qemu-xhci -usb -device usb-kbd -device usb-tablet
给予run.sh执行权限后直接运行.进入openEuler系统后进行必要的rpm包安装和ssh配置,使用ssh连接到本地的10001端口转发到openEuler虚拟机的22端口。
ssh -p 10001 april_zhao@localhost
2、试图安装和运行neofetch
由于我有两台Fedora设备,因此我的每台设备都使用openEuler RISC-V虚拟机并且尝试使用不同的方法去达到目的。
首先直接尝试使用包管理器安装.
sudo dnf install neofetch
但很可惜,openEuler官方源里没有这个包。
方法一:直接从Fedora-koji.repo源里借用.
❯ cat fedora-riscv-koji.repo
[fedora-riscv-koji]
name = Fedora RISC-V koji
baseurl = http://fedora.riscv.rocks/repos/f40-build/latest/riscv64/
enable=1
gpgcheck=0
添加源到/etc/yum.repo.d当中,再次使用dnf命令安装neofetch,成功安装.
方法二:直接通过rpm包安装
由于neofetch是基于shell脚本编写的,平台无关性很强,因此我直接访问pkgs.org下载[neofetch-7.1.0-12.fc40.noarch.rpm](https://fedora.pkgs.org/rawhide/fedora-x86_64/neofetch-7.1.0-12.fc40.noarch.rpm.html).
但是安装时出现了包依赖问题,也就是neofetch依赖于catimg绘制图像,因此我访问https://github.com/posva/catimg.拉取它的源码,使用cmake构建make install安装后,就可以成功安装neofetch.
在 openEuler RISC-V 系统上通过 obs 命令行工具 osc,从源代码构建 RISC-V 版本的 rpm 包.
1、根据guide.md的描述注册一个osc的账号.
然后在openEuler RISC-V虚拟机里安装必要的rpm包
sudo dnf install osc build rpm-build obs-service-tar_scm
可以成功安装.
2、编写osc的配置文件,使它符合在obs注册的账号信息
3、选定xz项目进行本地构建
osc co openEuler:Mainline:RISC-V/xz
cd openEuler:Mainline:RISC-V/xz #切换到xz包的目录
osc up -S xz #把源码包、补丁和spec文件下载到本地
rm -f _service;for file in `ls | grep -v .osc`;do new_file=${file##*:};mv $file $new_file;done #重命名由service下载的文件
osc build #开始本地构建
构建的结果如conversation所示.
尝试使用 qemu user & nspawn 或者 docker 加速完成任务二.
由于使用qemu的system mode开启虚拟机进行包构建,速度会比较慢,因为完整地模拟一个指令集和跑一个系统非常消耗资源。为了追求效率,可以在高性能的x86平台上直接构建RISC-V 的rpm包。
1、在我的x86 Fedora系统里安装必要的rpm包
sudo dnf install glibc-static pcre-static glib2-static zlib-static obs-service-tar_scm osc
在安装osc的rpm包的时候会根据依赖情况自动安装obs-build等包。
osc co openEuler:Mainline:RISC-V/xz
osc up -S xz
rm -f _service;for file in `ls | grep -v .osc`;do new_file=${file##*:};mv $file $new_file;done
osc build standard_riscv64 riscv64 xz.spec --vm-type=nspawn
由于在Fedora上的qemu包是相当完整的,因此这一套流程走下来没有遇到挫折,直接就能跑通。构建的结果如conversation所示.
good job