====== How-to loader.o to preform a kexec like operations ======
loader.o allow you to run a custom kernel, without the danger of having to reprogram your Flash ROM. It loads a new kernel into memory and jumps to it directly.
===== Compiling loader.o =====
- Get [[http://www.genbako.com/loader.o/org/loader.tar.gz|loader.o original source]] and optionally [[http://www.genbako.com/loader.o/loader.diff|patch for initrd problem]].
- [[:howto:kernel_build#build_toolchain|Build a toolchain for cross compiling]].
- In Makefile point ''INCLUDE = -isystem'' parameter to a **2.4.21-pre4** kernel header files!
- Fix ''gcc'' and ''ld'' entry in Makefile to meet your cross compiled toolchain.
- Apply initrd patch if you like.
- Run ''make''
===== Use pre-compiled loader.o =====
If you think that compiling loader.o by yourself is too much hassle then you can use a [[http://dns323.kood.org/downloads/people/sala/loader.o|pre-compiled loader.o]]
===== Preparing proper kernel image for loading =====
For kernel building instructions look [[howto:kernel_build|kernel building wiki page]].
Before you start compiling kernel you should apply this patch, which is going to fix [[http://dns323.kood.org/forum/t850-building-kernel-loadero.html|memory detection problem]].
--- arch/ppc/platforms/sandpoint_setup.c.orig 2007-08-09 18:02:58.000000000 -0400
+++ arch/ppc/platforms/sandpoint_setup.c 2007-08-09 18:03:41.000000000 -0400
@@ -451,8 +451,8 @@
/* This might be fixed in DINK32 12.4, or we'll have another
* way to determine the correct memory size anyhow. */
- /* return mpc10x_get_mem_size(MPC10X_MEM_MAP_B); */
- return 16*1024*1024;
+ return mpc10x_get_mem_size(MPC10X_MEM_MAP_B);
+ /*return 16*1024*1024;*/
}
static void __init
If you would like to use custom cmdline parameter for your kernel, for example "root=/dev/sda3" then you will also need this patch:
- Search for "#endif /* CONFIG_BLK_DEV_INITRD */" in arch/ppc/platform/sandpoint_setup.c
- Add following lines after "#endif /* CONFIG_BLK_DEV_INITRD */" line:
if ( r6 )
{
*(char *)(r7+KERNELBASE) = 0;
strcpy(cmd_line, (char *)(r6+KERNELBASE));
}
After you have successfully built a kernel image you should note that the loader need the kernel to be in binary format. It can be done with powerpc-linux-objcopy command.
powerpc-linux-objcopy -O binary vmlinux
===== Using loader.o to load a kernel image =====
sync;insmod /mnt/HD_a2/loader.o kernel=/mnt/HD_a2/vmlinux
or
sync;insmod /mnt/HD_a2/loader.o kernel=/mnt/HD_a2/vmlinux cmdline="root=/dev/sda3"
===== Use pre-compiled vmlinux =====
Pre-compiled vmlinux is available at [[http://dns323.kood.org/downloads/people/sala/vmlinux|here]].
It does support custom cmdline parameter. I does have usb and usb storage modules built in, so it is possible to load operating system from usb stick. This kernel image is optimized to boot [[:howto:chroot_gentoo|Gentoo linux]]. .config is available at [[http://dns323.kood.org/downloads/people/sala/loader.config|here]].\\
To load from usb stick:
sync;insmod /mnt/HD_a2/loader.o kernel=/mnt/HD_a2/vmlinux cmdline="root=/dev/sdb1"