Corrector: TinyCorrect v0.1-rc3 - [spaces codeinline]
Author: ZhaoSQ 1044239768@qq.com
Date: 2022/07/18
Revisor: Falcon falcon@tinylab.org
Project: RISC-V Linux 内核剖析
Environment: Linux Lab Disk
Sponsor: PLCT Lab, ISCAS
泰晓 Linux 实验盘 已经提供了一些基础包(包含了编译器和编译工具:gcc、git、make 等),但是在构建 QEMU 之前需要安装一些额外的包。
对于 Ubuntu LTS(可能还有其他基于 Debian 的发行版),所有必须的附加软件包都可以像这样安装:
$ sudo apt install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build
上边的列表并不是 QEMU 完整的软件包。为了尽可能多的使用 QEMU 的功能,在执行 configure
前,应该安装更多的软件包。
对于 Ubuntu 系统,推荐安装额外的软件包,以实现最大的功能范围,可以安装如下内容:
$ sudo apt install git-email
$ sudo apt install libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libbz2-dev
$ sudo apt install libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
$ sudo apt install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
$ sudo apt install librbd-dev librdmacm-dev
$ sudo apt install libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev libssh-dev
$ sudo apt install libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev
$ sudo apt install valgrind xfslibs-dev
较新版本的 Debian / Ubuntu 也可能会尝试这些附加软件包:
$ sudo apt install libnfs-dev libiscsi-dev
如果想要使用最新的代码,甚至为代码做出贡献,建议通过 git 获取 QEMU 的代码,仓库地址为:QEMU。
推荐使用如下命令下载软件:
$ git clone https://gitlab.com/qemu-project/qemu.git
QEMU 支持在根目录下的任意文件夹进行构建,因此可以有很多不同的构建文件夹。比如,构建在 QEMU
根目录下的 bin/debug/native
中。
这是我的构建过程:
// 打开 QEMU 根目录
$ cd qemu
// 准备构建文件夹,bin/debug/native
$ mkdir -p bin/debug/native
$ cd bin/debug/native
// 配置 QEMU 并开始构建
$ ../../../configure --enable-debug
$ make
// 返回 QEMU 根目录
$ cd ../../..
构建完成,开始一个简单测试:
$ bin/debug/native/x86_64-softmmu/qemu-system-x86_64 -L pc-bios
此测试运行启动 PC BIOS 的 QEMU 系统仿真。
如果希望仿真 RISC-V 处理器,则在配置时需要加上 --target-list="riscv32-softmmu riscv64-softmmu riscv64-linux-user"
。
riscv32-softmmu
,riscv64-softmmu
为系统模式,riscv64-linux-user
为用户模式。为了测试方便,都安装。
下面是完成的配置与编译过程(在 QEMU 根目录中,执行以下命令):
// 准备构建文件夹,bin/debug/riscv
$ mkdir -p bin/debug/riscv
$ cd bin/debug/riscv
// 配置 QEMU 并开始构建
$ ../../../configure --target-list="riscv32-softmmu riscv64-softmmu riscv64-linux-user"
$ make
// 返回 QEMU 根目录
$ cd ../../..
构建完成,开始一个简单测试,在 QEMU 的根目录下,执行以下命令。
$ bin/debug/riscv/qemu-system-riscv64 --version
如出现类似如下输出表示 QEMU 成功安装并正常工作。
QEMU emulator version 7.0.50 (v7.0.0-2400-g63b38f6c85)
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
我们的目标是运行的 openEuler RISC-V OS,本次使用的版本为 20.03。
下载地址:https://repo.openeuler.org/openEuler-preview/RISC-V/Image/
其中的两个文件是启动 openEuler RISC-V 移植版所必须的:
fw_payload_oe.elf/fw_payload_oe_docker.elf
利用 openSBI
将 kernel-5.5 的 image 作为 payload 所制作的用于 QEMU 启动的 image。这两个文件选择一个就可以,前者不支持 Docker,后者支持。openEuler-preview.riscv64.qcow2
是 openEuler RISC-V
移植版的 rootfs 镜像。在 QEMU 的同级目录下,新建一个名为 openeuler/
的文件夹,将 fw_payload_oe.elf
和 openEuler-preview.riscv64.qcow2
文件拷贝进去,然后用 QEMU 启动系统:
$ mkdir openeuler/ && cd openeuler/
// 把 `fw_payload_oe.elf` 和 `openEuler-preview.riscv64.qcow2` 拷贝进来,然后执行下述命令
$ ~/Desktop/workspaces/qemu/bin/debug/riscv/qemu-system-riscv64 \
-nographic -machine virt \
-smp 2 -m 2G \
-kernel fw_payload_oe_docker.elf \
-drive file=openEuler-preview.riscv64.qcow2,format=qcow2,id=hd0 \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-device,rng=rng0 \
-device virtio-blk-device,drive=hd0 \
-device virtio-net-device,netdev=usernet \
-netdev user,id=usernet,hostfwd=tcp::12055-:22 \
-append 'root=/dev/vda1 rw console=ttyS0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon' \
-bios none
注意 -smp
选项为 CPU 核数,-m
为虚拟机内存大小,请根据宿主机配置酌情修改。
启动命令可做成 Shell 脚本,其中 fw_payload_oe_docker.elf
与 openEuler-preview.riscv64.qcow2
需修改为实际下载的文件名,并注意相对和绝对路径,如做成启动脚本则可与脚本放在同一目录下。
root
openEuler12#$
建议在登录成功之后立即修改 root 用户密码,登陆成功之后,可以看到如下的信息:
openEuler 20.03 (LTS)
Kernel 5.5.19 on an riscv64
login: er-RISCV-rare
openEuler 20.03 (LTS)
Kernel 5.5.19 on an riscv64
openEuler-RISCV-rare login: root
Password:
Last login: Tue Sep 3 09:30:22 on ttyS0
Welcome to 5.5.19
System information as of time: Tue Sep 3 09:30:17 UTC 2019
System load: 0.64
Processes: 65
Memory used: 2.6%
Swap used: 0.0%
Usage On: 12%
Users online: 1
[root@openEuler-RISCV-rare ~]#
建议在 Host Linux 上通过 ssh 登录到运行在 QEMU 模拟器之上的 openEuler OS,如直接使用,可能会出现 VIM 键盘输入异常。
$ ssh -p 12055 root@localhost
本文详细介绍了如何在 泰晓 Linux 实验盘 中,快速从源码构建一个用于仿真 RISC-V 处理器架构的 QEMU,并演示了如何下载并启动一个最新版的 openEuler for RISC-V 系统,希望对大家有所帮助。
根据 Linux Lab 项目的最新开发动态,我们发现在它的 next 分支中已经可以直接编译 QEMU v7.0.0,预计在新版 泰晓 Linux 实验盘 中,也将很快支持 QEMU 的自动构建,敬请期待,我们下回再进行相关演示。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。