使用QEMU配置龙芯新世界环境

Loongarch新世界踩坑记录

Posted by wszqkzqk on May 1, 2023
本文字数:4766

前言

本文主要讨论使用QEMU配置龙芯新世界环境的方法

作为北京大学Linux俱乐部探索项目的重要组成部分,新架构处理器的软件适配工作是我们的重点工作之一。

QEMU配置

安装QEMU

首先,需要安装QEMU。

Linux

这里以Arch Linux为例:

sudo pacman -S qemu-full

由于Arch Linux的软件都是最新版,这里不会存在因QEMU版本过低而不支持的问题。

Windows

本项目主要是为loongarch的Arch Linux适配软件生态,笔者在此建议Windows用户也要熟悉pacman的使用,因此在这里推荐Windows用户使用MSYS2中的QEMU环境。

MSYS2已经包含在了winget的软件库中,可以直接通过命令安装:

winget install msys2.msys2

安装完成后,需要将MSYS2的相关可执行文件路径添加到系统环境变量,以使用ucrt64环境为例:

Path变量中添加的内容
D:\msys64\ucrt64\bin
D:\msys64\usr\bin
  • 注意将路径替换为自己的路径。

在系统环境变量(现在的Windows系统应该只需要在开始菜单的搜索框中输入path就能弹出)中添加如下变量:

变量名 变量值
MSYS2_PATH_TYPE inherit

配置完成后,安装QEMU,同样以ucrt64环境为例:

pacman -S mingw-w64-ucrt-x86_64-qemu

MSYS2与Arch Linux一样是滚动更新的,这里不会存在因QEMU版本过低而不支持的问题。

镜像及固件下载

北京大学开源镜像站目前收录了龙芯新世界的镜像及固件,可以从这里下载。

安装

创建虚拟磁盘

可以创建一个qcow2格式的虚拟磁盘,优点是可以动态分配空间:

qemu-img create -f qcow2 /home/wszqkzqk/VMs/loongarch/archlinux-loongarch-test.qcow2 100G

注意将路径替换为自己的路径。

启动安装镜像

可以使用非GUI的镜像进行安装,也可以使用GUI的镜像进行安装。然而,GUI镜像的安装器目前不可用,因此我们无论使用什么镜像,都需要使用命令行进行安装。

对于非GUI镜像的安装,可以参照Arch Linux官方文档进行安装。

GUI镜像的命令安装也与之类似,本文在此对安装流程进行简单罗列。

以带有GUI的镜像为例,首先需要启动镜像:

qemu-system-loongarch64 \
    -m 5G \
    -cpu la464-loongarch-cpu \
    -machine virt \
    -smp 4 \
    -bios /home/wszqkzqk/VMs/loongarch/QEMU_EFI_7.2.fd \
    -serial stdio \
    -device virtio-gpu-pci \
    -net nic -net user \
    -device nec-usb-xhci,id=xhci,addr=0x1b \
    -device usb-tablet,id=tablet,bus=xhci.0,port=1 \
    -device usb-kbd,id=keyboard,bus=xhci.0,port=2 \
    -hda /home/wszqkzqk/VMs/loongarch/archlinux-loongarch-test.qcow2 \
    -cdrom /home/wszqkzqk/Downloads/ISOs/loongson/archlinux-xfce-2023.01.30.1-loong64.iso \
    -boot once=d

Windows下的命令类似,但注意如果不是在msys2的bash中运行而是在Windows系统的powershell中运行时,用于换行的\需要换成`:

qemu-system-loongarch64 `
    -m 5G `
    -cpu la464-loongarch-cpu `
    -machine virt `
    -smp 4 `
    -bios D:\VMs\QEMU_EFI_7.2.fd `
    -serial stdio `
    -device virtio-gpu-pci `
    -net nic -net user `
    -device nec-usb-xhci,id=xhci,addr=0x1b `
    -device usb-tablet,id=tablet,bus=xhci.0,port=1 `
    -device usb-kbd,id=keyboard,bus=xhci.0,port=2 `
    -hda D:\VMs\archlinux-loongarch-test.qcow2 `
    -cdrom D:\VMs\archlinux-xfce-2023.01.30.1-loong64.iso `
    -boot once=d

注意将路径替换为自己的路径。其中:

  • -m参数指定内存大小
    • 可以根据自己的需要进行调整
  • -cpu参数指定CPU类型
  • -machine参数指定机器类型
  • -smp参数指定CPU核心数
    • 对于目前的龙芯新世界,最多支持4核
  • -bios参数指定固件路径
    • 即指定为之前下载的QEMU_EFI_7.2.fd的路径
  • -serial参数指定串口
  • -device参数指定设备
  • -net参数指定网络
  • -hda参数指定虚拟磁盘路径
    • 即指定为之前创建的archlinux-loongarch-test.qcow2的路径
  • -cdrom参数指定镜像路径
    • 即指定下载的iso文件的路径
  • -boot参数指定启动顺序
    • once=d表示第一次启动时从光盘启动,之后则从硬盘启动
    • 目前该选择项似乎失效,需要手动调节命令中的指定顺序

分区

安装前,需要对磁盘进行分区。由于我们用的是有GUI的镜像,在这里我们可以直接使用gparted进行分区😋😋😋。镜像并不自带gparted,因此需要自行安装:

sudo pacman -Sy gparted

#~/img/loongarch/install-gparted.webp

安装完成后,可以使用gparted对磁盘进行分区。

Linux的分区布局方式与文件系统选择相对自由,由于是虚拟机,建议简化处理,只需要分出efi分区与/分区即可。而且,如果采用了qcow2格式的虚拟磁盘,在此不推荐再使用CoW的Btrfs文件系统,以免造成性能损失。

分区完后,需要注意设置efi分区的flagbootesp,示例布局如下:

#~/img/loongarch/partition-layout.webp

安装

首先,挂载相应分区:

sudo mount /dev/vda2 /mnt
sudo mount /dev/vda1 /mnt/efi --mkdir

然后使用pacstrap安装基本系统:

sudo pacstrap /mnt --needed base linux linux-firmware

如果需要安装其他软件包,可以在此处添加。例如,如果需要使用grub引导,可以:

sudo pacstrap /mnt --needed base linux linux-firmware grub efibootmgr

如果需要安装桌面环境、DM、字体、文件系统管理、输入法等组件,也可以添加到这里,例如:

sudo pacstrap /mnt --needed base linux linux-firmware \
    base-devel \
    sudo \
    zsh fish \
    grub efibootmgr \
    xfce4 xfce4-goodies \
    lightdm lightdm-gtk-greeter \
    noto-fonts-cjk noto-fonts-emoji \
    btrfs-progs xfsprogs dosfstools exfatprogs f2fs-tools xfsprogs \
    networkmanager \
    nano \
    fcitx5 fcitx5-configtool fcitx5-chinese-addons \
    neofetch \
    ... (其他所需软件)
  • 具体安装什么软件往往取决于个人的需求/喜好
  • 目前KDE与GNOME两大桌面环境在龙芯上尚不可用,因此只能使用轻量级的桌面环境,例如xfce4lxdemate

#~/img/loongarch/installation.webp

安装完成后,使用genfstab生成fstab文件:

sudo genfstab -U /mnt >> /mnt/etc/fstab

fstab在自动生成后可能还需要手动编辑,例如可以加入noatiome挂载选项等。

配置

为了方便调试,可以编辑/etc/default/grub,去掉GRUB_CMDLINE_LINUX_DEFAULT的参数中的quiet

此外,为了保证访问速率,可以使用北大的镜像源,编辑/etc/pacman.d/mirrorlist,在文件开头添加:

Server = https://mirrors.pku.edu.cn/loongarch/archlinux/$repo/os/$arch

对于QEMU中的虚拟机,还需要配置对virtio磁盘设备的访问,编辑/etc/mkinitcpio.conf,在MODULES一行添加virtio virtio_blk virtio_pci virtio_net

MODULES="virtio virtio_blk virtio_pci virtio_net"

如果还要在USB设备中启动,则还需要添加usbhidxhci_hcd

MODULES="virtio virtio_blk virtio_pci virtio_net usbhid xhci_hcd"

使用arch-chroot进入新系统:

sudo arch-chroot /mnt

重新构建initramfs

mkinitcpio -P

设置时区:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc

设置本地化:

sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
sed -i 's/#zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/g' /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf

设置主机名:

echo 'loongarch' > /etc/hostname

设置root密码:

passwd

启用lightdm与网络管理器:

systemctl enable lightdm.service
systemctl enable NetworkManager.service

创建非root账户:

useradd -m lcpuloongarch

设定用户密码:

passwd lcpuloongarch

将用户加入wheel用户组,以便支持sudo权限:

usermod -aG wheel lcpuloongarch

编辑sudo配置,为wheel组加入sudo使用权限:

EDITOR=nano visudo

在编辑时取消%wheel ALL=(ALL): ALL一行的注释即可。

安装引导

如果需要使用grub引导,可以使用grub-install安装引导:

grub-install --target=loongarch64-efi --efi-directory=/efi --removable

注意,这里的--removable参数不可省略

安装完成后,生成引导配置:

grub-mkconfig -o /boot/grub/grub.cfg

至此,安装完成,可以退出chroot环境,重启进入新系统了。

#~/img/loongarch/arch-booting.webp

#~/img/loongarch/system-info.webp