Card Services for Linux is a complete PCMCIA support package. It includes a set of loadable kernel modules that implement a version of the PCMCIA Card Services applications program interface, a set of client drivers for specific cards, and a card manager daemon that can respond to card insertion and removal events, loading and unloading drivers on demand. It supports ``hot swapping'' of PCMCIA cards, so cards can be inserted and ejected at any time.
This software is continually under development. It probably contains bugs, and should be used with caution. I'll do my best to fix problems that are reported to me, but if you don't tell me, I may never know. If you use this code, I hope you will send me your experiences, good or bad!
If you have any suggestions for how this document could be improved,
please let me know (
Copyright (c) 1998 David A. Hinds
This document may be reproduced or distributed in any form without my prior permission. Modified versions of this document, including translations into other languages, may be freely distributed, provided that they are clearly identified as such, and this copyright is included intact.
This document may be included in commercial distributions without my prior consent. While it is not required, I would like to be informed of such usage. If you intend to incorporate this document in a published work, please contact me to make sure you have the latest available version.
This document is provided ``as is'', with no explicit or implied warranties. Use the information in this document at your own risk.
The current major release of Card Services is version 3.0, and minor updates or bug fixes are numbered 3.0.1, 3.0.2, and so on.
Source code for the latest version is available from
hyper.stanford.edu in the
/pub/pcmcia directory, as
pcmcia-cs-3.0.?.tar.gz. There will usually be several versions
here. I generally only keep the latest minor release for a given
major release. New major releases may contain relatively untested
code, so I also keep the latest version of the previous major release
as a relatively stable fallback; the current fallback is 2.9.12. It is
up to you to decide which version is more appropriate, but the
CHANGES file will summarize the most important differences.
hyper.stanford.edu is mirrored at
sunsite.unc.edu (and all
sunsite mirror sites) in
If you do not feel up to compiling the PCMCIA drivers from scratch, pre-compiled drivers are included with current releases of most of the major Linux distributions, including Slackware, Red Hat, Caldera, and Yggdrasil, among others.
This code should run on almost any Linux-capable laptop. Most common PCMCIA controllers are supported, including Intel, Cirrus, Vadem, VLSI, Ricoh, and Databook chips. Custom controllers used in IBM and Toshiba laptops are also supported. PCMCIA card docks for desktop systems should work as long as they are the type that plugs directly into the ISA bus, rather than SCSI-to-PCMCIA or IDE-to-PCMCIA adapters.
CardBus bridge controllers that conform to the ``Yenta'' register specification (including TI, Cirrus, SMC, O2Micro, Omega Micro, and Ricoh chips) are supported, though support for 32-bit CardBus cards is still somewhat experimental. Drivers prior to version 3.0 only support 16-bit cards in CardBus sockets. Due to the rapid pace of technological change for laptop hardware, new controllers appear frequently, and there may be delays between when a new model appears on the market, and when driver support becomes available.
The Motorola 6AHC05GA controller used in some Hyundai laptops is not supported. The custom PCMCIA controller in the HP Omnibook 600 is unsupported.
The current release includes drivers for a variety of ethernet cards,
a driver for modem and serial port cards, several SCSI adapter
drivers, a driver for ATA/IDE drive cards, and memory card drivers
that should support most SRAM cards and some flash cards. The
SUPPORTED.CARDS file included with each release of Card Services
lists all cards that are known to work in at least one actual system.
The likelihood that a card not on the supported list will work depends on the type of card. Essentially all modems should work with the supplied driver. Some network cards may work if they are OEM versions of supported cards. Other types of IO cards (frame buffers, sound cards, etc) will not work until someone writes the appropriate drivers.
Unfortunately, they usually don't pay me to write device drivers, so
if you would like to have a driver for your favorite card, you are
probably going to have to do at least some of the work. Ideally, I'd
like to work towards a model like the Linux kernel, where I would be
responsible mainly for the ``core'' PCMCIA code and other authors
would contribute and maintain drivers for specific cards. The
SUPPORTED.CARDS file mentions some cards for which driver work is
currently in progress. I will try to help where I can, but be warned
that debugging kernel device drivers by email is not particularly
Manufacturers interested in helping provide Linux support for their products can contact me about consulting arrangements.
I used to maintain a database and mailing list of Linux PCMCIA users. More recently, I've turned my web page for Linux PCMCIA information into a ``HyperNews'' site, with a set of message lists for Linux PCMCIA issues. There are lists for installation and configuration issues, for different types of cards, and for PCMCIA programming and debugging. The Linux PCMCIA information page is at http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html. Users can request email notification of new responses to particular questions, or notification for all new messages in a given category. I hope that this will become a useful repository of information, for questions that go beyond the scope of the HOWTO.
There is a Linux mailing list devoted to laptop issues, the
``linux-laptop'' list. For more information, send a message
containing the word ``help'' to
subscribe, send a message containing ``subscribe linux-laptop'' to the
same address. This mailing list might be a good forum for discussion
of Linux PCMCIA issues.
The Linux Laptop Home Page at http://www.cs.utexas.edu/users/kharker/linux-laptop has links to many sites that have information about configuring specific types of laptops for Linux (and PCMCIA). There is also a searchable database of system configuration information.
For me, distributing binaries would be a significant hassle. It is complicated because some features can only be selected at compile time, and because the PCMCIA modules are somewhat dependent on having the ``right'' kernel configuration. So, I would probably need to distribute precompiled modules along with matching kernels. Beyond this, the greatest need for precompiled modules is when installing Linux on a clean system. This typically requires setting up PCMCIA so that it can be used in the installation process for a particular Linux distribution. Each Linux distribution has its own procedures, and it is not feasible for me to provide boot and root disks for even just the common combinations of drivers and distributions.
PCMCIA is now a part of many of the major Linux distributions, including Red Hat, Caldera, Slackware, Yggdrasil, Craftworks, and Nascent Technology.
Well, first of all, it isn't actually that large. All the driver
modules together take up about 200K of disk space. The utility
programs add up to about 70K, and the stuff in
about 30K. When running, the core PCMCIA modules take up 48K of
system memory. The
cardmgr daemon will generally be swapped out
except when cards are inserted or removed. The total package size is
not much different from DOS Card Services implementations.
Compared to DOS ``point enablers'', this may still seem like a lot of overhead, especially for people that don't plan on using many of the features of PCMCIA, such as power management or hot swapping. Point enablers can be tiny because they generally support only one or a small set of cards, and also generally support a restricted set of PCMCIA controllers. If someone were to write a genuinely ``generic'' modem enabler, it would end up incorporating much of the functionality of Card Services, to handle cards from different vendors and the full range of PCMCIA controller variants.