标题: Windows上用QEMU安装ARM版Debian时网卡驱动的坑 创建: 2018-05-24 16:42 链接: https://scz.617.cn/unix/201805241642.txt 从zyh那儿得知如何不依赖第三方内容的情况下在Windows上用QEMU安装ARM版Debian。 从网上下载如下文件: http://ftp.debian.org/debian/dists/wheezy/main/installer-armel/current/images/versatile/netboot/vmlinuz-3.2.0-4-versatile http://ftp.debian.org/debian/dists/wheezy/main/installer-armel/current/images/versatile/netboot/initrd.gz 创建虚拟硬盘: qemu-img create -f qcow2 armdebian.qcow2 16G 安装Debian: qemu-system-armw.exe -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.gz -hda armdebian.qcow2 -append "root=/dev/ram" 这将看到安装界面,不多说。如果你那里一切顺利,咱们江湖再见,别浪费时间。如 果你发现安装过程中DHCP配置失败,继续往下看。 到了"Configuring the network with DHCP",挣扎很久之后报告"Network autoconfiguration failed"。这是个大坑,放狗搜不到解决方案,最后自己试出一 招。先Alt-F2切到Console,在shell里依次执行: rmmod smc91x modprobe smc91x 然后Alt-F1切回安装界面,重新配置网络,DHCP成功。试出这招带有偶然性,但我还 是写写试的过程。 上述QEMU命令行默认采用NAT模式,Guest通过QEMU内置DHCP服务获得如下网络配置: 网关 10.0.2.2 DNS 10.0.2.3 IP 10.0.2.15 掩码 255.255.255.0 既然DHCP配置失败,基于当年安装PowerPC版Debian的经验,Alt-F2切到Console尝试 手工配置网络。没有ifconfig、netstat、route命令,只有一些有限的命令,通过 busybox提供。在/etc/下找到一个DHCP相关的脚本: more /etc/udhcpc/default.script 执行dmesg以及Alt-F4可以看到一些日志输出,结合这三处,得知一些手工配置网络 的命令: ip addr show eth0 ip addr add 10.0.2.15/24 broadcast 10.0.2.255 dev eth0 ip link set eth0 up ip link set dev eth0 up ip link set eth0 mtu 1500 ip -4 addr flush dev eth0 ip -4 route add default via 10.0.2.2 很少用ip命令,习惯了ifconfig,只好临时在其他虚拟机中"man ip"。 在Console中手工配置eth0,指定10.0.2.15后,可以"ping 10.0.2.15",不能 "ping 10.0.2.2"。执行"ip addr show",注意到: lo: eth0: eth0有个NO-CARRIER,没有常见的LOWER_UP,正常情况下应该看到: eth0: 有时可以试试如下命令: mii-tool --reset eth0 但Alt-F2的shell里没有mii-tool。假设网卡驱动出幺蛾子了,尝试卸载、重新加载 网卡驱动。 # lsmod Module Size Used by smc91x 17484 0 mii 3509 1 smc91x # modinfo smc91x filename: /lib/modules/3.2.0-4-versatile/kernel/drivers/net/ethernet/smsc/smc91x.ko alias: platform:smc91x license: GPL depends: mii intree: Y vermagic: 3.2.0-4-versatile mod_unload modversions ARMv5 p2v8 parm: nowait:set to 1 for no wait state (int) parm: watchdog:transmit timeout in milliseconds (int) 这个有参数,用insmod不现实,用modprobe加载。 # rmmod smc91x # modprobe smc91x # ip addr show eth0 eth0: # ip link set eth0 up # ip addr show eth0 eth0: # ip addr add 10.0.2.15/24 broadcast 10.0.2.255 dev eth0 # ping 10.0.2.15 (正常) # ping 10.0.2.2 (正常) # ping 10.0.2.3 (正常) 回头来看,不知何故导致Guest认为NO-CARRIER,可能与超时设置有关,也可能与网 卡驱动加载时机有关,不管了。