随着qemu 7.1已经开始初步包含loongarch支持,以及龙芯和开源爱好者在kernel,gcc上游的代码提交,目前可以在x86_64架构计算机使用qemu搭建一个虚拟机平台,用来验证内核、固件和进行底层应用的开发,进而可以多种方式丰富loongarch软件生态。但相关信息比较分散,本主题试图整理出一个脉络,供loongarch爱好者使用,用较短的学习路径,切入到实际的应用开发过程。
一、配置交叉编译工具链和内核编译
参见 编译最新版内核和生成内核deb软件包
继续使用这个主题里面的交叉工具链和基本环境配置
二、构建qemu虚拟机主程序
准备代码
## 目录配置
cd $HOME/mysdk/
mkdir emu
cd emu
## 代码准备
### 代码克隆
git clone https://github.com/loongson/qemu.git -b tcg-dev
### 进入代码目录
cd qemu
### 核查分支信息
git status
## 从网络获取子模块
git submodule init
git submodule update
构建qemu用户模式,可运行静态链接的用户程序
### 配置
./configure --prefix=/usr --target-list=“loongarch64-linux-user” \
--disable-werror --static --disable-docs
### 构建
make
构建qemu系统模拟模式
### 配置
./configure --disable-rdma --disable-pvrdma --prefix=/usr \
--target-list="loongarch64-softmmu" \
--disable-libiscsi --disable-libnfs --disable-libpmem \
--disable-glusterfs --enable-libusb --enable-usb-redir \
--disable-opengl --disable-xen --enable-spice \
--enable-debug --disable-capstone --disable-kvm \
--enable-profiler
### 构建
make
### 测试
make check-tcg
三、构建qemu所需的固件
目录配置
cd $HOME/mysdk
mkdir bios
cd bios
代码准备
git clone https://github.com/loongson/edk2.git -b LoongArch
cd edk2
git submodule update --init
cd ..
git clone https://github.com/loongson/edk2-platforms.git -b devel-LoongArch
cd edk2-platforms
git submodule update --init
cd ..
git clone https://github.com/tianocore/edk2-non-osi.git
环境配置及编译
export WORKSPACE=$PWD
export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi
export GCC5_LOONGARCH64_PREFIX=loongarch64-unknown-linux-gnu-
source edk2/edksetup.sh
make -C edk2/BaseTools
生成qemu能使用的UEFI固件
### 生成调试版固件,运行时输出运行信息
build --buildtarget=DEBUG --tagname=GCC5 --arch=LOONGARCH64 --platform=Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
### 生成发行版固件,运行速度快,输出信息很少
build --buildtarget=RELEASE --tagname=GCC5 --arch=LOONGARCH64 --platform=Platform/Loongson/LoongArchQemuPkg/Loongson.dsc
四、qemu套件基础环境测试
### 安装 virt-manager,以备调用
sudo apt install virt-manager
基于qemu-binary,里面提供了一个测试脚本 run-kernel.sh,可以方便的运行qemu-system-loongarch64
测试时,只需要把编译生成的内核 vmlinux.efi,固件 QEMU_EFI.fd,新编译的qemu,初始化 initrd-image以及定制的rootfs拷贝到同目录即可,文件名可适当修改
脚本的内容:
./qemu-system-loongarch64 -m 4G -smp 2 --cpu la464 --machine virt -bios ./QEMU_EFI.fd -serial stdio -monitor telnet:localhost:4495,server,nowait -kernel vmlinux-5.18.0+ -initrd ramdisk -append "root=/dev/ram rdinit=/sbin/init console=ttyS0,115200" --nographic
五、定制rootfs
六、参考的网络资源
使用QEMU运行基于LoongArch64架构的Linux系统
loongson3 virt generic platform (virt)
可用的qemu-binary