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》。
联系方式:arnoldlu@qq.com