Tuesday, November 18, 2008

Triple-Boot Sony Vaio VGN-AR Notebook - Part I: RAID Uncoupling

I needed a portable development machine that would let me triple-boot XP, Vista, and Ubuntu.

So far, not a problem - but here's the kicker: it also needs a PCMCIA Type II (CardBus) slot. I occasionally code for a dated interface which, for laptops, is only available in PCMCIA. Unfortunately, PCMCIA has almost entirely been replaced by ExpressCard. As far as I can tell, in late 2008 you can get it on a few expensive Dells, a few of Acer's low-end Extensas - and Sony's Vaio VGN-AR series.

These Vaios had a lot of other things I liked, including a nice big 17" screen, and dual SATA drives. Woohoo - different drives for different OS's!

So I got a lightly used VGN-AR290G from eBay, and then found something out...

Those dual hard drives? They're hooked up to an Intel hardware RAID controller, and by default are configured as RAID 1. The upshot?
  • You can install Vista.
  • You can also install the custom, pre-slipstreamed version of XP Media Center Edition that comes with it - but that's not what I need for development
  • You can't install plain old XP Pro, because it doesn't see any disk drives.
  • Ubuntu sees both disk drives, and appears to install, but doesn't boot. That's because Ubuntu attempts to install as non-RAID, and then when you boot, the GRUB bootloader is all confused.
There are instructions online for getting Ubuntu installed onto RAID, and somebody claims to have gotten it to work with the 290G with dual boot, but I didn't have much luck. It would rock to have the speed of RAID0 on this thing, but I decided it would be simpler to uncouple the RAID.

And that, as usual, is easier said than done. But to save you the time I spent figuring it out, here's the recipe:
  1. Reboot the laptop.
  2. When the Sony logo comes on the screen, hold down the F2 key. You can let up when the laptop starts beeping at you. After a few seconds, this will bring you into the BIOS utility.
  3. Go to BIOS utility's Advanced tab and switch RAID Configuration to Show (if it's not set to that already). Then save the BIOS configuration and exit. The laptop should now reboot.
  4. You should now see more boot messages, and eventually get to a screen that shows you the disk configuration. During the few seconds this is up, hold down the Ctrl and I keys at the same time. This should switch the computer into the RAID editor utility.
  5. In the RAID utility, from main menu, choose the option to Reset Disks to Non-RAID. Save the configuration and exit.
The most common sequence for setting up an XP/Vista/Linux triple-boot is to partition the drive(s) with gparted, then install XP, Vista, and Linux in that order. But alas, after all this, XP Pro still didn't recognize the hard drives. So I just installed Ubuntu 8.10, since that was my most pressing need, and it now works fine.

My guess is that I'll have to slipstream the RAID driver onto the XP Pro install CD, but that's a job (and a post) for another day.

Monday, October 27, 2008

Coding Eye-Candy for Portable Linux Devices

At ACCESS, I've had the opportunity to do interesting things with Linux on cell phones. Some modern ARM chips, such as the Marvell XScale and TI OMAP series, have unusual frame buffer architectures that let you do "eye candy" on the cheap, without requiring a GPU.

In July 2008, I presented a paper about this work at the Ottawa Linux Symposium. I was also supposed to give it at GUADEC in Istanbul, but wasn't able to attend, so David "Lefty" Schlesinger gave it for me there.

If you are interested, here are links to:
  • The paper itself, which is somewhat academic in tone
  • The PowerPoint presentation based on the paper, which is more informal
  • A movie showing this in action on an XScale-based Zylonite prototype system, with narration by yours truly
As of the date of this post, I'm in the middle of porting this system to an OMAP 3430-based system.

Monday, October 20, 2008

Open Source Builds For Newbies

Introduction

If you build open source software, you'll run into a lot of variants of the following list of commands:
cd (some directory)
./configure
make
sudo make install


Some common variants replace the ./configure with ./autogen.sh, or add some extra stuff on the end of that line or the make line. This article explains what's going on with this kind of command sequence.

Makefiles

If you look at most programs and other software components whose purpose is not trivial, they're made from more than one source file. There are several ways to tell a computer how to put all those source files together to create a component, and the most common is called a makefile. (There are also various kinds of project files that are used with development systems like Microsoft's Visual Studio, or Metrowerks' CodeWarrior.)

The Bad Old Days

The problem with makefiles is that they can need different contents to account for different computers and operating systems and compiler systems. For example, you might need one makefile for Linux on an x86 computer with version 3.4 of the gcc compiler, another for the same system using gcc 4.2, yet another for a Sun workstation running Solaris, and yet another for Mac OS X.

Up through the mid 1990s, the normal way to cope with this was to supply a different makefile for each combination of hardware, operating system, and compiler. That often meant a dozen or more makefiles. And if you had an unsupported combination, you had to write your own makefile.

Also, many software components rely on other software components, mostly known as libraries. But people work on libraries, so they change over time, and it's possible to get mismatches. For instance, if you write a program that works with PNG images, you'll probably want to use the "libpng" library. But there are different versions of libpng, and in the old days, if you wrote your program to work with one version, and somebody got your source code and tried to build it with a different version of libpng, the build might have failed, or the program might not have worked right. And makefiles have no reasonable way to check to see if you have the right version of a library.

The Good New Days

Several tools solve this whole problem - these are called the GNU Autotools, and pkg-config.
  • The GNU Autotools create the configure file, which is a set of commands that builds a makefile for your particular computer, operating system, and compiler collection.
  • Then the configure file typically uses pkg-config to make sure you have the right versions of any libraries you need, and complains if you don't.
What Each Step Does
  1. cd (some directory) makes that directory the current one.
  2. ./configure runs the configure script in that directory. That checks your operating system, compiler, CPU, and what libraries you have installed. If everything is okay, it creates a makefile in that same directory.
  3. make gets information from the makefile to build your software component
  4. sudo make install takes the component you built at the make step, and installs it where it needs to go on your computer to be useful.
For more information
Here are links about: