LeapFrog Pollux Platform: OpenLFConnect

OpenLFConnect is a Python and sg3_utils based replacement application for the LeapFrog LFConnect program. For Explorer and LeapPad it can use their dftpdevice to upload firmware. It also manages uploading the surgeon.cbf file for USB boot recovery mode and is capable of enabling sshd on both devices. For Didj it can mount the USB drive, copy firmware over, and send the eject command that will attempt to start flashing the firmware.

WARNING: This program attempts to flash new firmware, has the ability to make and delete, upload and download, files could be destroyed, firmware flashing could go wrong. There is no prompts for second chances. Make sure you understand what you're doing, and use fresh batteries or an A/C adapter during updating.

Downloads
https://github.com/jrspruitt/OpenLFConnect

Requirements
Windows or Linux compatible

LFConnect (Windows only)
 * You'll need the ethernet driver for LeapPad or Explorer.
 * Should be able to uninstall the main application and keep the driver?

sg3_utils
 * Included for Windows, common on many Linux distro's

Python 2.6
 * Needs win32api for Windows.

Windows
Extract archive or clone git repo to a location of your choice.

Make sure Monitor.exe is disabled, which can be done via Task Manager, before plugging a device in, this is the program that auto starts LFConnect. Or permanently stop it by deleting the regkey:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Monitor

Didj
You'll need to assign the Didj' USB Disk a drive letter as LFConnect will have assigned it another mount point instead. The letter you pick doesn't matter, as long as it doesn't conflict with something else. Plug your Didj in and then go to Disk Management, depending on what version of Windows it should be something like:

Administrative Tools > Computer Management > Disk Management

Right click the drive, and select Change Drive Letters and Paths click Add and assign the letter.

LeapPad and Explorer
Plug your device in and turn it on. You should see an icon in the Start Bar about trying to connect, if not go to Network Connections, right click and choose status. Then properties, scroll down to TCP/IP click on its properties, and make sure to set a static IP. Unless your device is set to a non standard IP, it will be on the 169.254. subnet. OpenLFConnect uses 169.254.0.1, you can change that in OpenLFConnect.py or at run time.

Static IP: 169.254.0.1 Broadcast Mask: 255.255.0.0

Linux
Extract archive or clone git repo to a location of your choice.

You'll have to decide if you want to run OpenLFConnect.py with sudo or not. If you do not want to, you will need to copy the OpenLFConnect/src/udev_rules files to /etc/udev/rules.d/ The Mass_Storage rules are for all 3 devices. Didj in normal use and LeapPad, Explorer in USB Boot mode. The create a persistent generic SCSI device name /dev/leapfrog that is set to allow regular users permission to use.

Make sure the rule is owned by root:root and set to permission 644.

Didj
Other than the udev rules there is nothing to configure for Didj. One issue that may arise on your system, is Linux won't unmount when the didj_eject command is run. Didj will get the command, but you will have to unmount the drive in Nautilus or the command line for it to happen. The didj_umount command fails to work at all on Linux because of this.

LeapPad and Explorer
Plug your device in and turn it on, then check

System > Preferences > Network Connections

If you see Auto Eth1 open up its properties and got to the IPv4 tab, on the Methods drop down pick Link Local.

If you do not see the Auto Eth1 or something similar, you can copy the udev rules for Net to /etc/udev/rules.d/ This will trigger avahi-autoipd on plug in, and assign an IP address to the interface. This is basically what Network Manager does when set to Link Local.

Make sure the rule is owned by root:root and set to permission 644.

General
From a terminal or the command prompt run OpenLFConnect.py this will bring up the python command line. In windows you can also double click on the file.

The basics are very similar to the Linux command line, and once first started, you will be able to navigate around the local filesystem. Some examples

This changes the directory local>cd files/LX

This lists a directory's contents local>ls files/Didj

To get a full list of commands type help. For instructions and information on what each command does and if it needs an argument with it or not, type help

It should be noted, that you can delete directories and files, with out any pompting. Make sure you double check before doing so. And remember to pay attention to the command line prefix: This means you are on the host computer and the commands will take action on it. local> command arg This indicates you are about to run a command on the device. remote> command arg

The two exceptions to this rule are upload and download which will switch locations on their own and switch back once done. So no matter if its remote or local, upload /path/to/file will always take /path/to/file and try and upload it to the device, in the current directory you are in on it. The opposite is true for download.

The current directory is maintained on an individual basis. So you can switch between remote and local, and you will stay in the same place. The cwdl and cwdr commands Current Working Directory Local and Current Working Directory Remote respectively, can be used to check what that path is, regardless of the command lines current location.

General
Once Didj is plugged in and turned on, you run: local>didj_mount Mounted on /dev/Didj

This will obtain the location the Didj is mounted on. You should see a new window pop up with the contents, or it show up in your file browser, depending on the OS used. For general purpose looking around, its far easier to use the OS's file browser. But if you would like to run an update of the firmware or bootloader, OpenLFConnect can make it rather painless.

Updates
Preperation OpenLFConnect comes with a directory called files/, inside you'll find the Didj/ directory, its a convenient place to keep your firmwares. Bootloader Make a directory called bootloader-LF_LF1000. Put your lightning-boot.bin and bootflags.jffs2 (optional) into it.

Firmware Make a directory called firmware-LF_LF1000. Put your kernel.bin and erootfs.jffs2 files into it.

In OpenLFConnect navigate to the location of these files. You can be one above, or just inside the one you want to update. If you are going to do both, you must be in the parent directory of both of them.

Depending on what you want to do, update just the bootloader, just firmware, or both, there is a command for each.

Update both with change to directory. local>cd /Didj local>ls bootloader-LF_LF1000 firmware-LF_LF1000 local>didj_update

Update Firmware using the path argument. local>didj_update_firmware Didj/

Update Bootloader with path argument local>didj_update_bootloader Didj/bootloader-LF_LF1000

It will take a second for the command prompt to come back after the files have transferred and eject command sent. If on Linux eject the device now. Once ejected the Didj screen should change, it will say "Learning new tricks" Then "Disconnect Now". Once you do it will shutdown. Turn it back on and plug it in. run: local>didj_mount local>didj_update_cleanup

This removes the file to prevent unwanted firmware flashes if the eject command is sent again. If everything went okay your files will have been flashed to the Didj and you can now use it.

General
There are a few things worth doing with OpenLFConnect and your Explorer. You can send a surgeon.cbf file, or any kernel and or initramfs you want to test that has been converted to cbf (script included in sources). You can run firmware updates, there is a convenience function for enabling sshd, or you can use it like a basic ftp browser. There are commands for uploading and downloading, along with basics, cd, ls, rm, rmdir, and mkdir.

Connect

Plug in your Explorer to the USB and turn it on. Depending if its booted or not this command could take a few seconds to run. local>dftp_connect Device:		Explorer Firmware Version:	1.3.4-2044 IP:			169.254.3.208 DFTP Version: 		1.8

OpenLFConnect makes a best guess about which device is connected by the Major Firmware Version in this case 1, is Explorer, if it was 2.0.2.2044 or something like that, it would assume you connected a LeapPad. You can manually configure most all settings, to attempt to get around issues arising from custom firmware.

Examples

Get help for each command local>help command

Change to remote device local>remote remote>

Change to local from remote remote>local local>

Make a directory remote>cd /tmp remote>mkdir NewDir remote>ls NewDir/ temp.socket temp.file remote>local local>ls etc/ bin/ home/ var/ usr/

Handling of Paths

One thing to note, other than upload and download, the generic commands run on what ever the command line prefix says it is set to, remote or local, caution when you are deleting something, to double check where you're located. The paths are persistent so remote doesn't change when you switch to local and vice versa. Basically remote or local, just tells OpenLFConnect which path to use for a given command. Anytime you want to check a particular one. Run one of these commands:

Check local path remote>cwdl D:\Programs\OpenLFConnect\files\LX remote>cwdr /LF/Bulk

Enable sshd
!!!I don't have a LeapPad to test on, so this section is theoretical for the LeapPad implementation, but it is pretty basic Linux stuff, and shouldn't cause catastrophic damage if my guess is wrong. If someone is willing to risk it, please let me know if it worked or not, so this feature can be less theoretical and more confirmed.!!!

This command will upload two files from OpenLFConnect/files/[Lpad|LX]/enable_ssh/ rcS and sshd_config, they are stock files, except for what is necessary to enable the sshd server on start up. This command is a hard coded convenience feature it needs to find the files in those spots. It will also, pick which directory based on what it determines your device to be, LeapPad or Explorer. It is basically just using the upload function, so if you require something a little more fancy, that is what you should use.

Turn the device on and plug in the USB cable. local>dftp_connect ... device info ... remote>enable_sshd remote>dftp_reboot

If your device does not reboot, go ahead and switch it off, then back on. I generally wait for a few seconds after the second jingle that it make before attempting to reconnect, as it will take a minute or so for a newly enabled sshd server to generate the necessary keys. dftp_connect might time out if you try and connect right away.

On Linux you can install the service-discovery-applet since the Explorer uses avahi to announce to the network certain services, sftp is one of them. Then go in Places>Networks and you should see it available.

Login

Username:root

Password:[blank]

Upload Download
OpenLFConnect also provides the ability to upload and download files to and from the device. There is no check if the file exists or not, and they will be over written if so, so be careful. Upload and Download are different in that they don't care if you are set to remote, or local. They handle all that in the background.

Download takes a remote path argument to a file, and will download it to the current local directory.

Upload takes a local path argument to a file, and will upload it to the current remote directory.

Example Connect to the device local>dftp_connect ... device info ...

Set the remote directory to where the file you want to download resides in, switch back to local and navigate to where you want to save it. Then download.

remote>cd etc/ remote>local local>cd LX/temp local>download vsftpd.conf local>ls vsftpd.conf Set your remote directory to where you want the file to be put, then upload a local file using the path argument.

remote>cd ../etc/avahi/ remote>upload ../../user/scripts/avahi-autoipd.action remote>ls avahi-autopid.action

Update
Preparation Create a directory called Firmware-Base/ and load it with the firmware files. These files must be named as they are, as the name has significance to the flashing process. The first number is the NAND address in decimal to flash to, and the second is the size of the partition in packets, which the packet size is 131072. Check [Leapster_Explorer#Technical_Information] for the partitions numbers.

1048576,8,FIRST.32.rle 2097152,64,kernel.cbf 10485760,688,erootfs.ubi

You will also need a surgeon.cbf file, this will be sent to the Explorer while its in USB boot mode, and establishes the necessary systems for the flashing process.

Once you got your firmware ready, plug in the device hold down both shoulder buttons and the ? button while turning it on, then run: local>boot_surgeon /path/to/Explorer/surgeon.cbf

Connect to the device local>dftp_connect

It will take a few for the device to boot up, you will then have the command line back. And can start flashing your files. remote>dftp_update /path/to//Firmware-Base

It will print out the file its uploading and say when its done, it will say it skipped any files that were not present, like if only kernel.bin was in your directory.

Once done uploading reboot the device. remote>dftp_reboot

You can now unplug the USB cord, or otherwise let it boot normally. You can connect again if you like, and browse around too.

LeapPad
!!!I don't have a LeapPad to test on, so this section, minus the generic stuff, is theoretical If someone is willing to risk it, please let me know if it worked or not, so this feature can be less theoretical and more confirmed. But be warned, it could do some SERIOUS damage. So if you know what you are doing, maybe this can be of some assistance in getting there!!!

Another hurdle, is getting the LeapPad into USB Boot mode. I'm not exactly sure how to do this, as the device is missing the buttons used on the Explorer to trigger it.

Update
Preparation The LeapPad is vary similar to the Explorer, but it uses a different structure and flash system for its firmware. The update will look for the files in certain directories and place them in /LF/fuse/firmware/sd/* as needed. The structure looks like this

firmware/sd/raw/1/FIRST_Lpad.cbf firmware/sd/raw/2/kernel.cbf firmware/sd/ext4/3/rfs

You will also need the LeapPad specific surgeon.cbf file, this will be sent to the LeapPad while its in USB boot mode, and establishes the necessary systems for the flashing process.

Once you got your firmware ready, plug in the device hold down both shoulder buttons and the ? button while turning it on, then run: local>boot_surgeon /path/to/LeapPad/surgeon.cbf

Connect to the device local>dftp_connect

It will take a few for the device to boot up, you will then have the command line back. And can start flashing your files. remote>dftp_update /path/to/firmware

It will print out the file its uploading and say when its done, it will say it skipped any files that were not present, like if only kernel.bin was in your directory.

Once done uploading reboot the device. remote>dftp_reboot

You can now unplug the USB cord, or otherwise let it boot normally. You can connect again if you like, and browse around too.