venerdì 3 dicembre 2010

Beagleboard xM power in my hands!

I received my Beagleboard xM: yay!! Below, I will describe exactly what happened here in the last hours.
For the impatient: just look to bold text.

First, an RS232 port for debugging. I have a spare USB-to-rs232 adapter. After plugging it, I saw a new entry in /dev/serial/by-id pointing to ttyUSB0 so I started minicom in a Terminal and setup it to 115200/8/N/1 using port /dev/ttyUSB0 and connected the 9-pin "Cannon" connector to the Beagleboard xM (note: I did not yet power the Beagleboard!)

I also wanted to see some video output (if available): I plugged in the Beagleboard xM my great DLP Pico Projector.

Then I powered up the Beagleboard (using an USB cable). LEDs lit, but nothing appears on the DLP. A few random bytes on the serial port and then a "Cannot open /dev/ttyUSB0!!" message. It appears that my USB-to-RS232 adapter doesn't like my local USB hub. Unplug and replug it directly to my Linux tablet, verify that it is again /dev/ttyUSB0 and restart minicom being sure that is configured for 115200 on that port.

Woah! it boots! text appars in the minicom window:

Texas Instruments X-Loader 1.4.4ss (Aug 19 2010 - 02:49:27)                 
Beagle xM Rev A                                                             
Reading boot sector                                                         
Loading u-boot.bin from mmc

A few seconds after, it starts Linux kernel. I see that the X-Loader says it's a "xM Rev A" while the actual label on my Beagleboard xM says "B" instead. Maybe this is a "will-be-fixed-on-next-xloader-release" thing...

I also see that my version has 256Mb spare NAND-flash, like my three Beagleboard C2/C4; not all Beagleaboard xM have the extra NAND (I did not expect a "xM rev B" having 256Mb NAND). I welcome this feature, as it will leave me doing some extra experiments.

Alas, my Beagleboard continuously reboots after some 40-45 seconds Linux kernel started. This happens also after disconnecting the DLP Pico. I grabbed a "two-headed" USB-to-USBmini cable but then I got no messages after "Uncompressing Linux...done, booting the kernel".

Next, I used two 5V batteries and the "two-headed" cable, and I finally got the login prompt. The "continuous reboot problem" (here happened at about 40 seconds of the kernel logging output) is actually a low power condition.
Just switch to an external 5V stabilized power supply or juicy 5V batteries.

I tried some hardware (another USB-to-RS232 adapter, an Huawei UMTS modem, an Hercules webcam, etc) but did not get the corresponding entries under /dev even if the kernel sent the correct syslog messages. The "demo image" on the 4Gb microSD supplied with the Beagleboard xM is a actually a... "demo image!" (that 4Gb microSD has some 3735Mb free unformatted space). Time to try some other Linux distribution... and a good power supply! So I gave the "halt" command but... the heartbeat LED continued flashing even after the kernel says "system halted" :-)

Add to wish-list: the heartbeat LED should stop flashing after the "system halted" kernel message.

Then I downloaded the Ubuntu 10.10 for ARM (the preinstalled image). Download and guidelines are on "Maverick 10.10 install". It worked flawless. Then, after reboot, I see:

Texas Instruments X-Loader 1.4.4ss (Sep 30 2010 - 14:44:32)                 
Beagle xM Rev A                                                             
U-Boot 2010.09-rc1 (Sep 23 2010 - 11:20:00)
OMAP3630/3730-GP ES2.0, CPU-OPP2, L3-165MHz, Max CPU Clock 1 Ghz
OMAP3 Beagle board + LPDDR/NAND
Beagle xM Rev A
Die ID #6b
## Booting kernel from Legacy Image at 80000000 ...

At the first boot it worked some minutes to resize the default 2Gb to a full 4Gb partition (automatically rebooting soon after). Then it started the graphical environment.

I found a few problems:
1) it didn't enable serial port for debugging (after "Loading kernel... OK" nothing more appeared)
2) it didn't support correctly the DLP Pico projector (see photo above: only "first quarter" of the screen)
3) it did not configure xM ethernet port
4) it did not have native development tools
5) it did not have neither setserial nor minicom
All of these were solved: read below.
Currently I tested an Huawei E156G (works, and it worked also on old Angstrom one year ago on a Beagleboard C2), an Hercules Classic Webcam (yay! it did not work on Ubuntu 9.10 for x86, it now works on Ubuntu 10.10 both on ARM and on x86; stream and camorama came in handy!), a Netgear Navilock GPS NL302U (it is seen as a PL2303 USB serial), and even a Silicon Power 4Gb USB pen-drive :) without problems.
Problem 1: solved!
Use another Linux PC to access the Beagleboard xM root filesystem on the microSD, and create the file /etc/init/ttyS2.conf containing these lines:

# my ttyS2 getty configuration file:

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

exec /sbin/getty -8 115200 ttyS2
Be sure to have this parameter when loading the kernel (must edit boot.scr: see below)
console=ttyS2,115200n8 serialtty=console
Problem 2: solved, but...

DLP Pico projector expects 640x480 video (actually it is a 480x320 pixels physical resolution, I wonder if it can be driven to original resolution instead of adapting a 640x480 input).
Ubuntu Netbook for ARM processors expects a screen a little larger than 640x480; it will work at 640x480 but icons/menus alignment will be a bit less than elegant.
You must change the OMAP framebuffer mode for DVI port to 640x480 with 24 bits per pixel at 60 Hz refresh. That is, the bootargs for Linux kernel will have to contain this parameter instead of the "1280x720" one:

Read here (Ubuntu/ARM editing boot.scr) to know how to change it.
Note: by default Ubuntu Netbook Remix does not install an ssh server. I had to manually command apt-get install openssh-server to enter via ssh instead of RS232 terminal.
Problem 3: solved!
For some unknown reason, the Ethernet port of the Beagleboard xM is called usb0 instead of eth0 (already signaled on Launchpad). While this is not a big deal (just ifconfig it or configure NetworkManager and it'll work), there is another problem: its "MAC" (Medium Access Control unique address: the 48-bit address uniquely identifying its hardware) is casually chosen by the Linux kernel at every reboot/reload. Maybe it could be assigned based on the unique die-ID of the Beagleboard (the one printed in the output messages at boot before loading Linux).
Add to wish-list: the Linux kernel should call "eth0" the Beagleboard xM ethernet port (instead of "usb0"), assigning it an unique MAC-address (or letting the user choose one). On my Nokia N900, for example, I created an /etc/modprobe.d/g_nokia.conf (the usbnetworking module of the N900) containing a fake MAC:
options g_nokia host_addr=f7:f7:f7:f7:f7:f7
allowing me to use NetworkManager feature to select different route/DNS/address ("Wired / Device MAC address") when the N900 is connected to my Linux PC ("f7 f7 f7..."). I expect this feature soon ported (if not already) to Ubuntu as well.
Problem 4: solved!
Trying to install gcc shows this funny message ("pentium" builder on an Ubuntu/ARM distro? heh!):
The program 'gcc' is currently not installed.  You can install it by typing:
apt-get install pentium-builder
You will have to enable the component called 'universe'
The Angstrom distribution, instead, had all native development software/libraries available (that is: you can edit and compile Beagleboard software using the Beagleboard CPU and diskspace).
Solved, solved! After a large 120+Mb network upgrade (apt-get update && apt-get upgrade) I was able to do apt-get install gcc g++ and verify that they can natively compile C/C++ sources in ARM-executables ready to use.
Problem 5: solved!
A number of programs, while not strictly x86-dependent, is not part of the Ubuntu/ARM 10.10 Maverick (Netbook Remix) Linux distribution, most notably: gpsd, minicom, setserial, motion, cnetworkmanager...
Solved! The "universe" component was disabled by default (the Ubuntu/ARM Netbook Remix only allowed Canonical supported software, no community-supported packages). Just launch Synaptic package manager from System / Preferences menu, and then enable "universe" in the Preferences / Repositories. Then click on the "Reload" key on the left (or use sudo apt-get update on command-line).
I had an old gpsd compiled in the Angstrom Linux and it worked OK with my Netgear Navilock NL-302U GPS. The NL302U has an USB port featuring a PL2303 interface (working under Linux since ages). To use it in Ubuntu, I had to disable the /usr/bin/modem_manager (which tries to use every serial port as a modem): I renamed it to .bak and rebooted (you can only kill -9 it but at next reboot it would restart...).
If you don't like to use synaptic, if you want to see if your favorite software is available in Ubuntu/ARM Netbook Remix, you can apt-cache search it. For example:
apt-cache search postgresql
and then you can:
apt-get install postgresql
If still some programs appear "installable" but "not locatable", for example:
root@beagleboardxm:~# cnetworkmanager
The program 'cnetworkmanager' is currently not installed.  You can install it by typing:
apt-get install cnetworkmanager
You will have to enable the component called 'universe'
root@beagleboardxm:~# apt-get install cnetworkmanager
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package cnetworkmanager
Then it means you did not yet enable that "repository universe" thing explained above.
Final notes.
1) To have my Beagleboard run my command-line software at every boot, I just modified the /etc/rc.local script (beware: it is executed with root privileges). You can also use the System / Preferences / StartupApplications to choose graphical programs to start at boot. Also remember to disable the password check after screen sleep (System / Preferences / PowerManagement / ACPower / PutDisplayToSleep:NEVER; remember also System / Preferences / Screensaver / Activate and Lock options) if you plan to do some interaction without a keyboard. Example: after plugging in a webcam, I added a script which does streamer -s 640x480 -o grabbedimage.jpeg and then parsed the grabbed image, and called the script from the rc.local file. I could even add the command: DISPLAY=:0.0 eog -f img.jpeg to show it in the full-screen DVI output of the Beagleboard (remember to kill the eog when you don't need anymore!).
2) Maintenance: I installed vino-server to access the graphical desktop of the Beagleboard when no monitor is connected. I can then access it either with Remote Desktop Viewer (vinagre) from Linux, or with TightVNC for Windows XP. Beware: it is quite slow, especially when using wifi instead of ethernet. Using ssh -X lets you use X11 software on a remote desktop (that is: program runs on the Beagleboard but its graphical output goes via ethernet to your Linux PC from where you were connecting): this is quite faster than using a "remote desktop" solution. The ssh -X solution is especially good if the Beagleboard was set with 640x480 screen (which is somewhat little for a Netbook Remix featuring the Unity desktop); for example, the gnome-screensaver-preferences panel doesn't fit in the 640x480 with standard-sized fonts of the default installation.
3) RAM usage: apparently the full Ubuntu/ARM Netbook Remix works well in 256Mb RAM, because aven after some work, I saw more than 200-250Mb free RAM. 512Mb RAM may be too little for an OSX or Windows installation, but appear to be reasonably large for any Linux system (at least you don't open 45 tabs in your latest Firefox browser!)
4) Disk speed: while the supplied Kingston 4Gb microSD is decent, it is a pain in the ass to work with the graphical environment. The 130+ Mb packages update took a lot of time. Most of the time the system is busy waiting for the microSD to complete read/write.
5) Disk usage: after some extra installations (browsers, libraries, and so on) I see about 1.4Gb free space out of the "almost 4Gb" microSD supplied with the xM. I will backup the microSD using gunzip < /dev/sdf >microsdimage.gz on my Linux PC (this operation is not good to do on a mounted microSD partition!).
I am quite happy with Ubuntu 10.10 on my Beagleboard xM. While it appears a bit slower than Angstrom Linux on Beagleboard C4 (because Angstrom is optimized for ARMv7, while Ubuntu/ARM is optimized for ARMv4 level and doesn't feature graphical acceleration drivers and DSP stuff), it has practically all bells and whistles found in the Angstrom (when I will need performance, I will try Angstrom again).

9 commenti:

  1. Extra hints...

    1) it appears "slow" because the supplied Kingston 4Gb microSD is not that fast... :-)

    2) maybe I should test something like modprobe g_ether host_addr=00:01:02:03:04:05 at boot.

    3) I did not tell (in the title of this page) that I am now happily running Ubuntu/ARM Maverick 10.10 Netbook Remix on my Beagleboard! wow!! :-)

  2. Ubuntu Maverick is also optimized for ARMv7, but it's slower because of the larger disk footprint and current kernel state. Angstrom uses an older kernel, with PM and overclock by default.

  3. Hi!
    Is it possibile to watch a video 1080p on this board?
    On the beagleboard site, I've found out the possibility to watch a video with the XBMC. If I could watch a fullhd video by connecting this board on my tv, it would be great! :D

  4. More info on Beagleboard may be found here: GoogleGroup Beagleboard.

    In sintesi: alcuni dicono che non è possibile, altri dicono che ci si può provare. Certo che il 1080p è assai impegnativo.

  5. Two months running Ubuntu 10.10 Netbook Remix.

    Yep, its clock is still 600MHz (Ubuntu/ARM 10.10 does not yet support 1GHz), but my Beagleboard xM gets the job done (d'you see those lots of "GPS" data in my twitter feed? it's my Beagleboard xM tweeting in real-time its position and some other data while running far from me, using a 3A 12V to 5V adapter, and sending lots of SQL data to a remote database... Wow! :-)

  6. hello..I have a problem.. when i am configuring Ubuntu Maverick 10.10 netbook on the beagleboard-xm it is taking some 17HRS..yes you heard right 17hrs! what do you think is happening? thanks

  7. Many hours is normal (because of the slowness of the memory card and the install progress).

    I think you can get more help on Beagleboard googlegroup:

  8. I also have the beagle-xm rev B. It also says 256MB of NAND. Have you found this to be real or is u-boot confused? People say the rev B is not suppose to have onboard NAND, but I am able to save my u-boot environments by doing 'saveenv' in uboot and the settings do stay. I am very interested in your experience with the xm rev B nand.


  9. Yes,

    if you saveenv and after reboot you find the saved values, then it must be NAND... :-)

    By the way, without NAND, the boot parameters can be stored in the *.scr files. The additional cost for the NAND only has a meaning for a full NAND file-system.

    256Mb NAND could be useful for a very trimmed Linux distribution in order to use the SD-card as external storage only (or "not having the SD card" for tight physical space reasons). But it appears that only a very few people used it that way.

    The reason why some NAND appeared is that Coley and others had to buy different parts from different distributors.