WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] HOWTO make PV drivers for 2.6.32.11 domU HVM

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] HOWTO make PV drivers for 2.6.32.11 domU HVM
From: Alex Bligh <alex@xxxxxxxxxxx>
Date: Sat, 24 Apr 2010 22:47:24 +0100
Cc: Alex Bligh <alex@xxxxxxxxxxx>
Delivery-date: Sat, 24 Apr 2010 14:48:24 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Alex Bligh <alex@xxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
I have had some success compiling xen 4.0 PV drivers for 2.6.32.11, and
seeing as this appears to be non-trivial, I thought it worth documenting.
All the information is out there, but I thought I'd publish a HOWTO for
other people; perhaps I am very stupid, but it took me a while to work
out, partly as the unmodified_drivers documentation is misleading.
My target was Ubuntu, but as I start off with kernel.org sources, this
is largely irrelevant.

Question: this may be a very naive question, but would it not make
life simpler for people if those distributing the xenify parch set
(the ones I grabbed from google) also distributed an "unmodified_drivers"
directory with the path mangling done by mkbuildtree already in place.
Then it would be simply a matter of going into unmodified_drivers
and calling a script that sets XEN= and XL= and calls make. This would
avoid the need to bring down the entire xen source, and would mean
only combining two potions, rather than three. As far as I can tell,
it doesn't actually /need/ the xen source, though I may be wrong. And
pv drivers built this way work with older versions (I've tried 3.3)
as well as Xen 4.0.

HOWTO make PV drivers for 2.6.32.11 domU HVM

Step 1
======

Build and install an HVM kernel built from xenified kernel sources, but
*without* any of the Xen options turned on (this got me for a while). You
want a normal guest configuration which knows as little about Xen as
possible.

$ mkdir ~/test
$ cd ~/test
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.11.tar.bz2
$ tar xvjf linux-2.6.32.11.tar.bz2

Now xenify it (patch script courtesy of Boris Derzhavets)

$ cat >patcher
#!/bin/bash
for P in `ls ../xen-patches-2.6.32-1/6*.patch1 | sort `
do
patch -p1 -s -i $P
if [ $? = 0 ]; then
echo $P applied
else
echo "Error processing "$P
exit 1
fi
done
^D
$ chmod ogua+x patcher

Get the patches from Gentoo:
$ wget http://gentoo-xen-kernel.googlecode.com/files/xen-patches-2.6.32-1.tar.bz2
$ mkdir xen-patches-2.6.32-1
$ cd xen-patches-2.6.32-1
$ tar -xvjf ../xen-patches-2.6.32-1.tar.bz2
$ cd ..

Apply the patches
$ cd linux-2.6.32.11
$ ../patcher

Make an appropriate .config - NOTE: DO NOT TURN ON ANY XEN OPTIONS
USE A STANDARD x86_64 config.
$ cp /boot/config-`uname -r` .config
$ make menuconfig
[make any changes and exit]
To speed up build:
$ make localmodconfig

Build kernel, either traditionally (make), or via
$  fakeroot make-kpkg --initrd --append-to-version=-xen-hvm-domu \
   kernel-image kernel-headers


NB: for me this refused to build an initrd, which I had to do manually (i.e.
make modules ; make modules_install
mkinitramfs -o initrd.img-2.6.32.11-xen-hvm-domu 2.6.32.11-xen-hvm-domu
) - this step should be unnecessary.

Step 2
======

Make pv drivers

This assumes you are inside the linux directory (i.e. at the end of step
1), which has a built kernel in it (it will need a generated .config, plus
the kernel symbols, possibly plus other stuff).

First make a file with this patch in
$ cat > pvdrivers.patch
diff -r 88d9619e21c3 unmodified_drivers/linux-2.6/blkfront/Kbuild
--- a/unmodified_drivers/linux-2.6/blkfront/Kbuild Wed Apr 21 08:36:58 2010 +0100 +++ b/unmodified_drivers/linux-2.6/blkfront/Kbuild Sat Apr 24 22:03:59 2010 +0100
@@ -2,4 +2,4 @@

obj-m += xen-vbd.o

-xen-vbd-objs := blkfront.o vbd.o
+xen-vbd-objs := blkfront.o vbd.o vcd.o
^D

First get the xen source
$ mkdir pvdrivers
$ cd pvdrivers
$ hg clone http://xenbits.xen.org/xen-4.0-testing.hg
$ cd xen-4.0-testing.hg

Now fix a broken makefile (otherwise insmod on xen-vbd.ko will give you
unresolved symbols for vcd_register, vcd_unregister)
$ perl -pi -e 's/ vbd.o$/ vbd.o vcd.o/' unmodified_drivers/linux-2.6/blkfront/Kbuild

Now set paths up for build, and build it, totally ignoring the instructions
which I believe are wrong. Note that both XL and XEN point into kernel
source you have built, not into the xen source tree.

$ export XL=`cd ../..;pwd`
$ export XEN=$XL/include/xen
$ cd unmodified_drivers/linux-2.6/
$ ./mkbuildtree
$ make -C $XL modules M=$PWD
$ find . -name '*.ko'

That gives you the locations of your pvdrivers as kernel modules.

What I did was install the kernel (without the pvdrivers first)
and then insmod the pvdrivers in this order:
$ sudo insmod xen-platform-pci.ko
$ sudo insmod xen-balloon.ko
$ sudo insmod xen-vnif.ko
$ sudo insmod xen-vbd.ko
$ sudo insmod xen-scsi.ko


--
Alex Bligh

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>