RISC-V QEMU上引导Linux

RISC-V QEMU上引导Linux

Running 64-bit RISC-V Linux on QEMU


前言

这是在RISC-V QEMU上引导Linux的“hello world”示例。该指南涵盖了一些基本步骤,以在RISC-V上运行Linux。如果您对特定发行版感兴趣,建议您按照它们的步骤进行操作。例如,如果您有兴趣运行Debian,可以在其维基https://wiki.debian.org/RISC-V上找到说明。大多数发行版(Debian,Fedora,OpenEmbedded,buildroot,OpenSUSE,FreeBSD等)都支持RISC-V。


一、环境准备

在QEMU RISC-V上运行Linux需要安装一些先决条件。

sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
                 gawk build-essential bison flex texinfo gperf libtool patchutils bc \
                 zlib1g-dev libexpat-dev git

二、获取源码

先要获取源码

mkdir riscv64-linux
cd riscv64-linux

需要安装以下几个项目源码

RISCV Toolchain
QEMU
Linux
Busybox
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
git clone https://gitlab.com/qemu-project/qemu.git
git clone https://github.com/torvalds/linux
git clone https://git.busybox.net/busybox

1.RISCV Toolchain

如果您计划为RISC-V构建应用程序,您可能已经注意到,您之前安装的软件包无法满足您的程序可能依赖的C库的要求。因此,您需要自己构建工具链,以便在本指南中构建Busybox。

下面的说明受到RISC-V GNU编译器工具链项目的README启发,您可以在他们的说明中找到更详细的信息。请随意参考他们的文档或按照以下步骤进行操作。

Configure and Install

将toolchain编译·并安装到/opt/riscv

cd riscv-gnu-toolchain
./configure --prefix=/opt/riscv
make linux -j $(nproc)

安装确认

which riscv64-linux-gnu-gcc
$ /usr/bin/riscv64-linux-gnu-gcc

2.QEMU

Configure and Install

编译并安装RISCV QEMU

cd qemu
git checkout v8.2.0
./configure
make -j $(nproc)
sudo make install

3.Linux

Configure and make

编译Linux ,注意使用RISCV toolchain

cd linux
git checkout v5.11
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- -j $(nproc)

4.busybox

cd busybox
CROSS_COMPILE=riscv64-linux-gnu- make defconfig
CROSS_COMPILE=riscv64-linux-gnu- make -j $(nproc)

三、构建文件系统rootfs

INITRAMFS

mkdir initramfs
cd initramfs
mkdir -p {bin,sbin,dev,etc,home,mnt,proc,sys,usr,tmp}
mkdir -p usr/{bin,sbin}
mkdir -p proc/sys/kernel
cd dev
sudo mknod sda b 8 0 
sudo mknod console c 5 1
cd ..

拷贝busybox到filesystem里

cp ../busybox/busybox ./bin/

准备INIT

vim init

将以下内容粘到init文件中

#!/bin/busybox sh

# Make symlinks
/bin/busybox --install -s

# Mount system
mount -t devtmpfs  devtmpfs  /dev
mount -t proc      proc      /proc
mount -t sysfs     sysfs     /sys
mount -t tmpfs     tmpfs     /tmp

# Busybox TTY fix
setsid cttyhack sh

# https://git.busybox.net/busybox/tree/docs/mdev.txt
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

sh

添加 +x flag

chmod +x init

initramfs应该是如下这样:
在这里插入图片描述

创建initramfs:

find . -print0 | cpio --null -ov --format=newc | gzip -9 > initramfs.cpio.gz

四、运行RISCV QEMU

回到工作根目录并运行QEMU
sudo qemu-system-riscv64 -nographic -machine virt \
     -kernel linux/arch/riscv/boot/Image -append "root=/dev/vda ro console=ttyS0" \
     -drive file=busybox,format=raw,id=hd0 \
     -device virtio-blk-device,drive=hd0

总结

参考链接:

RISCV-V - Getting Started Guide
Linux on RISC-V using QEMU and BUSYBOX from scratch
Linux & Python on RISC-V using QEMU from scratch by Vysakh P Pillai
riscv-simulator
Building a minimal RootFS with Busybox, GLIBC and DropBear

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值