qemu系统可以:
1)访问外网
2)访问局域网内的samba服务器(目的:局域网共享文件)
2)访问ubuntu中的Apache服务器(目的:宿主机共享文件)
第六篇(上)是实操部分,第六篇(下)是原理部分。
1,ubuntu版本
新系统安装可参考ubuntu20.04 搭建kernel调试环境第一篇--安装系统。
root@linux:/home/gsf# uname -a
Linux linux 5.15.0-53-generic #59~20.04.1-Ubuntu SMP Thu Oct 20 15:10:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
2,qemu版本
qemu安装编译,参考ubuntu20.04 搭建kernel调试环境第一篇--安装系统。
root@linux:/home/gsf# qemu-system-x86_64 -version
QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.23)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
红色框图:由libvirt自动创建(见下文)。
蓝色框图:启动qemu虚拟机时指定了相关参数,自动创建(见下文)。
红色箭头表示数据流。
qemu中的网络数据包<--->tap设备<--->virbr0网桥<--->网络协议栈<--->ubuntu中的真实网卡,从而实现qemu访问外网功能。
apt install bridge-utils
apt install uml-utilities
apt install libvirt-daemon-system 安装libvirt服务端
该命令启动deamon进程/usr/sbin/libvirtd,创建一个虚拟网桥virbr0,并在virbr0中增加一个虚拟网卡virbr0-nic。以后每次重启系统,libvirtd进程都会自动启动(service libvirtd status命令可检查libvirtd状态)。
ifconfig命令可以看到多了一个虚拟网桥virbr0:
brctl命令查看网桥信息:
qemu启动参数helper=/usr/lib/qemu/qemu-bridge-helper是个可执行程序(见后文),需要用到/etc/qemu/bridge.conf文件。
mkdir /etc/qemu
vim /etc/qemu/bridge.conf,增加两行:
allow virbr0 allow all |
chmod 777 /etc/qemu/bridge.conf
如果rootfs是buildroot创建的,编译rootfs时最好设置eth0接口通过DHCP获取ip地址,否则qemu系统启动后看不到eth0接口,网络是不通的。如果没有设置,qemu启动guest系统后,也可以手动改guest系统网络配置文件,也能让eth0正常工作。
在buildroot源码目录执行make menuconfig设置:
System configuration --->
(eth0) Network interface to configure through DHCP
编译完成后,将buildroot-2020.02.8/output/images/rootfs.f2fs拷贝到内核源码根目录(rootfs制作参考ubuntu20.04 搭建kernel调试环境第二篇--rootfs的制作)。
root@linux:/home/gsf/linux-5.18.11# qemu-system-x86_64 -kernel arch/x86_64/boot/bzImage -drive file=rootfs.f2fs,if=ide,format=raw,id=myid0 --nographic -append "root=/dev/sda console=ttyS0" -net nic,macaddr=52:54:00:12:34:56,model=e1000 -net bridge,id=net0,helper=/usr/lib/qemu/qemu-bridge-helper,br=virbr0
以上命令会在br=virbr0指定的网桥中创建一个tap0设备,作为虚拟网卡(macaddr参数,第一个字节的最低位不能是1)
在qemu启动的系统中(非ubuntu中)输入ifconfig可以看到mac地址及ip地址。
qemu系统中 ping 外网试试:
前提条件:ubuntu环境要能访问samba服务器才行。
1)按三~五步骤,确保qemu虚拟机运行的系统可以正常访问网络。
2)make menuconfig配置待运行的kernel
Network File Systems--->
File systems --->
<*> NFS client support
<*> NFS client support for NFS version 2
<*> NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
<*> NFS client support for NFS version 4
<*> SMB3 and CIFS support (advanced network filesystem)
3)make bzImage 编译内核。编译完成后qemu运行该内核(命令见第五节启动虚拟机)。
4)挂载samba目录
qemu启动完成后,在qemu shell终端执行下面命令:
mount -t cifs -o username=用户名,password=密码 //ip.ip.ip.ip/geshifei /home/gsf/cp
用户名、密码:用于访问samba服务器。
//ip.ip.ip.ip/geshifei:服务器提供的samba共享目录。
/home/gsf/cp:qemu系统中的本地目录。