QEMU 1.4.0 Ubuntu 13.04 배포판을 사용하고 있습니다. 가상 머신을 호스트 네트워크의 일부로 만들려고 하므로 다음 명령을 사용합니다.
sudo qemu-system-arm -M overo -m 1024 -sd ./test.img -clock unix -device usb-mouse -device usb-kbd -serial pty -monitor pty -net nic,vlan=1,macaddr=00:aa:00:60:00:01,model=lan9118 -net tap,vlan=1,ifname=tap0,script=no
QEMU의 모니터에는 다음이 표시됩니다.
(qemu) info network
hub 1
\ tap.0: index=0,type=tap,ifname=tap0,script=no,downscript=/etc/qemu-ifdown
\ lan9118.0: index=0,type=nic,model=lan9118,macaddr=00:aa:00:60:00:01
(qemu) info qtree
bus: main-system-bus
type System
dev: lan9118, id ""
mac = 00:aa:00:60:00:01
vlan = 1
netdev = hub1port0
bootindex = -1
mode_16bit = 0
irq 1
mmio ffffffffffffffff/0000000000000100
장치가 에뮬레이트되고 VLAN이 Tap 장치에 연결되어 있는 것을 볼 수 있습니다. 지금까지는 모든 것이 좋아 보입니다.
가상 머신에서는 다음을 얻습니다.
[root@overo ~]# ifconfig -a
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
usb0 Link encap:Ethernet HWaddr F2:9D:C9:7F:69:F7
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lan9118 장치에는 eth0 인터페이스가 제공되지 않습니다. USB0이 설치되어 있는데 해당 장치가 info qtree
QEMU 모니터 목록에 없습니다.
제 생각에는 lan9118 드라이버가 설치되지 않은 것 같습니다. 그래서 파일을 확인해 linux-3.2.8.config
보니 이더넷 부분은 다음과 같습니다.
#
# CAIF transport drivers
#
CONFIG_ETHERNET=y
CONFIG_NET_VENDOR_BROADCOM=y
# CONFIG_B44 is not set
CONFIG_NET_VENDOR_CHELSIO=y
# CONFIG_DM9000 is not set
# CONFIG_DNET is not set
CONFIG_NET_VENDOR_FARADAY=y
# CONFIG_FTMAC100 is not set
# CONFIG_FTGMAC100 is not set
CONFIG_NET_VENDOR_INTEL=y
CONFIG_NET_VENDOR_I825XX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MICREL=y
CONFIG_KS8851=y
CONFIG_KS8851_MLL=y
CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_ENC28J60 is not set
CONFIG_NET_VENDOR_NATSEMI=y
CONFIG_NET_VENDOR_8390=y
# CONFIG_AX88796 is not set
# CONFIG_ETHOC is not set
CONFIG_NET_VENDOR_SEEQ=y
# CONFIG_SEEQ8005 is not set
CONFIG_NET_VENDOR_SMSC=y
CONFIG_SMC91X=y
#CONFIG_SMC911X is not set
CONFIG_SMSC911X=y
# CONFIG_SMSC911X_ARCH_HOOKS is not set
CONFIG_NET_VENDOR_STMICRO=y
# CONFIG_STMMAC_ETH is not set
CONFIG_NET_VENDOR_TI=y
# CONFIG_TI_DAVINCI_EMAC is not set
# CONFIG_TI_DAVINCI_MDIO is not set
# CONFIG_TI_DAVINCI_CPDMA is not set
CONFIG_PHYLIB=y
이 경우에는 CONFIG_SMSC911X=y가 괜찮을 것 같습니다. CONFIG_SMC911X=y도 시도했지만 아무것도 변경되지 않았습니다.
호스트 네트워크에 overo VM을 도입한 적이 있는 사람이 있다면 여러분의 의견을 듣고 싶습니다.
또한 동일한 방법을 사용하여 x86-64 VM을 호스트 네트워크에 연결해 보았지만 제대로 작동했습니다. x86-64 VM은 e1000 장치를 사용합니다.
QEMU 코드에서 hw/overo.c를 보면 다음과 같습니다.
88 /* Strictly this should be a LAN9221 */
89 if (nd_table[0].vlan) {
90 /* The ethernet chip hangs off the GPMC */
91 NICInfo *nd = &nd_table[0];
92 qemu_check_nic_model(nd, "lan9118");
93 s->eth = qdev_create(NULL, "lan9118");
94 qdev_set_nic_properties(s->eth, nd);
95 qdev_init_nofail(s->eth);
96 omap_gpmc_attach(s->cpu->gpmc, OVERO_NET_CS, s->eth, 0, 0);
97 sysbus_connect_irq(sysbus_from_qdev(s->eth), 0,
98 qdev_get_gpio_in(s->cpu->gpio, 176));
88행의 주석에는 엄격하게 LAN9221 장치여야 한다고 나와 있지만 qemu_check_nic_model(nd, "lan9118")은 LAN9118입니다.
그렇다면 어떤 장치 드라이버를 설치해야 할까요?
QEMU 코드에서 hw/overo.c를 보면 다음과 같습니다.
88 /* Strictly this should be a LAN9221 */
89 if (nd_table[0].vlan) {
90 /* The ethernet chip hangs off the GPMC */
91 NICInfo *nd = &nd_table[0];
92 qemu_check_nic_model(nd, "lan9118");
93 s->eth = qdev_create(NULL, "lan9118");
94 qdev_set_nic_properties(s->eth, nd);
95 qdev_init_nofail(s->eth);
96 omap_gpmc_attach(s->cpu->gpmc, OVERO_NET_CS, s->eth, 0, 0);
97 sysbus_connect_irq(sysbus_from_qdev(s->eth), 0,
98 qdev_get_gpio_in(s->cpu->gpio, 176));
88행의 주석에는 엄격하게 LAN9221 장치여야 한다고 나와 있지만 qemu_check_nic_model(nd, "lan9118")은 LAN9118입니다.
인터넷에서 검색했는데 SMSC911X는 두 장치 모두에 대해 동일한 드라이버여야 합니다. CONFIG_SMSC911X=y 이것도 CONFIG_SMSC911X_ARCH_HOOKS
설정해야 하는지 궁금합니다 . 그러나 이 구성에 대한 정보는 자세히 설명되어 있지 않습니다.
smsc.com에서 ARM 프로세서용 SRC-118-UBOOT-ARM LAN91xx/LAN92xx UBOOT 드라이버를 찾았습니다.
하지만 내 uboot에 드라이버가 있는지 또는 드라이버를 추가하는 방법조차 모릅니다.