背景 国产化的平台目前主要用到的有飞腾和龙芯,飞腾的是arm64架构,这个使用的比较多,龙芯的架构之前是mips架构,最新的硬件的架构已经发生了改变,现在是loongarch64架构,这个算比较新的架构,所以硬件就比较难获得,如果又有适配的需求,这个时候通过虚拟机启动环境是一个比较好的方式
虚拟机有两种方式:
一种是在相同架构下开虚拟机,这个比较简单,一般的操作系统内都带了kvm的相关的软件,直接使用qemu-kvm启动虚拟机就可以了,这个方式的前提是你得有一台这个架构的物理机器,才能在上面启动kvm虚拟机,还存在资源共用的问题了
另外一种方式就是通过qemu完全软件来进行启动这个虚拟机,qemu是在软件内实现了硬件的模拟,一般硬件厂商会给这个做一些适配工作,然后就支持虚拟厂商的硬件了,这个对宿主机环境没有要求
上面的方式二在之前尝试过,可能当时厂商对qemu还没开发完整,所以整个软件链路我自己当时是没有跑起来的,最近因为软件适配的问题,再次尝试,能够启动成功了,本篇就是把这个过程记录下来
准备的资源
准备一个x86的主机,性能尽量好点,这样虚拟机也能快一点
准备一个操作系统,这个操作系统最好系统版本高一点,centos8或者8以上的stream都可以,因为新版本的qemu里面用到的库的版本比较高,所以操作系统尽量高一点,这个依赖就比较好找了
qemu的软件,这个用最新版本的即可
loongarch64的qemu的一些运行的二进制文件
一个支持loongarch64的操作系统,这个国产操作系统基本都做了适配,这个我直接下载的操作系统,没有走iso安装的步骤,这个后面再研究,如果不好安装,也可以在kvm下把系统安装好了以后,把系统文件弄出来给qemu使用即可,这里直接下载官方提供的,本次使用的是opencloudos的龙芯操作系统
操作系统 这里为了方便,主机的操作系统我选择的是opencloudos的x86系统
https://mirrors.opencloudos.tech/opencloudos-stream/releases/23/images/x86_64/OpenCloudOS-Stream-23-20240304-minimal-x86_64.iso
下载的是minimal的,后面根据需要安装包即可
配置方法 编译qemu 安装后面会用到的依赖包
有个libusbredirparser-0.5包冲突处理下
1 2 [root@lab101 ~] [root@lab101 ~]
下载qemu源码包
解压
编译
1 2 3 [root@lab101 ~] [root@lab101 qemu-9.0.2] [root@lab101 qemu-9.0.2]
完成后检查输出
1 2 3 4 [root@lab101 qemu-9.0.2] Supported machines are: none empty machine virt Loongson-3A5000 LS7A1000 machine (default)
可以看到支持模拟的是 Loongson-3A5000
配置网桥 宿主机配置一个网桥
1 2 3 4 5 6 7 8 [root@lab101 ~] ifconfig p786p1 down ifconfig p786p1 0.0.0.0 brctl addbr br0 brctl addif br0 p786p1 ifconfig br0 192.168.19.101/16 up brctl stp br0 off route add default gw 192.168.1.1 br0
下载固件和镜像 1 2 3 4 [root@lab101 ~] [root@lab101 ~] [root@lab101 vm] [root@lab101 vm]
1 2 [root@lab101 vm] [root@lab101 vm]
添加
启动虚拟机
1 /root/qemu-9.0.2/build/qemu-system-loongarch64 -M virt -m 12G -cpu la464 -smp 12 -bios /vm/QEMU_EFI.fd -drive file=/vm/OpenCloudOS-Stream-23-20240808-loongarch64-preview.qcow2 -net nic -net bridge,br=br0 --nographic
修改root密码 通过用 rw init=/sysroot/bin/sh 参数替换内核中的 ro 语句以单用户模式启动
1 2 3 4 linux ($root )/boot/vmlinuz-6.6.34-9.ocs23.loongarch64 root=UUID=69ed94f1-41\| |53-48c0-8f9a-937959022d1d ro i8042.noaux quiet console=ttyS0,115200 console\| |=tty0 crashkernel=512M-4G:192M,4G-64G:256M,64G-128G:512M,128G-:768M biosdev\| |name=0 net.ifnames=0
改成
1 2 3 4 linux ($root )/boot/vmlinuz-6.6.34-9.ocs23.loongarch64 root=UUID=69ed94f1-41\| |53-48c0-8f9a-937959022d1d rw init=/sysroot/bin/sh i8042.noaux quiet console=ttyS0,115200 console\| |=tty0 crashkernel=512M-4G:192M,4G-64G:256M,64G-128G:512M,128G-:768M biosdev\| |name=0 net.ifnames=0
改好了后按F10启动,这个如果知道root密码就不用改
1 2 3 4 5 6 7 8 9 10 11 Generating "/run/initramfs/rdsosreport.txt" Entering emergency mode. Exit the shell to continue . Type "journalctl" to view system logs. You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot after mounting them and attach it to a bug report. Press Enter for maintenance (or press Control-D to continue ):
1 2 3 4 5 6 7 :/root :/ Changing password for user root. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.
改好后,重启退出,再启动
输入用户名密码登录即可
1 2 3 [root@192 ~] CPU Revision : 0x10 Model Name : Loongson-3A5000
启动成功界面
可以看到,通过qemu,我们完成了虚拟机的模拟启动了
总结 本篇介绍了使用qemu来模拟一个龙芯的环境,并且安装了opencloudos的镜像,其它镜像也是类似的操作