HOW-TO: Use PCMCIA with e-smith By: J. Scott Smith, simnux Release: 0.1-01, 3 July 2001 ///////////////////////////////////////////////////////////////// Summary \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ This document explains how to use PCMCIA with the e-smith server and gateway. It has been tested with version 4.1.2 and should work with versions 4.1.1 and 4.1. NOTE: Not yet in proper HOW-TO format. That will come later :-) ///////////////////////////////////////////////////////////////// Introduction \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ The e-smith server and gateway does not support PCMCIA "out of the box". This makes e-smith difficult if not impossible to use with most laptop or notebook systems, and the rare desktop or server system that uses PCMCIA devices. Fortunately, because e-smith is based on the Red Hat distribution, it is a relatively simple matter to add PCMCIA support. "Why," you might ask, "would anyone need PCMCIA support? Aren't most PCMCIA cards intended for notebook computers? Who would use a notebook with e-smith?" Well, if you are an e-smith Partner, notebook computers happen to be a great way to give product demonstrations. For example, there's nothing like walking into a potential client's site with two notebook computers, both loaded with Microsoft Windows, and a small network hub. Tell the customer you are going to turn one of the systems into a network server -- during the course of your 30 minute meeting! Start to finish, no smoke, no mirrors. And at the end of the demonstration you'll be connecting to the server with the other notebook. How well does that work? Ten minutes to load the CD, another five or ten to get through a basic configuration, connect the other notebook, and presto chango! Instant small office server. If the client has a phone line handy, hook up the PCMCIA modem and wham! Internet gateway. Eyes pop out and jaws hang slack and agape! With any luck your client will have had experience trying to get similar functionality out of another server platform and will appreciate even more the beauty of the e-smith magic. Are you a home user? Old notebooks make great servers! Built in, well, built in everything. Including a UPS. And they're small, great for tucking away under a desk or in a drawer or in a closet. Just make sure you allow plenty of ventilation, as the little buggers tend to overheat. A notebook as a small business server? Hmm... Possible, of course, and perhaps appropriate for a very small office, but definitely not recommended. ///////////////////////////////////////////////////////////////// Pre-installation conditions \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Use the lspci command to determine the current system status. The output of the lspci command will of course vary from system to system. A Dell Latitude CPx H system sporting a Xircom CardBus Ethernet 10/100 + 56K will be used for examples in this HOW-TO. [root@laptop /root]# lspci 00:00.0 Host bridge: Intel Corporation 440BX/ZX - 82443BX/ZX Host bridge (rev 03) 00:01.0 PCI bridge: Intel Corporation 440BX/ZX - 82443BX/ZX AGP bridge (rev 03) 00:03.0 CardBus bridge: Texas Instruments PCI1225 (rev 01) 00:03.1 CardBus bridge: Texas Instruments PCI1225 (rev 01) 00:07.0 Bridge: Intel Corporation 82371AB PIIX4 ISA (rev 02) 00:07.1 IDE interface: Intel Corporation 82371AB PIIX4 IDE (rev 01) 00:07.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01) 00:07.3 Bridge: Intel Corporation 82371AB PIIX4 ACPI (rev 03) 00:08.0 Multimedia audio controller: ESS Technology ES1978 Maestro 2E (rev 10) 01:00.0 VGA compatible controller: ATI Technologies Inc Rage Mobility P/M AGP 2x (rev 64) Note the CardBus bridge, indicating the OS found the PCMCIA adapter, but does not know what kind of adapter it is. If your installation happens to detect the Ethernet controller (or whatever controller is on your PCMCIA card), then you are a lucky person! You can ignore most of the rest of this HOW-TO. ///////////////////////////////////////////////////////////////// Installing the PCMCIA package \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ The PCMCIA package is installed by downloading and installing the latest Red Hat PCMCIA RPM. There are several ways to do this: * Go to the Red Hat web site and do a site search for the string "kernel-pcmcia" or some variation thereof. This will return many hits, most of which are irrelevant. * Go to the Red Hat web site and find the download page, then use the RPM search to find the string "kernel-pcmcia". I've found this search to be flakey at times, so don't be surprised if the search fails. If so, try the above method. * Go to the Red Hat updates FTP site, updates.redhat.com, and look in the /7.0/en/os/i386 directory for the latest kernel-pcmcia-cs* file. NOTE: The current kernel-pcmcia-cs release as of this writing is: kernel-pcmcia-cs-2.2.19-7.0.8.i386.rpm NOTE: We are using the 7.0 release as that is what e-smith 4.1.2 is based on. If you are using another version of e-smith then you will need to adjust the Red Hat version accordingly, and be aware that some of the specific procedures in this HOW-TO may not be 100% accurate. After downloading the latest PCMCIA RPM, install it on the e-smith server using the command: rpm -Uvh kernel-pcmcia-cs-2.2.19-7.0.8.i386.rpm If you'd like a peek at what the RPM has installed on your system use this command: rpm -qli kernel-pcmcia-cs-2.2.19 | less Or, if you'd like to have that peek before you install: rpm -qli -p kernel-pcmcia-cs-2.2.19-7.0.8.i386.rpm | less ///////////////////////////////////////////////////////////////// Starting pcmcia at init level 7 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ The e-smith server and gateway runs at init level 7. The PCMCIA package configures a startup script in /etc/rc.d/init.d/pcmcia and links it to init levels 0-6. A link must be added to init level 7 in order for e-smith to use PCMCIA. ln -s /etc/rc.d/init.d/pcmcia /etc/rc.d/rc7.d/S45pcmcia NOTE: Using the e-smith upgrade option removes all entries from the rc7.d directory. This will result in the S45pcmcia link being lost and the pcmcia drivers will not start on boot. ///////////////////////////////////////////////////////////////// Checking PCMCIA status \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Reboot the system. If everything is working properly you should see the "Starting pcmcia" message and hear a sequence of two beeps. This means the PCMCIA drivers are loaded. NOTE: For troubleshooting please refer you to the PCMCIA HOW-TO, which is located in: /usr/share/doc/kernel-pcmcia-cs-2.2.19 The purpose of this HOW-TO is to help you get e-smith working with PCMCIA, not to do troubleshooting for the PCMCIA package. Login as root and check the PCMCIA card status. The following capture shows the output from the sample system. [root@laptop /root]# lspci 00:00.0 Host bridge: Intel Corporation 440BX/ZX - 82443BX/ZX Host bridge (rev 03) 00:01.0 PCI bridge: Intel Corporation 440BX/ZX - 82443BX/ZX AGP bridge (rev 03) 00:03.0 CardBus bridge: Texas Instruments PCI1225 (rev 01) 00:03.1 CardBus bridge: Texas Instruments PCI1225 (rev 01) 00:07.0 Bridge: Intel Corporation 82371AB PIIX4 ISA (rev 02) 00:07.1 IDE interface: Intel Corporation 82371AB PIIX4 IDE (rev 01) 00:07.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01) 00:07.3 Bridge: Intel Corporation 82371AB PIIX4 ACPI (rev 03) 00:08.0 Multimedia audio controller: ESS Technology ES1978 Maestro 2E (rev 10) 01:00.0 VGA compatible controller: ATI Technologies Inc Rage Mobility P/M AGP 2x (rev 64) 20:00.0 Ethernet controller: Xircom Cardbus Ethernet 10/100 (rev 03) 20:00.1 Serial controller: Xircom Cardbus Ethernet + 56k Modem (rev 03) ## now we have Ethernet and serial controllers, ## compliments of the PCMCIA card drivers! [root@laptop /root]# cardctl status Socket 0: 3.3V CardBus card function 0: [ready] function 1: [ready] Socket 1: no card [root@laptop /root]# cardctl config Socket 0: Vcc 3.3V Vpp1 3.3V Vpp2 3.3V interface type is "cardbus" irq 11 [exclusive] [level] function 0: io 0x0200-0x0287 [32bit] function 1: io 0x0200-0x0287 [32bit] Socket 1: not configured [root@laptop /root]# cardctl ident Socket 0: product info: "Xircom", "CardBus Ethernet 10/100 + Modem 56", "CBEM56G", "1.03" manfid: 0x0105, 0x0103 function: 6 (network) Socket 1: no product info available If your system doesn't come up with any controllers, you'll need to do a litte troubleshooting. ///////////////////////////////////////////////////////////////// Linking the PCMCIA modules \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ The e-smith configuration system expects to find Ethernet modules in the /lib/modules/*/net directory, where * represents the kernel release number. If you look in /lib/modules you'll see four directories. The one we're interested in is the one without either "e-smith" or "smp" in the name. The kernel release is 2.2.16-22 on the example system. In order for e-smith to find the PCMCIA modules we need to link them into to same directory with the other modules. Only the files ending with _cs.o or _cb.o need to be linked. To link the files, do the following from the root login: MODS="/lib/modules/2.2.16-22" cd "$MODS/pcmcia" for MOD in *_c[sb].o do ln -s "$MODS/pcmcia/$MOD "$MODS/net" done ///////////////////////////////////////////////////////////////// PCMCIA ins and outs \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ It may be necessary to tweak some files before we can use the PCMCIA card automagically. There are several files that are of interest to us. /proc/pci The kernel's listing of the PCI bus. The data in this file is best queried by the lspci command, and relies on the following file to interpret the findings. /usr/share/pci.ids Contains a listing of PCI vendor and device IDs, subdivided into sub-vendor and sub-device IDs, with a description at each level. This list must remain in sort order, so be very careful when modifying it. /etc/pcmcia/config A table of the various supported PCMCIA cards. /usr/share/kudzu/pcitable A lookup table of vendor and device IDs, along with the supporting module and a description. This is the file that everything except e-smith will use. /etc/e-smith/pcitable This is a duplicate of the file in /usr/share/kudzu, but with an "local" changes. In the e-smith 4.1.2 release, the only difference is that the 3ware RAID controller module is defined. The e-smith hardware detection routines will use the most recently modified of these two files. The first thing to do is to query /proc/pci to determine what kind of PCI devices you have, and specifically how the PCMCIA adapter is listed. The following output shows how to do this: [root@laptop /root]# lspci 00:00.0 Host bridge: Intel Corporation 440BX/ZX - 82443BX/ZX Host bridge (rev 03) 00:01.0 PCI bridge: Intel Corporation 440BX/ZX - 82443BX/ZX AGP bridge (rev 03) 00:03.0 CardBus bridge: Texas Instruments PCI1225 (rev 01) 00:03.1 CardBus bridge: Texas Instruments PCI1225 (rev 01) 00:07.0 Bridge: Intel Corporation 82371AB PIIX4 ISA (rev 02) 00:07.1 IDE interface: Intel Corporation 82371AB PIIX4 IDE (rev 01) 00:07.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01) 00:07.3 Bridge: Intel Corporation 82371AB PIIX4 ACPI (rev 03) 00:08.0 Multimedia audio controller: ESS Technology ES1978 Maestro 2E (rev 10) 01:00.0 VGA compatible controller: ATI Technologies Inc Rage Mobility P/M AGP 2x (rev 64) 20:00.0 Ethernet controller: Xircom Cardbus Ethernet 10/100 (rev 03) 20:00.1 Serial controller: Xircom Cardbus Ethernet + 56k Modem (rev 03) ## the line we're interested in is the Ethernet controller ## so let's ask for a verbose listing of just that entry [root@laptop /root]# lspci -v -s20:00.0 20:00.0 Ethernet controller: Xircom Cardbus Ethernet 10/100 (rev 03) Subsystem: Xircom Cardbus Ethernet 10/100 Flags: bus master, medium devsel, latency 64, IRQ 11 I/O ports at 0200 Memory at 60013000 (32-bit, non-prefetchable) Memory at 60012000 (32-bit, non-prefetchable) Expansion ROM at 6000c000 [disabled] Capabilities: [dc] Power Management version 1 ## more info than we needed, but that is our card ## let's get the numeric values instead [root@laptop /root]# lspci -vn -s20:00.0 20:00.0 Class 0200: 115d:0003 (rev 03) Subsystem: 115d:1181 Flags: bus master, medium devsel, latency 64, IRQ 11 I/O ports at 0200 Memory at 60013000 (32-bit, non-prefetchable) Memory at 60012000 (32-bit, non-prefetchable) Expansion ROM at 6000c000 [disabled] Capabilities: [dc] Power Management version 1 ## Vendor ID: 115d Device ID: 0003 ## SubVen ID: 115d SubDev ID: 1181 ## ## lspci -s20:00.1 would divine details of the modem on ## this particular card, but we'll stick to Ethernet If the PCMCIA Ethernet device comes up as unknown, you'll need to look at the pci.ids file first. Make sure the device is listed there, and if not you can add it as a local configuration. Here is the section of pci.ids for the example system: 115a Harlequin Ltd 115b Parallax Graphics 115c Photron Ltd. 115d Xircom 0003 Cardbus Ethernet 10/100 1014 0181 10/100 EtherJet Cardbus Adapter 1014 1181 10/100 EtherJet Cardbus Adapter 115d 0181 Cardbus Ethernet 10/100 115d 1181 Cardbus Ethernet 10/100 8086 8181 EtherExpress PRO/100 Mobile CardBus 32 Adapter 8086 9181 EtherExpress PRO/100 Mobile CardBus 32 Adapter 0005 Cardbus Ethernet 10/100 1014 0182 10/100 EtherJet Cardbus Adapter 1014 1182 10/100 EtherJet Cardbus Adapter 115d 0182 Cardbus Ethernet 10/100 115d 1182 Cardbus Ethernet 10/100 0007 Cardbus Ethernet 10/100 1014 0182 10/100 EtherJet Cardbus Adapter 1014 1182 10/100 EtherJet Cardbus Adapter 115d 0182 Cardbus Ethernet 10/100 115d 1182 Cardbus Ethernet 10/100 000b Cardbus Ethernet 10/100 1014 0183 10/100 EtherJet Cardbus Adapter 115d 0183 Cardbus Ethernet 10/100 000f Cardbus Ethernet 10/100 1014 0183 10/100 EtherJet Cardbus Adapter 115d 0183 Cardbus Ethernet 10/100 0101 Cardbus 56k modem 115d 1081 Cardbus 56k Modem 0103 Cardbus Ethernet + 56k Modem 115d 1181 CBEM56G-100 Ethernet + 56k Modem 8086 9181 PRO/100 LAN + Modem56 CardBus 115e Peer Protocols Inc 115f Maxtor Corporation 1160 Megasoft Inc Remember, this is just an ID file. You can add new entries if they are not already there. And there is probably somewhere on to get a most recent version. Next, examine the pcitable files. If the vendor/device ID pair (or the subvendor/subdevice pair) is listed, and the module is "Unknown", change the module to the correct one for the device. If the ID pair is not listed at all, add a new entry. Remember to touch the e-smith version of the file last, so that e-smith will examine it first. Here is the snippet from the example system. 0x1158 0x3011 "unknown" "Voarx R & D Inc|Tokenet/vg 1001/10m anylan" 0x1158 0x9050 "unknown" "Voarx R & D Inc|Lanfleet/Truevalue" 0x1158 0x9051 "unknown" "Voarx R & D Inc|Lanfleet/Truevalue" 0x1159 0x0001 "unknown" "Mutech Corp|MV-1000" 0x115d 0x0003 "unknown" "Xircom|Cardbus Ethernet 10/100" 0x115d 0x0005 "unknown" "Xircom|Cardbus Ethernet 10/100" 0x115d 0x0007 "unknown" "Xircom|Cardbus Ethernet 10/100" 0x115d 0x000b "unknown" "Xircom|Cardbus Ethernet 10/100" 0x115d 0x000f "unknown" "Xircom|Cardbus Ethernet 10/100" 0x115d 0x0101 "unknown" "Xircom|Cardbus 56k modem" 0x115d 0x0103 "unknown" "Xircom|Cardbus Ethernet + 56k Modem" 0x1163 0x0001 "Card:Rendition Verite 1000" "Rendition|Verite 1000" 0x1163 0x2000 "Card:Rendition Verite 2x00" "Rendition|Verite V2000/V2100/V2200" 0x1165 0x0001 "unknown" "Imagraph Corporation|Motion TPEG Recorder/Player with audio" Note that the module for 115d:0003 is unknown. This should be updated to specify the tulip_cb.o module, as follows: 0x115d 0x0003 "tulip_cb" "Xircom|Cardbus Ethernet 10/100" To determine which module to use, check the following file: /usr/share/doc/kernel-pcmcia-cs-2.2.19/SUPPORTED.CARDS Reboot the system after modifying any of the above files. ///////////////////////////////////////////////////////////////// Configuring the Ethernet controller \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Now the e-smith console should be able to locate the PCMCIA adapter and have an associated module to load. Login to the console and try it! ///////////////////////////////////////////////////////////////// Check the PCMCIA docs for more help \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ The files in /usr/share/doc/kernel-pcmcia-cs-2.2.19 may contain pointers for your particular card. You may also want to check the kernel-pcmcia home page (listed in the docs) to see if there is any late-breaking news. For example, the Xircom Ethernet controller does not work after the above configuration. Seaching the docs and home page reveals that the following is needed: ifconfig eth0 promisc ///////////////////////////////////////////////////////////////// Summary \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Hopefully this document will provide sufficient direction to get you up and running with PCMCIA. If you're lucky you'll have one of the support cards, and it will be fully supported. Good luck!