Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Guest PXE boot code
Chen Jin, Bharath Pattabiraman, and Patrick Foley [Fri, 3 Jan 2014 21:19:49 +0000 (15:19 -0600)]
guest/pxe/README [new file with mode: 0644]
guest/pxe/gpxe-1.0.1-gpxe.iso [new file with mode: 0644]
guest/pxe/gpxe.pal [new file with mode: 0644]

diff --git a/guest/pxe/README b/guest/pxe/README
new file mode 100644 (file)
index 0000000..675275a
--- /dev/null
@@ -0,0 +1,57 @@
+PXE is a standard for network booting of a machine that leverages 
+DHCP, TFTP, and a specialized bootloader.  
+
+It is possible to PXE boot a guest in Palacios in one of two ways.   First,
+the BIOS and/or virtual NIC firmware you use may directly support it.
+The second option is to boot a tiny image that contains a PXE boot
+engine, which is what is described here.    
+
+This technique was developed by Chen Kin, Bharath Pattabiraman,
+and Patrick Foley during EECS 441 at Northwestern. 
+
+The Etherboot/gPXE project (http://etherboot.org/wiki/index.php) has 
+created a PXE boot engine that can be compiled into a variety of
+forms (firmware, isos, etc).   You can use rom-o-matic to create a custom
+iso image:  http://rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/
+
+In this directory, the file gpxe-1.0.1-gpxe.iso is one such custom
+iso image, one that includes all available NIC drivers.   The file
+gpxe.pal is an example of how to use such an image (the same as 
+any other bootable CD image).    
+
+In addition to booting from gpxe, your guest configuration must include
+a NIC that gpxe can drive, and that NIC needs to attached to a network
+on which the PXE server can be found.   One approach is to use 
+a passthrough device.  The following maps an NE2000 NIC available on 
+the host into the VM:
+
+                <device id="PCI_PASSTHROUGH" name="ne2k">
+                       <bus>pci0</bus>
+                       <vendor_id>0x10EC</vendor_id>
+                       <device_id>0x8029</device_id>
+                       <irq>50</irq>
+               </device>
+
+Another possibility is to map a virtual NIC and bridge to a physical
+NIC:
+
+<device class="RTL8319" id="rtl8139">
+  <mac>MACADDR</mac>
+  <bus>PCI_BUS_ID</bus>
+</device>
+
+<device class="NIC_BRIDGE" id="nic_bridge">
+   <frontend tag="rtl8139" />
+   <hostnic name="eth0" />
+</device>
+
+A third possibility is to map a virtual NIC and bridge it to VNET. 
+See the technical report for more information on this.  
+
+Note that more recent versions of gpxe (1.0.1+) include support for
+the paravirtualized virtio-nic.   This is probably the kind of NIC you
+want to use.
+
+Configuring a PXE server is outside the scope of this document, but
+a related document available from our web site describes how to do so
+to support PXE-based Kitten/Palacios development. 
diff --git a/guest/pxe/gpxe-1.0.1-gpxe.iso b/guest/pxe/gpxe-1.0.1-gpxe.iso
new file mode 100644 (file)
index 0000000..f21715a
Binary files /dev/null and b/guest/pxe/gpxe-1.0.1-gpxe.iso differ
diff --git a/guest/pxe/gpxe.pal b/guest/pxe/gpxe.pal
new file mode 100644 (file)
index 0000000..0803ed7
--- /dev/null
@@ -0,0 +1,162 @@
+<vm class="PC">
+
+ <files>
+   <file id="ide0_0_0" filename="gpxe-1.0.1-gpxe.iso" />
+ </files>
+
+ <memory>256</memory>
+
+ <paging mode="nested">
+  <large_pages>false</large_pages>
+  <strategy>VTLB</strategy>
+ </paging>
+
+ <!-- there are no passthrough memory regions, but you can add them using
+     the <memmap> syntax described in the manual -->
+
+
+ <cores count="1">
+  <core />
+ </cores>
+
+ <schedule_hz>100</schedule_hz>
+
+ <perftune>
+  <group name="yield">
+   <strategy>friendly</strategy>
+   <threshold>1000</threshold>
+   <time>1000</time>
+  </group>
+ </perftune>
+
+ <telemetry>enable</telemetry>
+
+ <extensions>
+  <extension name="VMWARE_IFACE"></extension>
+ </extensions>
+
+ <devices>
+   <device class="BOCHS_DEBUG" id="bios_debug" />
+   <device class="OS_DEBUG" id="os_debug" />
+   <device class="8259A" id="PIC" />
+   <device class="LAPIC" id="apic" />
+   <device class="IOAPIC" id="ioapic" >
+    <apic>apic</apic>
+   </device>
+   <device class="PCI" id="pci0" />
+   <device class="i440FX" id="northbridge" >
+    <bus>pci0</bus>
+   </device>
+   <device class="PIIX3" id="southbridge" >
+    <bus>pci0</bus>
+   </device>
+   <device class="MPTABLE" id="mptable" />
+   <device class="8254_PIT" id="PIT" />
+   <device class="KEYBOARD" id="keyboard" />
+   <device class="CGA_VIDEO" id="cga" passthrough="disable" />
+   <device class="CURSES_CONSOLE" id="console" >
+    <frontend tag="cga" />
+    <tty>user</tty>
+   </device>
+   <device class="SERIAL" id="serial" />
+   <device class="CHAR_STREAM" id="stream1" name="com1" >
+    <frontend tag="serial" com_port="1" />
+   </device>
+   <device class="CHAR_STREAM" id="stream2" name="com2" >
+    <frontend tag="serial" com_port="2" />
+   </device>
+   <device class="CHAR_STREAM" id="stream3" name="com3" >
+    <frontend tag="serial" com_port="3" />
+   </device>
+   <device class="CHAR_STREAM" id="stream4" name="com4" >
+    <frontend tag="serial" com_port="4" />
+   </device>
+   <device class="IDE" id="ide0" >
+    <bus>pci0</bus>
+    <controller>southbridge</controller>
+   </device>
+   <device class="RAMDISK" id="ide0_0_0" >
+    <file>ide0_0_0</file>
+    <frontend tag="ide0">
+     <model>V3VEE CDROM</model>
+     <type>CDROM</type>
+     <bus_num>0</bus_num>
+     <drive_num>0</drive_num>
+    </frontend>
+   </device>
+   <device class="LNX_VIRTIO_NIC" id="virtio-nic0">
+    <bus>pci0</bus>
+    <mac>01:02:03:04:05:06</mac>
+   </device>
+   <device class="NIC_BRIDGE" id="nic_bridge0>
+    <frontend tag="virtio-nic0" />
+    <hostnic name="eth0" />
+   </device>
+   <device class="NVRAM" id="nvram" >
+     <storage>ide0</storage>
+   </device>
+   <device class="GENERIC" id="generic" >
+    <ports> 
+      <!-- DMA 1 registers -->
+      <start>0x00</start>
+      <end>0x07</end>
+      <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+      <!-- DMA 2 registers -->
+      <start>0xc0</start>
+      <end>0xc7</end>
+      <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+     <!-- DMA 1 page registers -->
+     <start>0x81</start>
+     <end>0x87</end>
+     <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+     <!-- DMA 2 page registers -->
+     <start>0x88</start>
+     <end>0x8f</end>
+     <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+      <!-- DMA 1 Misc Registers -->
+      <start>0x08</start>
+      <end>0x0f</end>
+      <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+     <!-- DMA 2 Misc Registers -->
+     <start>0xd0</start>
+     <end>0xde</end>
+     <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+     <!-- ISA PNP -->
+     <start>0x274</start>
+     <end>0x277</end>
+     <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+     <!-- ISA PNP -->
+     <start>0x279</start>
+     <end>0x279</end>
+     <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+     <!-- ISA PNP -->
+     <start>0xa79</start>
+     <end>0xa79</end>
+     <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+    <ports>
+     <!-- Parallel Port -->
+     <start>0x378</start>
+     <end>0x37f</end>
+     <mode>PRINT_AND_IGNORE</mode>
+    </ports>
+   </device>
+ </devices>
+
+</vm>