Network console

From coreboot
Jump to: navigation, search

Qemu Howto

Introduction

Qemu can emulate the ne2k, so why not using it to test the network console...

Howto

Create a tap device(the device will be named tap0 here):

openvpn --mktun --dev tap0

Then create the required files for making the tap interface come up(or down) when qemu starts(or stops): Create /etc/qemu-ifup with the following content:

ip addr add 10.10.10.1/24 dev tap0

And /etc/qemu-ifdown with the following content:

ip addr del 10.10.10.1/24 dev tap0 

I'm not sure if it's necessary but better making both files executables.

Then boot a GNU/Linux distribution:

qemu-system-i386 -no-kvm -bios build/coreboot.rom -serial stdio -m 1024 -net nic,vlan=0,model=ne2k_pci -net tap,vlan=0,ifname=tap0,script=no -hda ../virt/parabola.img -cdrom ../virt/parabola-2012.10.17-dual.iso

Once it is booted, identify the BAR of the ne2k PCI card inside the OS like that:

# lspci 
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)

Look for a Realtek Ethernet card, and then do the following on the PCI address of that card:

# lspci -s 00:03.0 -vvvv
00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
	Subsystem: Red Hat, Inc Qemu virtual machine
	Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Interrupt: pin A routed to IRQ 11
	Region 0: I/O ports at 0e00 [size=256]
	[virtual] Expansion ROM at e0000000 [disabled] [size=64K]
	Kernel driver in use: ne2k-pci

Here you can see that the BAR 0 is at 0e00, which is the default config in the make menuconfig configuration that we will look at in an instant.

Then do:

make menuconfig

And go in:

Console  --->

Select the following:

[*] Network console over NE2000 compatible Ethernet adapter

Which will make the following appear:

(26:77:e3:c7:5b:dd) Destination MAC address of remote system
(10.10.10.1) Destination IP of logging system
(10.10.10.2) IP address of coreboot system 
(0xe00) NE2000 adapter fixed IO port address

Identify the mac address of the tun0 interface on the host and fill it in "Destination MAC address of remote system":

ip addr show dev tap0
9: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100
    link/ether 26:77:e3:c7:5b:dd brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.1/24 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fe80::2477:e3ff:fec7:5bdd/64 scope link 
       valid_lft forever preferred_lft forever

Then fill in the IP of that address that we have put in /etc/qemu-ifup before in "Destination IP of logging system"

Then fill in a compatible IP for the coreboot system.

Run the following command for receiving the coreboot logs:

nc -u -l -p 6666

Then run qemu again like before:

qemu-system-i386 -no-kvm -bios build/coreboot.rom -serial stdio -m 1024 -net nic,vlan=0,model=ne2k_pci -net tap,vlan=0,ifname=tap0,script=no -hda ../virt/parabola.img -cdrom ../virt/parabola-2012.10.17-dual.iso