QEMU 1.4.0 overo 시스템의 시뮬레이션된 lan9118에는 네트워크 인터페이스가 없습니다.

QEMU 1.4.0 overo 시스템의 시뮬레이션된 lan9118에는 네트워크 인터페이스가 없습니다.

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 qtreeQEMU 모니터 목록에 없습니다.

제 생각에는 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에 드라이버가 있는지 또는 드라이버를 추가하는 방법조차 모릅니다.

관련 정보