编译构建riscv-gnu-toolchain,使用qemu引导测试linux
文档
https://wiki.ubuntu.com/RISC-V
https://www.cnx-software.com/2018/03/16/how-to-run-linux-on-risc-v-with-qemu-emulator/
下载组件
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
下载编译工具链
git clone https://gitee.com/mirrors/riscv-gnu-toolchain
cd riscv-gnu-toolchain
# 这个速度有点慢
# git rm qemu
# git submodule update --init --recursive
git clone https://git.qemu.org/git/qemu.git
git clone https://gitee.com/riscv-mcu/riscv-binutils-gdb.git riscv-binutils
git clone https://gitee.com/riscv-mcu/riscv-dejagnu.git
git clone https://gitee.com/riscv-mcu/riscv-gcc.git
#git clone https://gitee.com/mirrors/riscv-gcc
git clone https://gitee.com/riscv-mcu/riscv-binutils-gdb.git riscv-gdb
git clone git://sourceware.org/git/glibc.git
git clone git://sourceware.org/git/newlib-cygwin.git
./configure
sudo make linux -j $(nproc)
riscv64-unknown-linux-gnu-gcc -v
编译u-boot
git clone https://gitlab.denx.de/u-boot/u-boot.git
make CROSS_COMPILE=riscv64-unknown-linux-gnu- qemu-riscv64_smode_defconfig
make CROSS_COMPILE=riscv64-unknown-linux-gnu- -j $(nproc)
编译opensbi
git clone https://gitee.com/ma-mengjin/opensbi
cd opensbi
make PLATFORM=generic CROSS_COMPILE=riscv64-unknown-linux-gnu-
编译内核
wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.18.tar.xz
tar -xvf linux-5.18.tar.xz
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- -j $(nproc)
下载镜像
wget https://cdimage.ubuntu.com/releases/22.04/release/ubuntu-22.04-preinstalled-server-riscv64+unmatched.img.xz
启动测试
#从镜像复制出来initrd.img-5.15.0-1007-generic
#其它路径按实际自行指定
qemu-system-riscv64 \
-machine virt -nographic -m 2048 -smp 4 \
-bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_dynamic.elf \
-kernel linux-5.18/arch/riscv/boot/Image \
-initrd initrd.img-5.15.0-1007-generic \
-drive file=buntu-22.04-preinstalled-server-riscv64+unmatched.img,format=raw,if=virtio \
-device virtio-net-device,netdev=eth0 -netdev user,id=eth0 \
-append "root=LABEL=cloudimg-rootfs ro earlycon single"
启动界面
OpenSBI v0.9
____ _____ ____ _____
/ __ \ / ____| _ \_ _|
| | | |_ __ ___ _ __ | (___ | |_) || |
| | | | '_ \ / _ \ '_ \ \___ \| _ < | |
| |__| | |_) | __/ | | |____) | |_) || |_
\____/| .__/ \___|_| |_|_____/|____/_____|
| |
|_|
Platform Name : riscv-virtio,qemu
Platform Features : timer,mfdeleg
Platform HART Count : 4
Firmware Base : 0x80000000
Firmware Size : 124 KB
Runtime SBI Version : 0.2
[ 18.445154] EXT4-fs (vda1): INFO: recovery required on readonly filesystem
[ 18.445439] EXT4-fs (vda1): write access will be enabled during recovery
[ 18.472855] EXT4-fs (vda1): recovery complete
[ 18.476141] EXT4-fs (vda1): mounted filesystem with ordered data mode. Quota mode: disabled.
Welcome to Ubuntu 22.04 LTS!
其他
-mabi
ilp32、ilp32f、ilp32d、lp64、lp64f lp64d
i:int,l:long,p:pointer, 32/64:32/64,f:float,d:double
裸机:unknown-elf,none-embed
linux:linux