Custom bootloader
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
\ \ 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