Search code examples
embedded-linuxvirtualizationqemuu-bootbsp

qemu network not working needed for tftp booting


Hi, I was trying to make network work on qemu-system-arm uboot for tftp/dhcp booting , Could not understand QEMU 5.0.0 networking configuration needed , can you help on this.

$qemu-system-arm --version QEMU emulator version 5.0.0

Yocto BSP used: https://github.com/ahmedkassem56/meta-qemuarma9.git

$ cat /etc/qemu-ifup

#!/bin/sh
set -x
/sbin/ip a add 192.168.0.1/255.255.255.0 dev $1
/sbin/ip link set $1 up

$sudo chmod +x /etc/qemu-ifup

$ sudo qemu-system-arm -M vexpress-a9 -m 256 -kernel u-boot.elf -nographic -net tap,id=tap1,script=/etc/qemu-ifup -net nic,id=nic1

+ /sbin/ip a add 192.168.0.1/255.255.255.0 dev tap1
+ /sbin/ip link set tap1 up

U-Boot 2020.01 (Jan 06 2020 - 20:56:31 +0000)

DRAM:  256 MiB
WARNING: Caches not enabled
Flash: 128 MiB
MMC:   MMC: 0
Loading Environment from EXT4... Card did not respond to voltage select!
In:    serial
Out:   serial
Err:   serial
Net:   smc911x-0
Hit any key to stop autoboot:  0 
=> setenv serverip 192.168.0.1
=> setenv ipaddr 192.168.0.2
=> setenv netmask 255.255.255.0
=> setenv gatewayip 192.168.1.0
=> ping 192.168.0.1
smc911x: MAC 52:54:00:12:34:56
smc911x: detected LAN9118 controller
smc911x: phy initialized
smc911x: MAC 52:54:00:12:34:56
Using smc911x-0 device

ARP Retry count exceeded; starting again
smc911x: MAC 52:54:00:12:34:56
ping failed; host 192.168.0.1 is not alive
=> 

Solution

  • Thankfully qemu network is working now with the below setup ..

    Ref: Build a complete virtual ARM development environment based on QEMU (uboot+linux+rootfs)

    ~/ProjectWork/bin/$cat tuntap.sh

    set -x
    
    ETH=enp2s0   #Ethernet interface in your HOST 
    USR=junno    #User name- whoami
    
    if test -z $1 ; then
            echo need a arg: down/up
            exit
    fi
    
    if [ "up" = $1 ] ; then
    
            brctl addbr br0
    
            ifconfig $ETH down
            brctl addif br0 $ETH
    
            #Close Spanning Tree Protocol
            brctl stp br0 off
    
            ifconfig br0 10.8.8.1 netmask 255.255.255.0 promisc up  #3
            ifconfig $ETH 10.8.8.10 netmask 255.255.255.0 promisc up #2
    
            tunctl -t tap0 -u $USR
            ifconfig tap0 10.8.8.11 netmask 255.255.255.0 promisc up #4
            brctl addif br0 tap0
    else
            ifconfig tap0 down
            brctl delif br0 tap0
    
            ifconfig $ETH down
            brctl delif br0 enp2s0
    
            ifconfig br0 down
            brctl delbr br0
    
            ifconfig $ETH 10.8.8.10 netmask 255.255.255.0  #2
    fi
    

    Add below lines $vi ~/.bashrc

    alias ifup_tap='sudo ~/ProjectWork/bin/tuntap.sh up'
    alias ifdown_tap='sudo ~/ProjectWork/bin/tuntap.sh down'
    

    $ source ~/.bashrc

    HOST:

    cp zImage-initramfs-qemuarma9.bin /tftpboot/
    cp vexpress-v2p-ca9-qemuarma9.dtb /tftpboot/
    
    ~/ProjectWork/bin$ ifdown_tap
    ~/ProjectWork/bin$ ifup_tap
    

    TARGET:

    ~/ProjectWork/bin$ sudo qemu-system-arm -M vexpress-a9 -m 512 -nographic -net nic -net tap,ifname=tap0,script=no -kernel u-boot.elf

    U-Boot 2020.01 (Jan 06 2020 - 20:56:31 +0000)
    
    DRAM:  512 MiB
    WARNING: Caches not enabled
    Flash: 128 MiB
    MMC:   MMC: 0
    Loading Environment from EXT4... Card did not respond to voltage select!
    In:    serial
    Out:   serial
    Err:   serial
    Net:   smc911x-0
    Hit any key to stop autoboot:  1 
    =>
    =>setenv serverip 10.8.8.1; setenv ipaddr 10.8.8.2; setenv netmask 255.255.255.0; 
    =>ping 10.8.8.1
     host 10.8.8.1 is alive
        
    //For initramfs
    =>setenv bootargs "console=ttyAMA0,115200 root=/dev/ram rw"
    =>tftp 0x60000000 zImage-initramfs-qemuarma9.bin
    =>tftp 0x70000000 vexpress-v2p-ca9-qemuarma9.dtb
    =>bootz 0x60000000 - 0x70000000