如何在MIPS64 Release 6 CPU上运行QEMU的Linux SMP
在发表第一篇关于QEMU的文章之后,许多人都纷纷询问如何在QEMU上运行MIPS64 Release 6 CPU(MIPS64r6)的软件以及QEMU中实施MIPSr6多线程模块的现状。
本文我将针对这一系列的疑问进行解答。我将以教程的形式展示如何从零开始配置及构建64位Linux并使之在QEMU模拟器上运行。此外,我将使用支持VP(虚拟处理器)的MIPS64r6处理器,其是MIPSr6多线程的组成部分。
MIPS相干处理系统(CPS)是QEMU模拟所需的关键功能之一,其允许Linux 启用VP。尽管该功能的实现工作仍在进行中,但我们可以进行一个早期试验。
这个简短的教程所描述的配置和构建过程非常简单,使用台式电脑半个小时内便可以完成。我们将使用Linux内核的4.7 rc1版 (一旦v4.7最终版本可用,建议使用最终版本)及稳定的Buildroot 2016.02版,以此来生成根文件系统及可以早期使用的Codescape MIPS SDK QEMU。
设置QEMU
首先,我们需要在平台上运行操作系统。我们将使用QEMU建立涵括MIPS CPU的虚拟硬件平台:
$ wget https://github.com/prplfoundaTIon/qemu/archive/rel/2.5.0.2.0.tar.gz$ tar -zxf 2.5.0.2.0.tar.gz$ mkdir build && cd build$ ../qemu-rel-2.5.0.2.0/configure --target-list=mips64el-softmmu$ make -j8
如果一切运行良好,则会出现./mips64el-softmmu/qemu-system-mips64el 二进位。这时,平台一切准备就绪。
Buildroot生成的根文件系统
有了Buildroot,嵌入式系统中Linux的构建过程将非常简单。它是高度可配置的,但我们使用仅仅只为生成最小的根文件系统。
$ wget https://buildroot.org/downloads/buildroot-2016.02.tar.gz$ tar -zxf buildroot-2016.02.tar.gz && cd buildroot-2016.02$ make qemu_mips64el_malta_defconfig$ make menuconfig
我们刚刚申请了Malta开发板的默认配置,并设置了小端字节序MIPS64目标。不过,还需要进行进一步的定制。可以看到的界面如下:
Target options --->Target Architecture Variant (mips 64r6)[ ] Use soft-float
Toolchain --->Toolchain type (External toolchain)Toolchain (Codescape IMG GNU Linux Toolchain 2015.10)
System configuration ---> [*] Run a getty (login prompt) after boot --->(tty0) TTY port
Kernel --->[ ] Linux Kernel
Target packages --->Debugging, profiling and benchmark --->[*] stress-ngShell and utilities --->[*] screenSystem tools --->[*] htop
我筛选了一个目标及一个外部工具链并改变了TTY端口。同时,我禁止了内核的构建(这部分将单独完成),并添加了三个目标包用于最后的测试。最后的测试将进行系统压力测试并观察当前的负载情况。配置完成后,便可以开始构建:
$ make
Buildroot可以下载及构建任何你想要的东西。几分钟后,便可以在 ./output/images/rootfs.ext2.中使用rootfs图像。
Linux内核
下载内核并设置所需的环境变量(我们将使用Buildroot下载的工具链):
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git$ cd linux && git checkout v4.7-rc1$ export ARCH=mips$ export CROSS_COMPILE=/output/host/opt/ext-toolchain/bin/mips-img-linux-gnu-$ make malta_defconfig$ make menuconfig
这里我进行了一些额外的变更:CPU selection --->CPU type (MIPS64 Release 6)
Kernel type --->Kernel code model (64-bit kernel)[*] MIPS Coherent Processing System support[*] Support for the MIPS SIMD Architecture
Device Drivers --->Generic Driver Options --->[*] Automount devtmpfs at /dev, after the kernel mounted the rootfsGraphics support ---><*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---><*> DRM Support for bochs dispi vga interface (qemu stdvga)Console display driver support --->[*] VGA text console[*] Bootup logo --->Virtio drivers ---><*> PCI driver for virTIo devices<*> VirTIo input driver
我筛选了一些CPU功能,并激活了用于键盘的VGA本文控制台和VirTIo。最后生成的是:
$ make –j8
接下来便是耐心的等待。几分钟后,vmlinux图像便产生了。
是否会正常工作?
此时,操作系统的运行一切准备就绪。我们可以跳过引导装载程序的构建工作。但如果没有提供引导装载程序,那么QEMU将确定内核的入口地址,并在用户启用前用伪静态引导装载程序填满Malta的闪存。本质上来说,这是跳转至内核。
以下展示的是如何启动系统: