Custom bootloader

From OLPC
Revision as of 19:52, 11 July 2008 by 68.150.173.245 (talk) (added link to kernel options, minor spellfixes)
Jump to navigation Jump to search

This is the boot script for the olpc. It is normally found on the nand, in /boot.

Open firmware first searches for this file on a usb stick, then on a sd card, and finally on the nand. Below are found a commonly used script to allow for booting from a variety of locations. If you are booting into something other than sugar on fedora you will need to remove the startup animation as it causes the machine to freeze. This is easily accomplished by putting a line of unfreeze before the boot.

Boot location

You need 3 things to boot, a boot-file a boot-device and a ramdisk. You can hose these on a USB, a SD or on the internal nand. You may even have the olpc.fth boot file in any of these places (in /boot/) and the first location it finds is the one it is going to use. The order for searching is USB -> SD -> nand so it is possible to make a bootable USB stick, and it will boot that when present, but it will boot the normal nand when it is removed. this is helpful for trying out unstable distro's as it doesn't alter the internal memory at all.

The locations of these items with either be:

  • sd:\ - SD card
  • disk:\ - USB disk
  • nand:\ - internal nand

Boot-file

The inputs needed for the boot file are:

  • ro - mount read only (it is remounted read-write during the boot process)
  • root - location of the root filesystem
  • rootdelay - optional adds in a delay before booting
  • console - sets up the console display
  • fbcon - sets up some fonts

The rootfile is the main editable place it points to the root filesystem partition Usually

  • /dev/mmcblk0p1 - SD card
  • /dev/sda1 - USB stick
  • mtd0 - internal nand

A complete list of linux kernel options may be found at Linux Kernel in a Nutshell (PDF warning)

Boot-device

This is the location of the kernel that you wish to boot this line usually works to:

locator\boot\vmlinuz

for example to boot from SD

sd:\boot\vmlinuz

Ramdisk

This is the initial ramdisk used for booting. Usually:

locator\boot\olpcrd.img

example to boot from SD

sd:\boot\olpcrd.img

Sample menued bootloader to allow for selection of boot location

\ 
\ Uber bootscript for OLPC  Place in /boot as olpc.fth
\
cr
." 1 to boot from SD" cr
." 2 to boot from USB" cr
." 3 to boot from internal nand" cr
." 4 to boot alternate image from Nand" cr
cr
key dup drop dup dup
31 = if 
\ SD boot info
  " ro root=/dev/mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 fbcon=font:SUN12x22" to boot-file
  " sd:\boot\vmlinuz" to boot-device
  " sd:\boot\olpcrd.img" to ramdisk
else 32 = if 
\ USB boot info
  " ro root=/dev/sda1 rootdelay=1 console=ttyS0,115200 console=tty0 fbcon=font:SUN12x22" to boot-file
  " disk:\boot\vmlinuz" to boot-device
  " disk:\boot\olpcrd.img" to ramdisk
else 34 = if 
\ Alternate boot image info
   " ro root=mtd0 console=ttyS0,115200 console=tty0 fbcon=font:SUN12x22" to boot-file
   " nand:\boot-alt\vmlinuz" to boot-device
   " nand:\boot-alt\olpcrd.img" to ramdisk
else 
\ Default into boot as sugar
   " ro root=mtd0 console=ttyS0,115200 console=tty0 fbcon=font:SUN12x22" to boot-file
   " nand:\boot\vmlinuz" to boot-device
   " nand:\boot\olpcrd.img" to ramdisk
then
then
then 
unfreeze
boot
\ end of script

overclock

You can also overclock your OLPC with the olpc.fth file. In order to accomplish this you need to set your timings before it loads the operating system. You must add some numbers to the forth stack and when write these registers using wmrsr. Shown below is a specific overclock frequency and that can be changed by altering the middle number to what you find below in the overclock table.

7de009e
5dd
4c000014
wrmsr

You then add in any specific booting information you want (see above).

XO-1 Overclock Settings
in MHz; default is 433/166 (4d9)
CPU Bus Speed
133 166 200 216 233
333 3d3 4d3 5d3 653 6d3
366 3d5 4d5 5d5 655 6d5
400 3d7 4d7 5d7 657 6d7
433 3d9 4d9 5d9 659 6d9
466 3db 4db 5db 65b 6db
500 3dd 4dd 5dd 65d 6dd
533 3df 4df 5df 65f 6df
566 3e1 4e1 5e1 661 6e1

Sample Uber Bootscript

\ 
\ Uber bootscript for OLPC  Place in /boot as olpc.fth
\ 
\ select overclock level
\ 
cr
." 1 to set the clock speed as normal" cr
." 2 to under clock the machine to 333 MHZ memory 133" cr
." 3 to overclock it to 500 memory 200" cr
." 4 to overclock extreme to 533 233 WARNING MIGHT BE UNSTABLE" cr cr
key dup drop dup dup
32 = if
\ underclock
7de009e 3d3 4c000014 wrmsr ." underclock"
else 33 = if
\ over clock normal
7de009e 5dd 4c000014 wrmsr ." overclock normal"
else 34 = if
\ overclock EXTREME
7de009e 6df 4c000014 wrmsr ." overclock EXTREME"
then then then
\ select boot location
cr
." 1 to boot from SD" cr
." 2 to boot from USB" cr
." 3 to boot from internal nand" cr
." 4 to boot alternate image from Nand" cr
cr
key dup drop dup dup
31 = if 
\ SD boot info
   " ro root=/dev/mmcblk0p1 rootdelay=1 console=ttyS0,115200 console=tty0 fbcon=font:SUN12x22" to boot-file
   " sd:\boot\vmlinuz" to boot-device
   " sd:\boot\olpcrd.img" to ramdisk
else 32 = if 
\ USB boot info
   " ro root=/dev/sda1 rootdelay=1 console=ttyS0,115200 console=tty0 fbcon=font:SUN12x22" to boot-file
   " disk:\boot\vmlinuz" to boot-device
   " disk:\boot\olpcrd.img" to ramdisk
else 34 = if 
\ Alternate boot image info
    " ro root=mtd0 console=ttyS0,115200 console=tty0 fbcon=font:SUN12x22" to boot-file
    " nand:\boot-alt\vmlinuz" to boot-device
    " nand:\boot-alt\olpcrd.img" to ramdisk
else 
\ Default into boot as sugar
    " ro root=mtd0 console=ttyS0,115200 console=tty0 fbcon=font:SUN12x22" to boot-file
    " nand:\boot\vmlinuz" to boot-device
    " nand:\boot\olpcrd.img" to ramdisk
then
then
then 
unfreeze
boot
\ end of script