Saturday 1 January 2011

Hacking the Parrot-DF3120 Picture Frame

Some clever people have been working on running Linux on a parrot DF-3120 Picture Frame, as described on http://sites.google.com/site/repurposelinux/df3120.  
The device sounds like a little computer with a colour display, USB connection, SD card and bluetooth wireless (I would have liked a wireless lan, but never mind!).   Most significantly, Amazon are selling them for less than £10, so I thought it was worth getting one to play with.   It arrived very quickly so I started to play with it yesterday.

The instructions at http://sites.google.com/site/repurposelinux/df3120 fall into two distinct parts:

  1. Produce a cross compiler for the board, and use it to compile a Linux kernel, busybox and other things needed to construct a basic root filesystem.  This is all done by a single clever script (minifs).   It actually took a bit of doing to get it to work on my Ubuntu 10.10 system - when it fails you have to look at the log files to see why it has failed.   The most noticeable thing was that I had to install gtk-doc from a source tarball because Ubuntu does not have a package for it - everything else (bison, flex etc.) were installed from ubuntu packages.  
    The script produced an iso image of a root filesystem.
  2. Install a boot loader on the device.   The instructions have you download and compile the u-boot boot loader for the device, and package it into  a false firmware upgrade file (.plf) file.   There is some black magic required to copy the file file onto the device in the right directory etc.
The boot loader installation apparently worked.  If you just switch on the device without touching anything, it boots normally.  If you hold down the centre and left buttons (when viewed from the front of the device) as you power it on, the screen goes blank, which is what the instructions said would happen if u-boot tries to boot linux.
In the 'black screen' mode, connecting the device to my computer creates a /dev/ttyACM0 device, which sounds promising for this being the u-boot serial console.

I have tried using a terminal emulator program to connect to the device via ttyACM0 (picocom /dev/ttyACM0, or cu -l /dev/ttyACM0).  In both cases the program connects without error, but I do not see anything on the display or in the terminal.
The copy of u-boot seems to have come from openMoko, so I tried their wiki (http://wiki.openmoko.org/wiki/U-boot).   It sounds like what I am doing should have worked - tried a few baud rates, but I am getting nothing, rather than gibberish - I think I'll read through the u-boot configuration that I just installed and try to work it out.....

11 comments:

Unknown said...

Did you get this to boot?

I am in the same situation. I have the linux image on ext2 SD card, but it still doesnt boot. I am considering opening the thing to add a serial port so I can watch the boot log...

Anonymous said...

You have to write the img file to the SD card using something like dd in linux. What you've basically done is the same as saving an ISO file to a CD.

Graham Jones said...

Thank you (both?) for your comments. No I did not get it working (just slipped off my 'current projects' list and I forgot about it...).

The answer may well be the way I copied the filesystem onto the SD card - I will have another look into it.

Pup said...

Sorry, the second comment was me.

Someone on HaD mentioned that the minifs.img file when dd'd to the SD card was an EXT3 partition and he had to copy everything off, format to EXT2 and copy it back (I think) before uboot would recognise it and boot up and show the framebuffer with Tux.

Hope that helps.

sistemasorp said...

I wrote an article in spanish explaining how to install linux and access to the shell: http://www.sistemasorp.es/2012/01/19/probando-el-marco-digital-parrot-df3120-parte-1/

1-Format the SD to ext2 using makefs.ext2.
2-Copy the .img file to the SD card using dd.
3-Without the SD card inserted, turn on the frame, connect the usb and create the update folder in the root of the mounted disk. Then copy the .plf file into the directory and quit the usb securely. You will see the four squares.
4-Turn off the frame.
5-Insert the SD card, press the two buttons, turn on the frame and release the two buttons. You will see in a few seconds to Tux.
6-Connect the usb wire to the frame and to your computer.
7-A new ethernet card named Ethernet Gadget will be added to your operating system. Configure it with 172.16.61.2 ip and 255.255.255.0 netmask.
8-Do a telnet to 172.16.61.1 ip and you will have a shell session waiting for commands.

Graham Jones said...

Thanks all - you have got me thinking about this device again. I have just downloaded the pre-built .img filesystem file from https://sites.google.com/site/repurposelinux/df3120 to save getting the cross-compiler working again.
Copied it onto an SD card (which was formatted as FAT32 originally).
I think the .img file is a filesystem, so you should not have to do the makefs.ext2 on it?

Anyway, that works - now boots and displays a penguin, and I have a new wired ethernet device appeared. Will try to do something with it now....

Graham Jones said...

I think I will have to investigate further another day - I get the ethernet device, and configure it to the 172.16.61.2 ip address as you suggest, but I can not see a 172.16.61.1. I suppose the firmware I have got could be using a different ip address - will have to investigate...

sistemasorp said...

Ummm, I don't know what is happening. Try to turn on the frame, wait a few seconds, plug the usb wire and try again to ping that IP. The firmware I used is the same that is published in the web page now.

Markos said...

Thanks for the tips, it helped me out with my frame. Currently I can get it to the step that it is detected as Internet wired device, but I can't telnet yet. I will try to pu some tips soon.

Markos said...

I flashed my frame using plf image and method described on:
https://sites.google.com/site/repurposelinux/df3120
the minifs file from there did not work for me, so I grabbed one from here:
http://www.martinhubacek.cz/arm/df3120-linux-picture-frame
and first formatted my SD card to ext2 (though this may not be neccessary, since dd does bit by bit copy) and then used dd to copy image file to SD card.
umount /media/<card directory.
sudo dd if=minifs.img of=/dev/sdb1
WARNING! dd is dangerous, you need to make sure that you are writing to the correct device. You can use Disk Tool from ubuntu to check it .
Boots well - turn on while holding left and middle buttons.
When connected via USB to the ubuntu linux laptop the "Ethernet Gadget" is detected. You need to edit network settings: configuration: manual, ip: 172.16.61.2, subnet mask 255.255.255.0, gateway 0.0.0.0
Then you can: telnet 172.16.61.1
and the device lets you in.
Type plasma to test the frame, ctrl-c stops the demo.

tempest69 said...

Hello,
great! my parrot now works under linux!
Is there any way to force it to boot automaticaly linux and not to have to press the left&center buttons?
thanks