The Beagleboard xM – for most, all the computer your robot needs
Note – Bottom of the page is the more recent content (currently I have a patchset for kernel 3.11-r2 that enabled 1 GHz the RIGHT WAY)
For many a hobbyist robot, one or more Beagleboard xM’s will serve as an inexpensive embedded computing solution, and at a fraction of the energy envelope required for laptops or netbooks. It runs Linux and all of its cool new software, and supports almost all the hardware that desktop variants of Linux do. However, at the moment, there is a bit of a dilemma when using it. As most of the people who own an xM well know, you can’t use the current version of the Linux kernel if you want to utilise the full clock frequency of 1 GHz. At the moment, for the latest versions of Angstrom and Ubuntu, two of the favorite operating systems for the xM, it is locked at 800 MHz, a whopping 20% slower than maximum. For me, I just couldn’t let that go.
Earlier this year (2012), the Robotics Society at UC Merced, a club trying to bring robotics to every student who shares the love of everything electrical and mechanical, and a club I am heavily involved with, built a robot to enter in Robomagellan at Robogames 2012 last year. For information about that, see kybernetes. We decided to use a Beagleboard xM in our robot, mainly because we wanted to experiment with ARM based computers and I have had a wonderful experience with my Beaglebone. I initially discovered this problem when I tried to set up the computer in April. At the time I didn’t have time and just dealt with it and figured that someone would fix it before I started the next semester, but nope – so I am going to take it on.
I have based my work off Robert Nelson’s stable kernel build scripts (https://github.com/RobertCNelson/stable-kernel). These scripts build a current version of the Linux kernel with patches to fix some known issues with the kernel on the beagleboards that have not yet made it upstream – issues such as the USB PLL clock problem which causes the Beagleboard xM’s usb ports to crash randomly. This now gives me a working kernel for the Beagleboard xM to work with. As I am new to kernel development, I started with searching the web to try and get a better understanding of my problem. As it turns out, Angstrom supports the XM at 1 GHz on the 3.0.x kernel, although at this point its pretty old. 3.2 was standard last April. I happened across a blog which provided a custom buildroot system for the beagle board xm that included modules and software to support some video capture hardware that was connected to the camera capture header on the board. However, for me, the most notabile thing was that the board was clocked to 1 GHz on a 3.2.7 kernel. In the build scripts I discovered some patches which adjusted a software lock on the frequency and modified some clocking settings. I integrated this into my fork of the stable-kernel repository (https://github.com/Teknoman117/stable-kernel) and built it for armhf, since the operating system I will be using is Ubuntu 12.04-r5 for armhf. And well what do you know? The board booted up happily running at 1 GHz. I ran the hardinfo suite of benchmarks and the performance increased about ~18% over the same xM board clocked at 800 MHz.
However its not quite there yet. After some email exchanges between Robert Nelson and myself, turns out my implementation is a bit dangerous, but a step in the right direction. At least for the Beagleboard xM, the automatic voltage scaling doesn’t work properly in the kernel so this can decrease the lifespan of your Beagleboard xM. The guys at TI and those that work on Angstrom had used a suite of TI patches to get that to work, making it safe to run the board at 1 GHz. I got the link to all the patches on the topic in the Angstrom repository, but there are A BUNCH of them. Something like 148 or so, and they are all a few hundred lines long, which kind of explains why no one has done it yet. It will be a lot of tedious work to get them all ported to a current kernel. So I know what my free-time project for the next while is, but I will periodically update my fork of stable-kernel with the ported patches. Basically, the goal is to get them into kernel 3.4.x, because it is more current, although 3.6.x is on the fourth release candidate.
So here we are almost a year later. The waning summer of 2013, dang time goes so fast. Its been more than a year since we could all run our beagleboard xMs safely at a 1 GHz. With the upcoming 3.11.x kernel, we get the new Texas Instruments adaptive body bias drivers which finally allow 1 GHz operation safely on all omap devices. Some modification is required, and the process is described in this post: https://teknoman117.wordpress.com/2013/07/24/beagleboard-xm-1-ghz-operation-safely-and-reliably/
I’ve done my job – the upcoming kernel now has beagleboard xM 1 GHz support.
– Nathaniel Lewis