[rtems-libbsd commit] libbsd.txt: Move Qemu notes

Sebastian Huber sebh at rtems.org
Wed May 25 05:25:13 UTC 2022


Module:    rtems-libbsd
Branch:    master
Commit:    06ee26024e88428a4a3b53d048216301b909e026
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=06ee26024e88428a4a3b53d048216301b909e026

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon May 23 13:25:55 2022 +0200

libbsd.txt: Move Qemu notes

---

 README.rst |  77 ++++++++++++++++++++++++++++++++++++---
 libbsd.txt | 121 -------------------------------------------------------------
 2 files changed, 71 insertions(+), 127 deletions(-)

diff --git a/README.rst b/README.rst
index facea82e..dd2963ae 100644
--- a/README.rst
+++ b/README.rst
@@ -474,12 +474,17 @@ Qemu and Networking
 ===================
 
 You can use the Qemu simulator to run a LibBSD based application and connect it
-to a virtual network on your host.  You have to create a TAP virtual Ethernet
-interface for this:
+to a virtual network on your host.
+
+Networking with TAP Interface
+-----------------------------
+
+One option for networking with Qemu is using a TAP interface (virtual
+Ethernet).  You can create a TAP interface with these commands on Linux:
 
 .. code-block:: none
 
-    sudo tunctl -p -t qtap -u $(whoami)
+    sudo ip tuntap add qtap mode tap user $(whoami)
     sudo ip link set dev qtap up
     sudo ip addr add 169.254.1.1/16 dev qtap
 
@@ -502,18 +507,20 @@ the arm/xilinx_zynq_a9_qemu BSP:
 
     qemu-system-arm -serial null -serial mon:stdio -nographic \
       -M xilinx-zynq-a9 -m 256M \
+      -net nic,model=cadence_gem \
       -net tap,ifname=qtap,script=no,downscript=no \
-      -net nic,model=cadence_gem,macaddr=0e:b0:ba:5e:ba:12 \
       -kernel build/arm-rtems6-xilinx_zynq_a9_qemu-default/media01.exe
 
-After some seconds it will acquire a IPv4 link-local address, e.g.
+Make sure that each Qemu instance uses its own MAC address to avoid an address
+conflict (or otherwise use it as a test).  After some seconds it will acquire a
+IPv4 link-local address, for example:
 
 .. code-block:: none
 
     info: cgem0: probing for an IPv4LL address
     debug: cgem0: checking for 169.254.159.156
 
-You can connect to the target via telnet for example:
+You can connect to the target via telnet, for example:
 
 .. code-block:: none
 
@@ -524,3 +531,61 @@ You can connect to the target via telnet for example:
 
     RTEMS Shell on /dev/pty4. Use 'help' to list commands.
     TLNT [/] #
+
+Virtual Distributed Ethernet (VDE)
+----------------------------------
+
+You can use a Virtual Distributed Ethernet (VDE) to create a network
+environment that does not need to run Qemu as root or needing to drop the tap's
+privileges to run Qemu.
+
+VDE creates a software switch with a default of 32 ports which means a single
+kernel tap can support 32 Qemu networking sessions.
+
+To use VDE you need to build Qemu with VDE support. The RSB can detect a VDE
+plug and enable VDE support in Qemu when building. On FreeBSD install the VDE
+support with:
+
+.. code-block:: none
+
+    pkg install -u vde2
+
+Build Qemu with the RSB.
+
+To network create a bridge and a tap. The network is 10.10.1.0/24. On FreeBSD
+add to your ``/etc/rc.conf``:
+
+.. code-block:: none
+
+    cloned_interfaces="bridge0 tap0"
+    autobridge_interfaces="bridge0"
+    autobridge_bridge0="re0 tap0"
+    ifconfig_re0="up"
+    ifconfig_tap0="up"
+    ifconfig_bridge0="inet 10.1.1.2 netmask 255.255.255.0"
+    defaultrouter="10.10.1.1"
+
+Start the VDE switch as root:
+
+.. code-block:: none
+
+   sysctl net.link.tap.user_open=1
+   sysctl net.link.tap.up_on_open=1
+   vde_switch -d -s /tmp/vde1 -M /tmp/mgmt1 -tap tap0 -m 660 --mgmtmode 660
+   chmod 660 /dev/tap0
+
+You can connect to the VDE switch's management channel using:
+
+.. code-block:: none
+
+    vdeterm /tmp/mgmt1
+
+To run Qemu:
+
+.. code-block:: none
+
+    qemu-system-arm -serial null -serial mon:stdio -nographic \
+      -M xilinx-zynq-a9 -m 256M \
+      -net nic,model=cadence_gem \
+      -net vde,id=vde0,sock=/tmp/vde1
+      -kernel build/arm-rtems6-xilinx_zynq_a9_qemu-default/rcconf02.exe
diff --git a/libbsd.txt b/libbsd.txt
index 8987cfa3..fc748f24 100644
--- a/libbsd.txt
+++ b/libbsd.txt
@@ -7,127 +7,6 @@ RTEMS BSD Library Guide
 
 == Getting Started
 
-== Qemu
-
-Use the following script to set up a virtual network with three tap devices
-connected via one bridge device.
-
--------------------------------------------------------------------------------
-#!/bin/sh -x
-
-user=`whoami`
-interfaces=(1 2 3)
-
-tap=qtap
-bri=qbri
-
-case $1 in
-	up)
-		sudo -i brctl addbr $bri
-		for i in ${interfaces[@]} ; do
-			sudo -i tunctl -t $tap$i -u $user ;
-			sudo -i ifconfig $tap$i up ;
-			sudo -i brctl addif $bri $tap$i ;
-		done
-		sudo -i ifconfig $bri up
-		;;
-	down)
-		for i in ${interfaces[@]} ; do
-			sudo -i ifconfig $tap$i down ;
-			sudo -i tunctl -d $tap$i ;
-		done
-		sudo -i ifconfig $bri down
-		sudo -i brctl delbr $bri
-		;;
-esac
--------------------------------------------------------------------------------
-
-Connect your Qemu instance to one of the tap devices, e.g.
-
--------------------------------------------------------------------------------
-qemu-system-i386 -m 512 -boot a -cpu pentium3 \
-	-drive file=$HOME/qemu/pc386_fda,index=0,if=floppy,format=raw \
-	-drive file=fat:$HOME/qemu/hd,format=raw \
-	-net nic,model=e1000,macaddr=0e:b0:ba:5e:ba:11 \
-	-net tap,ifname=qtap1,script=no,downscript=no \
-	-nodefaults -nographic -serial stdio
--------------------------------------------------------------------------------
-
--------------------------------------------------------------------------------
-qemu-system-arm \
-	-serial null \
-	-serial mon:stdio \
-	-nographic \
-	-M xilinx-zynq-a9 \
-	-net nic,model=cadence_gem,macaddr=0e:b0:ba:5e:ba:11 \
-	-net tap,ifname=qtap1,script=no,downscript=no \
-	-m 256M \
-	-kernel build/arm-rtems5-xilinx_zynq_a9_qemu/media01.exe
--------------------------------------------------------------------------------
-
-Make sure that each Qemu instance uses its own MAC address to avoid an address
-conflict (or otherwise use it as a test).
-
-To connect the Qemu instances with your local network use the following
-(replace 'eth0' with the network interface of your host).
-
--------------------------------------------------------------------------------
-ifconfig eth0 0.0.0.0
-brctl addif qbri eth0
-dhclient qbri
--------------------------------------------------------------------------------
-
-=== VDE and QEMU
-
-On FreeBSD you can create VDE or the Virtual Distributed Ethernet to create a
-network environment that does not need to run qemu as root or needing to drop
-the tap's privileges to run qemu.
-
-VDE creates a software switch with a default of 32 ports which means a single
-kernel tap can support 32 qemu networking sessions.
-
-To use VDE you need to build qemu with VDE support. The RSB can detect a VDE
-plug and enable VDE support in qemu when building. On FreeBSD install the VDE
-support with:
-
- # pkg install -u vde2
-
-Build qemu with the RSB.
-
-To network create a bridge and a tap. The network is 10.10.1.0/24. On FreeBSD
-add to your /etc/rc.conf:
-
- cloned_interfaces="bridge0 tap0"
- autobridge_interfaces="bridge0"
- autobridge_bridge0="re0 tap0"
- ifconfig_re0="up"
- ifconfig_tap0="up"
- ifconfig_bridge0="inet 10.1.1.2 netmask 255.255.255.0"
- defaultrouter="10.10.1.1"
-
-Start the VDE switch as root:
-
- # sysctl net.link.tap.user_open=1
- # sysctl net.link.tap.up_on_open=1
- # vde_switch -d -s /tmp/vde1 -M /tmp/mgmt1 -tap tap0 -m 660 --mgmtmode 660
- # chmod 660 /dev/tap0
-
-You can connect to the VDE switch's management channel using:
-
- $ vdeterm /tmp/mgmt1
-
-To run qemu:
-
- $ qemu-system-arm \
-	-serial null \
-	-serial mon:stdio \
-	-nographic \
-	-M xilinx-zynq-a9 \
-	-net nic,model=cadence_gem,macaddr=0e:b0:ba:5e:ba:11 \
-	-net vde,id=vde0,sock=/tmp/vde1
-	-m 256M \
-	-kernel build/arm-rtems5-xilinx_zynq_a9_qemu/rcconf02.exe
-
 == Issues and TODO
 
 * PCI support on x86 uses a quick and dirty hack, see pci_reserve_map().



More information about the vc mailing list