Difference between revisions of "Leapster Explorer: UART Boot"

From eLinux.org
Jump to: navigation, search
(Software Needed)
(Bootloader)
Line 53: Line 53:
 
== Bootloader ==
 
== Bootloader ==
  
Doesn't exist yet, requires modifications to a current boot loader that are yet to be figured out.
+
Technically this isn't a UART boot, what will be happening is, once Emerald Boot is compiled, the Micromon application will be used to load the bin file onto the LX in RAM, where Micromon will then execute the code and start Emerald Boot loading. The reason for this is Emerald Boot is too big to load over UART since it can range from 40 to 80+KB in size, and the Pollux SoC will start running the code sent to it over UART at 16KB. Lightning boot on the other hand, easily meets the 16KB limit and will often times need extra padding to trigger the Pollux UART boot start up.
  
Didj examples of UART Booting, should be nearly the same.
+
To get started, get yourself the Emerald Boot source linked above, the Micromon program and the devroot environment. Devroot sets up the codesourcery build environment, if you know what you are doing with such things, you can venture out on your own, but I highly recommend devroot, as it takes all the guess work out of it, and makes life rather simple in this regard. Once devroot and Micromon are set up, you can get to working on Emerald Boot, you will need these environment variables set, I put them in a file, and run source My_Env_Vars when I need them from the devroot shell.
 +
 +
export ARCH=arm
 +
export TARGET_MACH=LF_TS_LF1000
  
[http://www.elinux.org/Didj_UART_Boot_with_Linux_Host  UART Boot Didj with Linux]
+
export KERNELDIR=~/path/to/sources/kernel/linux-2.6
  
[http://www.elinux.org/Didj_Boot_From_UART UART Boot Didj with Windows]
+
export PROJECT_PATH=~/path/to/sources
 +
 
 +
export ROOTFS_PATH=~/path/to/sources/target/didj-rootfs
 +
export RELEASE_PATH=~/path/to/sources/target/release
 +
export TFTP_PATH=~/path/to/sources/target/tftp
 +
export EROOTFS_PATH=~/path/to/sources/target/erootfs.stage
 +
 
 +
if you move your emerald-boot/ you may need to change a few of these. You will also need to have compiled the LX kernel in the source tree, as Emerald Boot draws a few things from it. It doesn't have to be a working one so much as just a run through the compiling process. [[Didj_Build_Environment | Build Environments]] is a good place to get started on how to build a kernel.
 +
 
 +
Once you got everything in place, you will need to make a few changes to the Emerald Boot sources, two files specifically to enable it run after being sent over UART. Makefile and startUp.S need a few changes made to them, to get Emerald Boot to compile correctly and load after being sent over UART.
  
 
== Under Windows ==
 
== Under Windows ==

Revision as of 20:38, 7 November 2010

State of Affairs

UART boot looks to be working as expected now. Next step is to compile a working bootloader. Lightning-boot for the didj seems to be the most likely candidate at this moment.

Getting Started

This how-to will show you how to gain UART Boot access to your Explorer. This involves a hardware hack not for the faint of smd soldering skills, or eye sight. There is two connections that need to be made to some pads that are very very tiny, takes some soldering skills, so be prepared. Also being a hardware hack, there is there is a chance of breaking something important, be careful and be warned.

How tiny are the pads? Here is a comparison of a normal resistor vs the pads you will be soldering to.

Leapster Explorer-D6 comparison.jpg

Notice that the width of the pad is the same size as the stripe on the resistor. If you don't feel comfortable soldering something this small, this mod might not be good for you to attempt.

Programs Needed

Devroot Handy tool for setting up Codesourcery to build Emerald Boot

Micromon Used to send EB over UART and executing it

Software Needed

Emerald Boot Source Found in the LF-Linux-* archive

Hardware

DJHI or similar cartridge for access to UART console

Soldering Iron (with very tiny tip)

Wire (very fine gauge)

2x 10K Ohm Resistor

2x Switch or jumper pins

On Explorer

Pictures SD[13] and SD[6] show the pads you will be working with. Take your 4 pieces of wire and strip a small amount of insulation off one end of each, and solder one to each pad shown, watch your heat and where the tip is, so as not to destroy the pad or unsolder the component next to it. A magnifier would be a good idea here. Then on one of the wires, of the two to be connected together, attach the resistor and on the other the switch, then solder the resistor to the switch. Add a dab of hot glue or some other means of strain relief, put back together and you are done. To test, hold down both buttons, while you turn on your Explorer, nothing should happen. Try it with out holding down the buttons, to verify your Explorer still works.


SD[13] LX SD13 UART Enable.jpg

SD[6] Leapster Explorer-D6 Pull Down.png


Example:

D6hack.jpg

Bootloader

Technically this isn't a UART boot, what will be happening is, once Emerald Boot is compiled, the Micromon application will be used to load the bin file onto the LX in RAM, where Micromon will then execute the code and start Emerald Boot loading. The reason for this is Emerald Boot is too big to load over UART since it can range from 40 to 80+KB in size, and the Pollux SoC will start running the code sent to it over UART at 16KB. Lightning boot on the other hand, easily meets the 16KB limit and will often times need extra padding to trigger the Pollux UART boot start up.

To get started, get yourself the Emerald Boot source linked above, the Micromon program and the devroot environment. Devroot sets up the codesourcery build environment, if you know what you are doing with such things, you can venture out on your own, but I highly recommend devroot, as it takes all the guess work out of it, and makes life rather simple in this regard. Once devroot and Micromon are set up, you can get to working on Emerald Boot, you will need these environment variables set, I put them in a file, and run source My_Env_Vars when I need them from the devroot shell.

export ARCH=arm
export TARGET_MACH=LF_TS_LF1000
export KERNELDIR=~/path/to/sources/kernel/linux-2.6
export PROJECT_PATH=~/path/to/sources
export ROOTFS_PATH=~/path/to/sources/target/didj-rootfs
export RELEASE_PATH=~/path/to/sources/target/release
export TFTP_PATH=~/path/to/sources/target/tftp
export EROOTFS_PATH=~/path/to/sources/target/erootfs.stage

if you move your emerald-boot/ you may need to change a few of these. You will also need to have compiled the LX kernel in the source tree, as Emerald Boot draws a few things from it. It doesn't have to be a working one so much as just a run through the compiling process. Build Environments is a good place to get started on how to build a kernel.

Once you got everything in place, you will need to make a few changes to the Emerald Boot sources, two files specifically to enable it run after being sent over UART. Makefile and startUp.S need a few changes made to them, to get Emerald Boot to compile correctly and load after being sent over UART.

Under Windows

Under Linux