Command line for Qemu and libbsd for pc386

junkes junkes at fhi-berlin.mpg.de
Thu Jun 25 15:54:24 UTC 2020


On 2020-06-24 19:22, Joel Sherrill wrote:

> Hi 
> 
> Does someone have a qemu command line handy for running libbsd network applications on Qemu? 
> 
> I have lots of notes and old examples but can't seem to trip the right combination today. 
> 
> Thanks. 
> 
> --joel 
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel

To boot epics I was setting up DHCP, ntp and nfs on my development host,
run this script: 

[h1 at earth utilities (master *+)]$ more setUpNetworkForQemu.py 
## @brief This Python file uses the following encoding: utf-8 
#  Documentation for this module. 
# 
#  More details. 

## Documentation for a function. 
# 
import netifaces 
import subprocess 
import dns.resolver 
import subprocess 
from string import Template 

brNet = '10.1.0.0' 
brNetMask = '255.255.255.0' 
brLeaseRange = '10.1.0.100 10.1.0.120' 
br0Ip = '10.1.0.1' 

ethNet = '10.0.0.0' 
ethNetMask = '255.255.255.0' 
ethLeaseRange = '10.0.0.100 10.0.0.120' 
eth0Ip = '10.0.0.1' 

def setupAndStartDhcpd(): 
 dhcpdConfStr = ('\n' + 
              'default-lease-time 600;\n' + 
              'max-lease-time 7200;\n' + 
              'option ntp-servers $ntpIp;\n' + 
              'option rtems-cmdline code 129=string;\n' + 
              'option rtems-cmdline "Ich DIch doch auch";\n' + 
              'filename "RtemsForever";\n' + 
              'option domain-name "rtems";\n' + 
              '\n' + 
              'subnet ' + brNet + ' netmask ' + brNetMask + ' {\n' + 
              'range ' + brLeaseRange + ';\n' + 
              'option routers ' + br0Ip + ';\n' + 
              'option domain-name-servers $dnsIp;\n' + 
              '}\n' + 
              'subnet ' + ethNet + ' netmask ' + ethNetMask + ' {\n' + 
              'range ' + ethLeaseRange + ';\n' + 
              'option routers ' + eth0Ip + ';\n' + 
              'option domain-name-servers $dnsIp;\n' + 
              '}\n' ) 

 # stop dhcp-server 
 subprocess.run(['/bin/systemctl', 'stop', 'isc-dhcp-server.service']) 

 dnsResolver = dns.resolver.Resolver() 
 print("will setup dhcpd with dhcp-server at : ",
dnsResolver.nameservers[0]) 
 s = Template(dhcpdConfStr) 
 txtToFile = s.substitute(dnsIp = dnsResolver.nameservers[0], ntpIp =
'10.1.0.1') 
 with open('/etc/dhcp/dhcpd.conf', 'w') as f: 
   print(txtToFile, file=f) 
   f.close() 

 s = 'INTERFACESv4="br0"' 
 with open('/etc/default/isc-dhcp-server', 'w') as f: 
   print(s, file=f) 
   f.close() 

 # start dhcp-server 
 subprocess.run(['/bin/systemctl', 'start', 'isc-dhcp-server.service']) 

def main(): 
 print("\nWill setup qemu network\n") 

 #setup a bridge 
 subprocess.run(['/sbin/brctl', 'addbr', 'br0']) 
 subprocess.run(['/sbin/ifconfig', 'br0', br0Ip, 'netmask', brNetMask,
'up']) 
 subprocess.run(['/usr/bin/tunctl', '-t', 'tap0']) 
 subprocess.run(['/usr/bin/tunctl', '-t', 'tap1']) 
 subprocess.run(['/sbin/brctl', 'addif', 'br0', 'tap0', 'tap1']) 
 subprocess.run(['/sbin/ifconfig', 'tap0']) 
 subprocess.run(['/sbin/ifconfig', 'tap1']) 

 # check for default gateway and interface used 
 gws = netifaces.gateways() 
 defaultGw = gws['default'][netifaces.AF_INET] 
 gwAddress = defaultGw[0] 
 gwInterface = defaultGw[1] 
 print ("Default gateway : ", gwAddress, " on interface : ",
gwInterface) 
 if 'wlan' in gwInterface : 
   print("Wlan interface used!? (", gwInterface, ")\n") 
   print("dummy eth mit ip_forwarding must be put in place") 
   #bridging wlan0 to eth0 
   s = '1' 
   with open('/proc/sys/net/ipv4/ip_forward', 'w') as f: 
     print(s, file=f) 
     f.close() 
   subprocess.run(['/sbin/iptables', '-t', 'nat', '-A', 'POSTROUTING', 
                   '-o', 'wlan0', '-j', 'MASQUERADE']) 
   subprocess.run(['/sbin/brctl', 'addif', 'br0', 'eth0']) 
   subprocess.run(['ifconfig', 'eth0', eth0Ip, 'netmask', ethNetMask,
'up']) 

 setupAndStartDhcpd() 
 subprocess.run(['/sbin/ifconfig', 'tap0', 'up']) 
 print("ready for qemu") 

main()

and then start a exe file with 

[h1 at earth QtC-epics-base (7.0 *)]$ more startQemu  
#!/bin/bash 
echo Script name: $0 
if [ $# -ne 1 ]; 
 then echo "Please name the exe file" 
 exit 2 
fi 
#-net nic -net tap,ifname=tap1,script=no \ 
#-net nic,model=cadence_gem -net tap,ifname=tap1,script=no \ 
# -s -no-reboot 
sudo qemu-system-aarch64 -s -no-reboot \ 
-net nic,model=cadence_gem -net tap,ifname=tap0,script=no \ 
-serial null -serial mon:stdio -nographic -M xilinx-zynq-a9 -m 256M \ 
-kernel bin/RTEMS-xilinx_zynq_a9_qemu/$1

HTH, Heinz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200625/03b1a5fc/attachment-0001.html>


More information about the devel mailing list