Get the source |
You need to start by getting a kernel tree (generally, the more recent, the better):host% wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 --15:02:55-- http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 => `linux-2.6.24.tar.bz2' Resolving www.kernel.org... 204.152.191.5, 204.152.191.37 Connecting to www.kernel.org|204.152.191.5|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 40,845,005 (39M) [application/x-bzip2] 100%[====================================>] 40,845,005 633.10K/s ETA 00:00 15:04:00 (622.07 KB/s) - `linux-2.6.24.tar.bz2' saved [40845005/40845005]Unpack the tree, which will end up in linux-2.6.24 in this casehost% bunzip2 linux-2.6.24.tar.bz2 host% tar xf linux-2.6.24.tar host% cd linux-2.6.24
Configuration |
Start with the UML default configuration, which will compile and boot. If you need to make changes, then do that later using menuconfig or xconfig.host% make defconfig ARCH=um host% # now make menuconfig or xconfig if desired host% make menuconfig ARCH=umIf you don't start with a defconfig, then the kernel build will be that of the host (it will find a config file in /boot), which will be very wrong for UML and will produce a UML that lacks vital drivers and won't boot.
Note - it is vitally important to put "ARCH=um" on every make command while building UML, or to "export ARCH=um" to put ARCH in your environment. This causes the kernel build to build UML, which is a separate Linux architecture. Not doing so will cause the kernel build to build or configure a native kernel. If you should forget, clean the pool like this
host% make mrproper host% make mrproper ARCH=umto get rid of all traces of whatever building you did, and start over.
Building |
Now, you can start the buildhost% make ARCH=umWhen this finishes, you will have a UML binary called "linux".host% ls -l linux -rwxrwxr-x 2 jdike jdike 18941274 Apr 7 15:18 linuxIt's so large because of the debugging symbols built in to it. Removing those will shrink the UML binary to roughly the size of a native kernel.Now, you are ready to boot your new UML.