一、问题

        在使用qemu构建arm64的虚拟机时,虚拟机没有网络,桥接方式相对麻烦,我只是需要联网更新即可。与宿主机的通信我使用共享文件夹即可满足要求。

        使用指令启动虚拟机时,网络部分的参数为

-net user,hostfwd=tcp::10022-:22

其中 hostfwd 将宿主机的 10022 端口转发到虚拟机的 22 端口,可以通过 SSH 连接到虚拟机。运行时提示 user 不支持:

        使用

qemu-system-aarch64 --help

发现Network options一栏,没有-netdev user 这一项:

切换为 

qemu-system-arm --help

则有这一项:

       

二、解决过程

1、配置 --enable-user   

由于编译源码时使用的 target-list="aarch64-softmmu",那么有可能就是没有开启user。

./configure --enable-kvm --enable-debug --enable-vnc --target-list="aarch64-softmmu"

百度查询该问题都没有提到,默认都是开启该功能。

        于是在配置 configure 时添加 --enable-user 选项,重新编译源码:

./configure --enable-kvm --enable-debug --enable-vnc --enable-user --target-list="aarch64-softmmu"
make -j8
sudo make install

执行

qemu-system-aarch64 --help

仍然没有该选项,并且执行启动虚拟机指令依然提示没有 user选项。

2、配置 slirp

        查看 configure 执行的结果,找到 Network 一栏,发现只有最后一项开启。

        slirp 是一个用户空间的网络重定向器,它允许 qemu 的虚拟机通过宿主机的主机网络进行网络通信。当使用 user 网络模式时,qemu 会自动启用 slirp。也就是说,如果不开启 slirp,就无法使用 user。

更改 configure 命令:

./configure --enable-kvm --enable-debug --enable-vnc --enable-user --enable-slirp --target-list="aarch64-softmmu"

执行结果:

make

sudo make install

三、验证

        执行 

qemu-system-aarch64 --help

        可能会提示没有 libslirp.so.0 库,安装即可:

sudo apt-get install libslirp0

        再次执行,可以看到已经有 user 选项:

另外新的指令的网络设置部分为:

-netdev user,id=net0,hostfwd=tcp::10022-:22 \
-device virtio-net-pci,netdev=net0

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐