LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

OpenWRT(5):QEMU运行SiFive FU540(RISC-V)

对应的OpenWRT版本为23.05:

git clone https://git.openwrt.org/openwrt/openwrt.git -b openwrt-23.05

1 OpenWRT配置

 选择Target、Subtarget、Target Profile,以及生成ramdisk文件:

Target System (SiFive U-based RISC-V boards)
Subtarget (Generic)
Target Profile (SiFive Unleashed (FU540))
Target Images
  ramdisk--编译ramdisk版本。

配置e1000以太网驱动:

Kernel modules
  Network Devices
    kmod-e1000

添加ttyS0作为console登录入口:

diff --git a/target/linux/sifiveu/base-files/etc/inittab b/target/linux/sifiveu/base-files/etc/inittab
index 69f97c47c8..0d8ead1d91 100644
--- a/target/linux/sifiveu/base-files/etc/inittab
+++ b/target/linux/sifiveu/base-files/etc/inittab
@@ -1,4 +1,5 @@
 ::sysinit:/etc/init.d/rcS S boot
 ::shutdown:/etc/init.d/rcS K shutdown
 ttySIF0::askfirst:/usr/libexec/login.sh
+ttyS0::askfirst:/usr/libexec/login.sh
 tty1::askfirst:/usr/libexec/login.sh

2 运行SiFive FU540

主机创建tap0:

sudo ip tuntap add dev tap0 mode tap
sudo ip address add dev tap0 192.168.2.1/24
sudo ip link set dev tap0 up

QEMU运行SiFive FU540:

qemu-system-riscv64 -M virt \
-bios ./build_dir/target-riscv64_riscv64_musl/opensbi-generic/opensbi-2022-12-24-6b5188ca/build/platform/generic/firmware/fw_jump.elf \
-kernel ./build_dir/target-riscv64_riscv64_musl/linux-sifiveu_generic/Image-initramfs \
-append "rootwait root=/dev/ram0" \
-device e1000,netdev=n1 -netdev tap,id=n1,ifname=tap0 \
-nographic

对上面QEMU命令的解释:

  • qemu-system-riscv64:启动QEMU模拟器,指定为RISC-V 64位目标。
  • -M virt:选择virt机器模型,这是一个通用的虚拟机模型,支持大量硬件特性。
  • -bios:指定OpenSBI(开源启动接口)固件的路径,这是RISC-V架构的启动固件:./build_dir/target-riscv64_riscv64_musl/opensbi-generic/opensbi-2022-12-24-6b5188ca/build/platform/generic/firmware/fw_jump.elf。
  • -kernel:指定Linux内核的初始化ramdisk映像文件路径:./build_dir/target-riscv64_riscv64_musl/linux-sifiveu_generic/Image-initramfs。
  • -append:传递内核启动参数。这里的参数"rootwait root=/dev/ram0"指示内核等待root文件系统就绪,并使用/dev/ram0作为根文件系统。
  • -device e1000,netdev=n1:添加一个虚拟的e1000网络设备,并将其分配给网络设备n1。
  • -netdev tap,id=n1,ifname=tap0:创建一个网络设备,使用TAP模式,将其ID设置为n1,并将其与宿主机上的tap0接口关联。
  • -nographic:以无图形界面模式启动虚拟机,所有输出将在控制台显示。

FU540内部关闭bridge,配置eth0:

brctl delif br-lan eth0
ip addr add 192.168.2.2/24 dev eth0
ip link set eth0 up

 参考文档:《[OpenWrt Wiki] OpenWrt in QEMU》、《[OpenWrt Wiki] HiFive Unleashed》。

posted on 2024-08-03 23:59  ArnoldLu  阅读(124)  评论(0编辑  收藏  举报

导航