如何在MIPS64 Release 6 CPU上运行QEMU的Linux SMP

作者:Leon Alrae

在发表第一篇关于QEMU的文章之后,许多人都纷纷询问如何在QEMU上运行MIPS64 Release 6 CPU(MIPS64r6)的软件以及QEMU中实施MIPSr6多线程模块的现状。

本文我将针对这一系列的疑问进行解答。我将以教程的形式展示如何从零开始配置及构建64位Linux并使之在QEMU模拟器上运行。此外,我将使用支持VP(虚拟处理器)的MIPS64r6处理器,其是MIPSr6多线程的组成部分。

1

MIPS相干处理系统(CPS)是QEMU模拟所需的关键功能之一,其允许Linux 启用VP。尽管该功能的实现工作仍在进行中,但我们可以进行一个早期试验。

2

这个简短的教程所描述的配置和构建过程非常简单,使用台式电脑半个小时内便可以完成。我们将使用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-ng
Shell and utilities --->
[*] screen
System 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 rootfs
Graphics 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的闪存。本质上来说,这是跳转至内核。

以下展示的是如何启动系统:

$ qemu-system-mips64el -cpu I6400 -M malta -smp 8 -vga std –serial stdio -device virtio-keyboard-pci -kernel vmlinux -drive file=rootfs.ext2,format=raw -append "root=/dev/sda clocksource=GIC console=tty0"

3

几秒钟后便会显示命令提示符。现在是最后的测试。最后的测试是进行系统压力测试并观察VP上的负载。为此,我使用列入了rootfs 的stress-ng和htop应用程序。
$ stress-ng --cpu 2

4

可以看到,两个VP都得到了充分的利用。最后的测试中我们将大量使用所有的VP。
$ stress-ng --cpu 8

5

希望各位喜欢我的教程。若有任何疑问或建议请给我留言。

原文链接:
http://blog.imgtec.com/mips-processors/how-to-run-smp-linux-in-qemu-on-a...

声明:
本文为原创文章,转载需注明作者、出处及原文链接,否则,本网站将保留追究其法律责任的权利

精彩专辑《MIPS处理器》阅读同主题信息。
--电子创新网--
粤ICP备12070055号