前言
本文主要讨论使用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版本过低而不支持的问题。
镜像及固件下载
北京大学开源镜像站目前收录了龙芯新世界的镜像及固件,可以从这里下载。
- Loongarch新世界固件下载: QEMU_EFI_7.2.fd
- Loongarch新世界基本镜像下载: archlinux-loong64.iso
- Loongarch新世界Xfce GUI镜像下载: archlinux-xfce-2023.01.30.1-loong64.iso
- Loongarch新世界MATE GUI镜像下载: archlinux-mate-2023.01.30.1-loong64.iso
安装
创建虚拟磁盘
可以创建一个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
安装完成后,可以使用gparted
对磁盘进行分区。
Linux的分区布局方式与文件系统选择相对自由,由于是虚拟机,建议简化处理,只需要分出efi
分区与/
分区即可。而且,如果采用了qcow2
格式的虚拟磁盘,在此不推荐再使用CoW的Btrfs文件系统,以免造成性能损失。
分区完后,需要注意设置efi
分区的flag
为boot
和esp
,示例布局如下:
安装
首先,挂载相应分区:
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两大桌面环境在龙芯上尚不可用,因此只能使用轻量级的桌面环境,例如
xfce4
、lxde
、mate
等
安装完成后,使用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设备中启动,则还需要添加usbhid
和xhci_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
环境,重启进入新系统了。