How do I build/install the kernel on a XO?

Andres Salomon dilinger at
Mon Apr 9 12:45:48 EDT 2007

Hal Murray wrote:
> I found a recipe for building the kernel at
> I've got a FC6 system.  git clone, make oldconfig,and make seemed to do 
> something sensible.

That should work.  We do the builds on an FC6 system as well.

> I'm a bit suspicious of the .config file.  I'd expect one/some of these to be 
> set:
> # CONFIG_M386 is not set
> # CONFIG_M486 is not set
> # CONFIG_M586 is not set
> # CONFIG_M586TSC is not set
> # CONFIG_M586MMX is not set
> # CONFIG_M686 is not set
> # CONFIG_X86_GENERIC is not set
> Is that really the right config file?  (Maybe I fatfingered something?)

That is correct.  Note that the following *is* set:


That's our cpu, and optimizing for other x86 cpus causes us to end up
with the wrong cache line size.

> make install tries do a normal install on the current system.
> I'm assuming I can do the build on a handy machine, transport the bits to a 
> running XO, install them there, and then reboot.  Is that reasonable?


>   A: My handy machine is FC6 on an Intel PC.  I'm assuming
>   that's close enough to the XO that I don't have to do a real
>   cross-compile type build.
>   B: I'm willing to re-install everything from scratch/flash if
>   my new kernel doesn't work.
> Assuming I'm on the right track, does anybody have a simple recipe for the 
> transport/install step?  I'll be happy with transport via flash or scp.

Basically, I do:

- make oldconfig
- make
- make modules_install
- tar zcvf modules.tar.gz /lib/modules/$VERS
- scp arch/i386/boot/bzImage modules.tar.gz $XO:

Replace $VERS with the version of the kernel that's being built, and $XO
with the user at host of your xo machine.

Once it's on the xo, I ssh in, untar modules.tar.gz (into /lib/modules),
copy the bzImage and files into /boot, and update the
/boot/vmlinuz symlink to point to the bzImage.   Reboot, and you should
be all set.

Note that this is for booting off nand; if you're booting off a flash
disk or something, there's are the extra steps of running 'mkinitrd' on
the xo after you've untarred modules, and then updating the
/boot/initrd.img symlink to point to the newly created initrd.

> My XO:/boot/ has things like:
>   symsets-2.6.21-20070330.1.olpc.168c2435fc81673.tar.gz
>   symvers-2.6.21-20070330.1.olpc.168c2435fc81673.gz
> Do I need them and/or what are they used for and where do they come from?

They come from the rpm generation script; I'm not entirely sure what
they're used for.  I never bother copying them, though.

More information about the Devel mailing list