一、现象

1.按照网上的教程,编译linux内核,编译qemu,编译busybox

2.主机建立桥接br0,对应的两个port,tap0和eth0

3.qemu启动,使用tap0进行桥接网络配置,一般启动方式:

qemu-system-x86_64 -m 1024M --kernel linux-4.4.216/arch/x86/boot/bzImage -hda ./ext4_rootfs/rootfs1.img  -nographic -append "root=/dev/sda init=/sbin/init console=ttyS0" -netdev tap,id=tap0,script=no,downscript=no -device e1000,netdev=tap0

4.发现网络ifconfig -a只有lo本地网卡

 

二、原因

一般这样启动,qemu模拟的是e1000的网卡。而linux内核默认编译是不会将e1000网卡驱动编译到内核的。

因此你的编译内核不知道有e1000网卡的存在(识别)。

解决方式:

1)将.config中的CONFIG_E1000和CONFIG_E1000E,变更为=y (我使用的是这种方式)

2)第二种是使用insmod来安装e1000模块

 

三、启动后

dmesg:可以看到有e1000网卡加载的信息,就是对的

[    1.650875] ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 11
[    1.946007] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 52:54:00:12:34:56
[    1.946735] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[    1.947837] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    1.948083] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.

四、能ping通外网,但是ping域名失败

1.busybox采用静态编译,ping会有bug,所以将static 静态编译取消后,采用动态编译的方式(menuconfig)

通过ldd找到动态库 (相关信息可以参考 [linux_内核相关] 自制启动x86_64架构下的linux(qemu+grub2+busybox+vmlinuz+登录配置+网络配置))

Logo

更多推荐