lirc_serial.ko.
This kernel module has to be initialized with the option
type=4 to enable compatibility with Cesko's design.
Selection of a wireless network adapter was something of a problem.
Support in Linux for 54mbits/sec PCI wireless adapters is, in general,
not terribly good. Certain chipsets are well supported, but
if you buy a proprietary card, it's not easy to tell what chipset
it uses. In the end, I bought a Toshiba-branded card from an eBay
seller who was prepared to state that it was based on an Atheros device,
which is one of the few chips that has good Linux
support
(from the madwifi project).
The card has a built-in antenna which, as luck would have it, ended up
rather too close to the metal mass of the built-in speaker for
comfort. In time it may be necessary to extend the antenna wiring
to allow the antenna to be placed outside the case and further
from metal parts; but so far signal strength doesn't seem to be too
badly affected.
The loudspeaker is a bog-standardard 5W unit from Maplin, and the
amplifiers are somewhat modified general-purpose modules from
Cebek (about a quid each on eBay).
The breadbox itself cost ten quid from the local Dunelm Mill. Switches,
cables, connectors, etc., were mostly scavenged from other stuff
that I found in my attic.
|
| Because you can see through the fan vent into the case, I thought it would be more interesting to make a feature of the insides, rather than trying to hide them |
|
| Back view of the breadbox computer, showing the loudspeaker and its switch. The Epia motherboard only provides one audio output, so manual switching is the only straightforward way to allow the headphones to be in use with the build-in speaker off. The motherboard is set in from the back of the case, because most of the IO connectors are routed internally, and there is no need for routine access. |
![]()
|
| Inside the breakbox computer. The fan is mounted on a tray consisting of a perspex plate on a wooden frame. This allows the lid of the breadbox to be removed without any trailing wires. Being perspex, you can see through the tray, and there is an LED UV excitor (right) to make all the wiring glow in the dark |
ext3 since I have found
it quite tolerant of inelegant shutdowns in the past.
/tmp and /var directories are both
mapped to ramdisks, and files in /etc than have to
be writeable are symlinked to files in the writable home partition.
An example of such a file is /etc/resolv.conf, which
is written by the DHCP client when it retrieves the name of a DNS
server from the DHCP server. The /dev files are
also read-only, which presents a problem for software that expects
to be able to write in this directory. An example is the lircd
infra-red receiver daemon, which creates a named socket in /dev
for communication with its clients. It was necessary to recompile this
software to create its volatile files in /tmp instead.
Well-coded applications that use LIRC (e.g., VLC, xmms) aren't affected
by this change, because they all use the LIRC client library, which is
compiled from the same source. Modern Linux distributions use
udev which gets around this problem by constructing the
/dev directories and its devices dynamically at
runtime. However, udev is painfully slow to start up, so
I'm doing things the old fashioned way.
The Linux kernel is the latest available at the time (2.6.31),
compiled to match exactly the hardware in the computer, plus some
USB support. This, again, is to minimize start-up time, as the kernel
doesn't have to waste time searching for non-existent hardware.
To make USB work properly normally requires the overhead of the
USB hot-plug infrastructure but, as it happens, I'm not too bothered
about USB support on this machine, as the motherboard only
supports USB1.1 anyway.
The boot loader (grub, as it happens, but I doubt it
makes much difference) is configured to pass the identity of
a custom init process to the kernel. init
is, in fact, a single shell script which initializes all the hardware,
creates the essential directories under /tmp
and /var, and starts an X session as an unprivileged
user. At the same time as starting X, the `init' script spawns another
script concurrently, which finishes the rest of the initialization,
which can be quite slow (getting network identity from DHCP,
starting the printing service, etc). Since the computer is basically
useable as soon as the X window manager kicks in, the time-to-usefulness
is improved by the doing the initialization this way.
The standard Xorg `vesa' driver works on the Epia boards, and if you install
an ordinary Linux distribution that's probably what you'll get by default.
But VIA provide an accelerated driver for the Epia graphics device, and
using this allows the XV extension to work. XV provides two-dimensional
hardware screen scaling and colourspace conversion, and makes a huge difference
to the quality of video playback. Using VLC and the Via Xorg driver makes
MPEG4 (Divx, xvid) playback a realistic proposition. What you won't
get, on a 500MHz system, is any video post-processing, so the picture can
look a bit rough, particularly with low-bitrate recordings.
icewm, which offers a good compromise
between start-up time, resource usage, and functionality. I don't want the
enormous overheads of running Gnome on a 500MHz system, but there are some
Gnome-based applications which are quite useful in a media player, particularly
the Nautilus file manager. The VLC media player also uses GTK, which is closely
linked to Gnome. Getting these applications to work properly without a
full Gnone session in progress was a bit fiddly, involving a fair amount of
tweaking of configuration files. But it's do-able.
As for media playback itself, xmms, xine, and
VLC all work fine on this machine. mplayer does not work,
at least in any of the binary versions I tried. Most likely these
versions are compiled to take advantage of CPU features that don't
exist on the C3 CPU, but I couldn't be bothered with the hassle of
building it from source. For most purposes I use VLC, which
can handle most audio and video files I have. It also has good
network streaming support, for Internet radio applications.
Unlike xmms
(so far as I can tell), VLC supports Windows Media Player
streams that use the mms: protocol, and it actually works.
This makes it possible to listen to BBC Internet broadcasts, which
are only distributed it Windows Media and RealAudio formats, neither
of which are particularly Linux-friendly.