概述
最近在使用UML调试内核,在我的ubuntu虚拟机里面将待调试的内核作为一个单独的UML进程跑起来然后使用gdb可以对其作各种调试(但无法调试硬件相关代码),这种感觉很爽,但唯一遗憾的是在启动的UML进程内无法连接网络,这样我想在我的UML里面通过apt-get安装需要的软件包就显得无能为力了,为了克服这个问题,最近研究了linux桥接组网的方式,尝试了可以成功,这里将组网的过程忠实地记录下来,以给有需要的用户以指导。
前提
在我的尝试中,虚拟机安装的是ubuntu,使用桥接(bridged)方式与宿主机(物理机)连接网络。
步骤
1. 安装bridge-utils和tunctl
非常简单,通过apt-get install ****安装即可;
2. 查看tun模块是否被加载
lsmod | grep tun
如果没有,则需手动加载tun模块
modprobe tun
3. 此时可以开始搭建桥接网络了,但首先必须创建一个虚拟网卡(名称tap0),所有者为$USERNAME,主要是给UML使用;
tunctl -t tap0 -u $USERNAME
4. 创建一个名为br0的网桥
brctl addbr br0
5. 使ext0(虚拟机的默认网卡,名称根据系统情况而定)进入promiscuous模式
ifconfig eth0 0.0.0.0 promisc
6. 将eth0和tap0加入br0
brctl addif br0 eth0
brctl addif br0 tap0
7. 设定br0的IP地址,网上说最好使用eth0原来的IP,我看倒未必(我的ubuntu系统上配置的eth0是dhcp方式,因此br0也配置的是dhcp方式获取ip地址);
dhclient br0
8. 删除旧的网关,设定新网关(如果上面是dhcp方式获取br0地址,这一步是没必要的);
route del default
route add default gw 192.168.1.1
9. 配置已经完成,可在ubuntu上访问外部网络,可测试验证;
10. 使用如下命令启动UML;
./kernel/linux2.6.36/linux eth0=tuntap,tap0 ubda=disk/root_fsmem=256m
相比之前,多了eth0=tuntap,tap0,其作用是将ubuntu上创建的虚拟网络设备tap0作为UML的eth0设备,
11. 启动UML后可观察的现象
ifconfig可看到UML下多了一个网络设备eth0,且ip地址已经分配,然后可以连通外面的网络,至此,大功告成。