Installing Debian Linux on a Pentium-M mini-ITX SBC
Jan 22, 2004 — by LinuxDevices Staff — from the LinuxDevices Archive — 11 viewsThis article explains how to install Debian Linux on a Lippert Thunderbird mini-ITX motherboard based on a Pentium-M processor. Though not specifically an embedded project, it does involve a form-factor — mini-ITX — that's increasingly popular with embedded device and system developers. And, it involves an operating system — Debian Linux — that is the third-most popular source of Linux among embedded developers. Additionally, the project presented obstacles similar in nature to those faced by embedded Linux developers working with any board with relatively new chipsets. Thus, the techniques used — and lessons learned — in this process may be useful to many developers of embedded systems.
Lippert's Thunderbird mini-ITX motherboard
The Thunderbird is available in an actively cooled version with a 1.6GHz Pentium M processor, and a passively cooled version with a 1.3GHz processor. Both support Linux, but do not come with a Linux board support packages. This article discusses the former, but should apply mostly to both.
The Thunderbird's architecture is similar to that of Centrino laptops, with an 82855GME Northbridge and an ICH4 Southbridge. Despite its low clock speed, the Mobile Pentium is a very fast chip, on par with P4's clocked much higher. Like Centrino laptops, the board integrates a mini-PCI slot “compatible with any mini-PCI card,” according to Lippert, including WLAN cards, modem cards, and several mini-PCI bridge cards from Lippert, including firewire, serial hubs, and, for true embedded projects, disk-on-chip.
Initially, I hoped to use the Thunderbird with an LCD module — the board features a single/dual-channel LVDS supporting LCDs up to UXGA resolution (1600 x 1200) with 18/24-bit color, according to the specification sheet. However, I soon learned that setting up an LCD is something of a black art, with very little standardization of interfaces, cables, or components, and very little information available about recent LCDs from Asian manufacturers. I am forced to conclude that LCDs are not the domain of hobbyists. (Little wonder that VIA does not offer its LVDS-equipped mini-ITX board to the general public).
Lippert offers the Thunderbird standalone or in a kit with a low-profile PC2700 512MB SDRAM module from Siemens and a CPU. The board supports up to 1GB of SDRAM, although I found I had to manually set the BIOS memory speed to 266MHz in order to get a 1GB module from GigaRAM to work.
Other parts I used include:
- Inexpensive 2.5 x 10.5 x 11.5 in. Morex mini-ITX case with 55w external power brick and DC-DC converter — $30 on eBay
- Toshiba MK5024GAY — claimed to be the first 7200rpm laptop (2.5-inch) drive. 50GB, ATA100, 16MB cache… $220 or so. Check Pricewatch.com.
- desktop floppy drive borrowed from an old Pentium 120 — used only for initial install
- neat floppy ribbon connector cable supplied by Lippert
- desktop to laptop hard drive adapter
- round blue ATA/133 cable — the nice yellow ribbon cables supplied by Lippert had 39-hole connectors, and my adapter needed 40.
- DVD/CD-R combo drive, $120 on eBay, with adapter
The cheap non-DMA cable didn't work (later replaced with stylish round blue one)
(Click for larger view)
Installing Debian
The most recent kernel available in Debian's bootfloppies
series is the 2.4.18 kernel found in the bf24
image series. I downloaded the rescue, root, and driver disks and copied them to floppies by typing dd if=rescue.bin of=/dev/fd0 bs=1024 conv=sync; sync
(on another Linux system).
Temporary desktop floppy drive
Lippert provided a nifty ribbon cable that interfaces with a pinch clamp on the underside of the board and with a desktop floppy drive. I used this cable to temporarily attach a desktop floppy drive. The Thunderbird's BIOS also provides the option of booting from a USB floppy drive.
I partioned as follows:
Device Boot Start End Blocks Id System
/dev/hda1 * 1 3 24066 83 Linux (/boot)
/dev/hda2 4 368 2931862+ 83 Linux (/)
/dev/hda3 369 430 498015 82 Linux swap (swap)
/dev/hda4 431 6081 45391657+ 5 Extended (logical)
/dev/hda5 431 1159 5855661 83 Linux (/usr)
/dev/hda6 1160 6081 39535933+ 83 Linux (/home)
The install proceeded uneventfully, except that neither of the Lippert's two Intel ethernet controllers are supported by the 2.4.18 kernel. I needed the e100 driver, added in kernel 2.4.20 or so, or the e1000, added sometime later. I poked around the 'Net until I found someone who'd run across the same issue. I wrote to him, and within minutes received a driver someone had sent him, an e100 driver backported to 2.4.18. This worked fine, and enabled me to proceed with a network install.
After the base system had been installed, I rebooted the system from the hard drive. At this point, I edited /etc/apt/sources.list, changing all the Debian mirror references to point to the unstable
branch of Debian, which I've generally found to be stable enough for use on a desktop system, where you want to closely track the rapid pace of Linux application development.
Next, I typed apt-get update
and apt-get dist-upgrade
to update all the software in the minimal base system to the latest versions. I then used apt-get
to install some development tools and some basic utilities.
The next order of business was installing and setting up XFree86.
The X Window system
Naturally, the 855GME graphics chip was too new to be supported by the 4.2.1 release of X in the latest Debian. I saw a few random debs in various places that seemed like they might work, but I decided to build X from source. X has really become quite easy to build of late, although it still takes as long to compile as several kernels.
I got the latest source from CVS, and X built fine on the first try, using the defaults in the INSTALL-X.org file. It worked okay using the vesa driver (I didn't try the 810 driver), although not at the UXGA resolution supposedly supported by the GME855. Also, the speed was quite poor, with xterms frequently unable to smoothly scroll the output of verbose tar extracts and that kind of thing. This all changed dramatically for the better when I build a 2.6.0-series kernel with support for MTRR, AGP, DRI, and several options specific to the 855GM chip series.
With the custom kernel, the system video can only be described as stellar. You can, for example, use mplayer to decode MPEGs of Lance Armstrong winning his fifth Tour de France scaled to full-screen resolution, while compiling kernels in the background, without any jerkiness to speak of at all. UXGA resolution (1600 x 1200) is supported with 24-bit color, and looks great.
Here's another example of how fast this graphics chip is: a file that takes 18 seconds to cat
on a vesa framebuffer console takes just 1.4 seconds to cat in an xterm at the same resolution. In fact, xterms are not that much slower than a VGA console running in real mode: 1.12 versus 0.394 seconds.
As for 3D performance, glxgears
runs just under 12 frames per second at UXGA resolution (1600×1200), and much faster at more normal gaming resolutions — about 60fps on a lightly loaded system at 800×600.
Note: when using a custom X build on Debian, you have to let the package management system know X is present or it won't let you install any nice programs like Mozilla that depend on it. This should be accomplished with the equivs
package. Another approach is to simply run make install
again from your X source directory any time that the package manager installs X-related packages. (After re-installing your custom X build, remember to edit /etc/X11/xinit/xinitrc unless you really do prefer twm over, say WindowMaker.)
Special 2.6 filesystems
In order to take advantage of kernel 2.6's sysfs
, usbfs
, and ramfs
filesystems, I added the following lines to /etc/fstab:
sysfs /sys sysfs defaults 0 0
none /proc/bus/usb usbfs defaults 0 0
none /mnt/ramfs tmpfs defaults 0 0
IDE drivers
At least one other thing improved dramatically with the new kernel: buffered disk reads. Out of the box, with the 2.4-series kernel from the bf24 boot floppies, I was only getting about 3MB/sec for buffered disk reads, according to hdparm -t -T /dev/hda
.
After building a kernel with specific IDE chipset support for the ICH4, and adding "idebus=66" to the append line in my lilo.conf and re-running lilo, I got a ten-fold improvement, about 35MB/sec for buffered disk reads and upwards of 1GB/sec on buffer-cache reads. It is probably possible to improve performance further using the hdparm
utility, since both board and drive support ATA100.
Sound
At first, I was very pleased with my initial 2.6.0 kernel, in part because it was built on New Year's Day. However, the 2.6.1 kernel brought major ALSA bug fixes for the 810 audio chipset (which is what the Thunderbird has onboard), so I upgraded to that. Both OSS and ALSA drivers for sound now work fine (before, the ALSA drivers produced scratchy sound).
It's important to build ALSA drivers as loadable modules, rather than building them into the kernel, for various reasons. I got them to load at boot time by adding this line to /etc/modutils/alsa: alias snd-card-0 snd-intel8x0
, then running update-modules
.
PCI slot
The Thunderbird has a PCI slot, but it supports only 3.3V PCI cards. I could not get the board to boot with any of my stray PCI cards installed -- perhaps they are all older 5V cards. Lippert says it will release in February several riser cards, one of which provides two 3.3V slots, and the other of which supports two 5V cards through voltage scaling circuitry.
Power Management
The 2.6-series kernel provides several frequency scaling modules for the Pentium M processor and for ICH4-based systems, but I could not get any of these to work, so far. The kernel modules produce errors when loaded, requesting that /proc/cpuinfo data be sent to the module maintainer.
Other random notes
The BIOS supports ACPI S1 & S3. Typing echo 1 /proc/acpi/sleep
powers down the drive, and the system wakes up just fine. However, doing the same with a "3" results in a system lockup. Possibly, I need to load some ACPI module(s) first.
S4 is supported by the SWSUSP feature in the 2.6 kernel, and this works fine. Since the system boots in 29 seconds (22 from the boot prompt), though, there isn't much incentive to use it.
USB works great, although, I don't have any USB 2.0 devices to try. Serial, parallel, and IrDA remain untested, although the drivers load without complaint.
The board has a 10-pin serial connector, and Lippert supplies a ribbon cable with a second serial connector (the first is attached to the board).
The final (tiny, barely audible, fast) system
Conclusion
The Lippert Thunderbird is the fastest system board I personally have ever used. It can compile the 2.6.1 kernel and 493 modules in 20 minutes. How it can be so small, and so fast, draw so little power (55W power supply!), and still basically be a normal x86 system is wondrous to me.
There's plenty of tweaking left to do, but the installation has been painless considering the newness of the chips.
It's great to see the new Linux kernel working so well on bleeding edge hardware, and it's great to see a really fast system available in the increasingly popular mini-ITX format.
Finally, in the grand tradition of "I installed Linux on an XYZ system" Web pages, here are links to my kernel .config and XFree86Config files. Please let me know if you do better. Also, let me know if you get an LCD/LCD wiring kit/inverter working with this board!
About the author: Henry Kingman has used Debian at home and work since the days of "Hamm." His previous desktop system was a 2U SuperMicro server with cheerful popcorn SCSI disks, a Pentium-II 450, and many large, screaming-fast cooling fans. Affectionately known as "the airplane" for its impressive noise and draft, this imposing black machine was bought at Be, Inc.'s dotcom auction for $150, and formerly hosted the Tracker development Website.
.
This article was originally published on LinuxDevices.com and has been donated to the open source community by QuinStreet Inc. Please visit LinuxToday.com for up-to-date news and articles about Linux and open source.