Category Archives: Things with linux insde

Let’s get serial!

During my telnet visits to the Parrot AR.Drone i wondered what all the serial ports (/dev/ttyPA0..2) are for. And now I know which one is used by what and where i can find them on the board.

The pinout for a USB cable can be found at the official Parrot website….here.

/dev/ttyPA0 is used by the bootloader and the kernel and can be found on the “USB” port (Pin 4 is RX and Pin 6 is TX) and greets us with:

Restarting system.
Parrotboot for target MYKONOS, built on Apr 21 2010
NAND: layer initialization
NAND: found 8 bits nand 0xf1
UBI: layer initialization (version 1)
UBI: found volume with id 2147479551
UBI: found volume with id 0
UBI: found volume with id 2
UBI: failed to open volume with ID 1 (Bad file handle)
Attempt booting on UBI volume with ID 0…
Booting Linux…

This serial interface should allow us to attach a GPS module (with a TTL level serial interface) directly, without the need of a new kernel! GPS here we come! :-)

/dev/ttyPA1 is used to interface with the motor controllers. There must be some de-multiplexer between the serial port and the 4 motor controllers. I actually managed to randomly start a motor by typing garbage into this.

/dev/ttyPA2 connects to the navboard and continously spits out navdata from all sensors.


The Parrot AR.Drone GPL saga continues….

After Parrot finally released the GPL sources for their kernel changes it was time to dig into the firmware some more. Last week i was taking a closer look at the closed source control binary which has the innovative name “program.elf”.

It turns out that the binary dynamically links to libiw (from the wireless_tools) which is a GPL licensed library. You can easily check this yourself by telneting into the drone:

strings program.elf | grep iw
libiw.so.29
iw_sockets_open
iw_get_basic_config
iw_set_basic_config
iw_in_key_full

Antoine Ferran (from Parrot) confirmed this fact on the next morning:

The libiw is dynamically linked with the program but it is a mistake.
Libiw is not needed anymore: it is a remnant of a previous test version.
Any calls to libiw has been removed from the current build that will be released soon.

You can find the complete discussion here.

I am pretty confident that they will not get away with that and will have to release the source code. Actually that could be a really good way for Parrot to get help from the community to fix all of the critical bugs in the current firmware (“fly-away” syndrom, random crashes, ….) and make a much better product! :-)