Kernel Building: Difference between revisions

From OLPC
Jump to navigation Jump to search
m (removed slash from "/lib/modules/$VERS" to make it save the new generated module and not the system one)
(Redirected page to Kernel)
 
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Merge | Kernel}}
#REDIRECT [[Kernel]]

;Note: it is recommended that you build an RPM ([[Rebuilding OLPC kernel]]) unless you are already familiar with kernel development!

== Building an OLPC kernel ==

After obtaining the OLPC source (and if desired, making changes), the following steps can be taken to build a kernel on any Fedora Core machine (Fedora 10 tested):


Go to the directory where the kernel source is copied (On my machine it is under /home/plug/workspace/olpc/kernel/source) and issue the following commands (issue the command "make help" for details):

make $PARAM distclean # Required only when doing a clean build from scratch i.e. all the previous configuration and binary files in this directory will be deleted.
make $PARAM olpc_defconfig # The default configuration file for OLPC. Required if building the kernel for the first time.
make $PARAM menuconfig # Provides a graphical interface for verifying and/or modifying the default configuration file.
make $PARAM # Build the kernel and modules.
make $PARAM modules_install # Root access is not required as the $OUTPUTDIR is a user(developer) accessible directory.
make $PARAM install # Root access is not required as the $OUTPUTDIR is a user(developer) accessible directory.
make $PARAM headers_install # Required only for development platforms.

In the above commands replace $PARAM with the following (refer $KERNEL_SRC_DIR/README and $KERNEL_SRC_DIR/Documentation/kbuild/makefiles.txt for details):
0=$OUTPUTDIR ARCH=i386 INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$OUTPUTDIR INSTALL_PATH=$OUTPUTDIR INSTALL_HDR_PATH=$OUTPUTDIR

here $OUTPUTDIR is the directory where you want the kernel binary to be copied, e.g. On my build machine it is /home/plug/workspace/olpc/kernel/install.
The advantage of having a custom install directory is that you do not require root access and avoid accidentally overwriting the kernel on your build machine.

After installing the kernel, go to $OUTPUTDIR and archive the kernel and the modules as follows:

tar zcvf kern.tar.gz vmlinuz-$VERS System.map-$VERS lib/modules/$VERS

Replace $VERS above with the proper kernel version that has been built.

Assuming everything builds correctly, you will be left with kern.tar.gz. This can be copied over to an XO laptop, and the following steps will install the kernel (again, replacing $VERS with the kernel version). Open the terminal activity on the XO and issue the following commands:

su # Change to root.
mkdir /tmp/newkern ; cd /tmp/newkernel
# Now copy kern.tar.gz to /tmp/newkernel
tar zxvf kern.tar.gz
cp System.map-$VERS /versions/boot/current/boot/
cp vmlinuz-$VERS /versions/boot/current/boot/
ln -sf /versions/boot/current/boot/vmlinuz-$VERS /versions/boot/current/boot/vmlinuz
cp -r lib/modules/$VERS /lib/modules/

If not booting off NAND, you'll probably want to skip the /versions/boot/current/ prefix on the paths above. A limited number of kernel modules are required by the ramdisk during the boot process; if you need to update the ramdisk, these additional steps are also necessary:

mkdir /tmp/newrdimg ; cd /tmp/newrdimg
zcat /versions/boot/current/boot/olpcrd.img | cpio -i
cp -r /lib/modules/$VERS lib/modules/
find . -print | cpio -H newc -o | gzip -9 > /versions/boot/current/boot/olpcrd.img-$VERS
ln -sf /versions/boot/current/boot/olpcrd.img-$VERS /versions/boot/current/boot/olpcrd.img


Reboot the XO. Open the terminal activity and issue the following command to verify that the XO is running the $VERS kernel:

uname -r


[[Category:Developers]]
[[Category:OS]]
[[Category:Software]]
[[Category:Build system]]

Latest revision as of 14:52, 21 February 2011

Redirect to: