在发表第一篇关于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-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
几秒钟后便会显示命令提示符。现在是最后的测试。最后的测试是进行系统压力测试并观察vp上的负载。为此,我使用列入了rootfs 的stress-ng和htop应用程序。
$ stress-ng --cpu 2
可以看到,两个vp都得到了充分的利用。最后的测试中我们将大量使用所有的vp。
$ stress-ng --cpu 8
希望各位喜欢我的教程。若有任何疑问或建议请给我留言。
Satechi直连式AirPods无线充电扩展坞 没有延长线
Linux进程管理和启动流程方法
家电业的低迷态势仍在持续 预计冰洗产品将在二季度成“重灾区”
苹果一家独大,华为手机市场还有多少机会?
iPhone12ProMax什么时候能到货?
如何在MIPS64 Release 6 CPU上运行QEMU的Linux SMP
iphone8再现意淫设计,有考虑小米MIX的感受吗?
手持数显糖度计的设计原理是怎样的
ELAF-50L-C30002力传感器的技术分析
滥用人脸识别,美国公民将Facebook告上法庭
多波段光传输系统基本架构 单波400G系统研究进展
为什么加拿大迟迟未正式表态是否禁用华为
联想官宣乐檬K12系列将于12月9日正式发布
Niantic Labs凭借《Pokemon GO》上榜十大游戏开发商
通用汽车与特斯拉在自动驾驶安全机制上的博弈
MC34063或MC33063接成标准的DC—DC
生益电子业绩大幅下降:三位核心技术“老将”离职 研发人员数量骤减
分享几个有趣的Linux命令
几个未来最具发展潜力的蓝牙技术应用市场
苹果13配置有什么与改变