Linux Device Drivers

APPENDIX

IN THIS APPENDIX

• Determining a Device's Chipset 608

• Locating Drivers in the Linux Kernel 614

• Tracking Down Experimental and Third-Party Drivers 617

• Contributing to Driver Development 620

Part VI

Locating device drivers for Linux can be a challenging task. Most hardware manufacturers don't advertise Linux support for their hardware, in part because the manufacturers themselves don't support Linux. Lack of manufacturer support for Linux doesn't mean that the hardware doesn't work in Linux, however. It does usually mean that you must dig a bit to find out if Linux supports the hardware and, if so, where to find appropriate drivers. This appendix presents an in-depth examination of the process of finding drivers for a device. Information on specific devices, including useful Web sites and peculiarities of device types, appears in the relevant chapters of this book. This appendix is best used if you haven't found drivers after an initial check, and need to dig deeper.

Determining a Device's Chipset

For most expansion boards, including video, sound, Ethernet, SCSI, and software modem boards, the key to locating Linux drivers is knowing what chipset the device uses. The chipset is one or more chips on the product that provide most or all the board's core functionality. Most hardware manufacturers purchase chipsets from other manufacturers, and then slap the chipsets on circuit boards and sell the product under their own names. Although the design of the circuit board and additional features such as ROMs can make a difference in the performance of the product, it's the chipset for which a Linux driver is written.

For some products, the chipset isn't terribly important. Some of these, such as most serial- and parallel-port cards, use highly standardized chipsets, so there's no need to locate special drivers. (Multiport serial cards are an exception to this rule.) Other devices, such as printers and scanners, are complex enough that compatibility is described in terms of characteristics other than a chipset, such as the printer language used by a printer. Some of the chipset-determination procedures I'm about to describe can be useful for these devices, but, in general, you should try to locate drivers based on these devices' model numbers. Check the relevant chapters in this book for details.

As a general rule, the chipset is important for devices you plug into an ISA or PCI slot. For external devices, you should look for drivers based on the device model number or type. Most disk devices (hard disks, floppy disks, CD-ROM drives, and so on) work through a controller in a motherboard or on an expansion card. The disk devices themselves almost never require device-specific drivers.

Asking About the Chipset

People often overlook what is, in hindsight, the most obvious course of action. In the case of identifying a device's chipset, this is generally asking the manufacturer about it. You might not need to actually walk into an office or place a phone call to do this. Manufacturers often make chipset information available on their Web sites or in documentation. In my experience, manu-

Appendix A

facturers of video cards are most likely to do this, but manufacturers of other devices might do it, too.

Unfortunately, some manufacturers treat the chipsets they use as if they were trade secrets. You can sometimes still extract information from other people, but by asking people other than the manufacturer. The contributors to Usenet newsgroups devoted to Linux hardware, or to particular types of devices, can be good people to start with. I recommend searching on Deja News, http://www.deja.com/usenet/, before posting a message. It's stunning how frequently questions about the chipsets used particular products come up in frequently visited hardware newsgroups.

In some cases, manufacturers change the chipsets used on their products without altering the name of the product. You might therefore find that you get a product that's different from what you expect, particularly if you base your expectations on just one or two responses to a Usenet news posting, or to knowledge gleaned from a friend or co-worker. I therefore recommend looking for several responses to a chipset query before making a purchase.

Physical Examination

One way to determine what chipset a board uses is to examine the device. There are usually one or two chips on the board that are distinguished by their large size. These chips are usually the components of the chipset. For instance, Figure A.1 shows an ISA sound card. Its main chip is located near the center of the board. Figure A.2 shows a close-up of this chip, so you can more easily read its markings. This chip is clearly identified as an AMD InterWave chip, part number AM78C201KC.

Note

On most expansion cards, the chipset is composed of a single chip. Motherboard chipsets often include two or more chips, as do the chipsets on some older products. N

Some devices—particularly sound cards—use two separate but interlocking chipsets. < X

Motherboards that include audio, video, or other non-standard functions often do so R EE

by placing independent chipsets on the same motherboard. Some motherboard chipsets incorporate these extra functions, however, which can reduce manufacturing costs.

As a general rule, the chipset name or part number appears in the first line or two of text printed on the chip's surface. Sometimes subsequent lines can be important, however, so if you're in doubt, I recommend you write down everything you see on the chip. Likewise, if you see two chips that are roughly the same size, write down whatever is printed on both of them.

Part VI

Pla Ultrasound

ULTRASOUND® .■ ADVANCED GWMS WUG* PLA* ■ ' COUF-JTER tfCWNOt-OCt I

COPTfSCH( .1999

Figure A.1

As the chip or chips that provide most of a board's functionality, the chipset components are larger than most others on the circuit board.

ULTRASOUND® .■ ADVANCED GWMS WUG* PLA* ■ ' COUF-JTER tfCWNOt-OCt I

COPTfSCH( .1999

Figure A.1

As the chip or chips that provide most of a board's functionality, the chipset components are larger than most others on the circuit board.

Some board manufacturers place stickers over their main chipset parts, as if to lay claim to the chipset. You can safely peel away such stickers to discover whatever's printed on the chip. If you see a clear window underneath the sticker, though, replace the sticker. Such windows appear on some older erasable programmable read-only memory (EPROM) chips. Such chips store important data, such as a motherboard's BIOS. If you expose them to ultraviolet light, you'll erase that data. The sticker is present to prevent accidental erasure. EPROMs are rare on modern components, however; they've been largely replaced by the more sophisticated electronically erasable PROMs (EEPROMs), which have no clear windows.

Caution

Some chipsets—particularly those on high-performance motherboards and video cards—run at fast enough speeds that they require special cooling. These chipsets typically come with heat sinks attached, much like small CPUs. If the heat sink is glued onto the chip, do not attempt to remove it! Doing so might damage the chip, or cause damage later when it overheats.

Appendix A

Figure A.2

Chipset markings typically contain cryptic part numbers and often company names or logos.

Figure A.2

Chipset markings typically contain cryptic part numbers and often company names or logos.

Some manufacturers remove the chipset makers' name and part number from a chip and replace it with their own. If you see the board maker's name silkscreened on a chip, there's a good chance this is what's happened. Some large manufacturers, however, such as Intel, gen- A uinely produce both expansion cards and the chips that go on those cards.

Unfortunately, the names and part numbers printed on chips can sometimes be cryptic. You D U

might need to do a Web search to discover what these chips are. Try entering any names or VD

m ^m part numbers you've found on the chip into search engines, such as those at S<

http://www.yahoo.com or http://www.excite.com. The Deja News site, m

http://www.deja.com/usenet/, can also be a useful search tool. Don't try just the complete part number, but also try truncated versions of it. For instance, instead of AM78C201KC, try AM78C201 and 78C201. (In the case of the InterWave chip depicted in Figure A.2, the string InterWave is most likely to produce helpful results.)

Part VI

Checking Probes in Windows

If the computer runs Windows, you can often find useful information about the chipsets on assorted devices by double-clicking the System icon in the Windows 95 or 98 Control Panel. The System Properties dialog box, shown in Figure A.3, will open. Click the Device Manager tab. You can then expand any device category you like to discover what hardware the device uses. For instance, Figure A.3 shows that the computer uses a Trident CyberBlade i7 video card, a VIA bus master IDE controller, and a Lucent DF software modem.

Figure A.3

The Windows 95/98 System Properties dialog box can reveal a lot about the hardware installed in a computer.

Figure A.3

The Windows 95/98 System Properties dialog box can reveal a lot about the hardware installed in a computer.

Other OSs often contain similar means of revealing the installed hardware. For instance, Windows 2000 provides this functionality through its Device Manager, which you can access from the System Properties dialog box in the Control Panel (see Figure A.4).

One trouble with locating chipset information from a running OS is that the information you find in this way might or might not uniquely identify the chipset. Basically, the information you see in the System Properties dialog box comes from the device's driver. As such, if a manufacturer distributes its own driver, the manufacturer can present its own name in the System Properties dialog box, rather than the name of the chipset manufacturer. This is less likely to be the case if the device uses a driver installed from the OS instead of a driver provided by the manufacturer.

Appendix A

Figure A.4

Windows 2000 presents much the same information as does Windows 95/98 about hardware, but in a slightly different form.

Figure A.4

Windows 2000 presents much the same information as does Windows 95/98 about hardware, but in a slightly different form.

Checking Device Driver Files for Windows

You can examine device driver files for Windows, or for some other OS, for clues concerning the chipset used by the underlying hardware. Unfortunately, there are no guarantees about where you might find relevant information. Possibilities include the following:

• Filenames Driver filenames occasionally include clues concerning the device chipset names. Try doing an Internet search on these filenames (sans extensions) to see if anything turns up.

• Text file contents The contents of text files, such as .inf files, can include chipset names. These names can appear in comments or in device description lines.

• Binary file contents You can use the Linux strings command to extract any plain ASCII that's present in binary driver files. These files can contain a chipset's name. Unfortunately, you' ll have to wade through a lot of irrelevant strings before you come across a chipset name.

One of the problems with extracting device identification information from existing drivers is that it's not always obvious what the chipset name or number is, even when you're looking directly at it. As a general rule, chipsets are identified by numbers, often preceded by a letter or two as a shorthand for the manufacturer name. These numbers sometimes include a C embedded within them. The number string is also often terminated by one or more letters. The

Part VI

InterWave chip depicted in Figure A.2 fits this description. Other chipsets don't bear all these characteristics. For instance, the MX98715 is a Macronix Ethernet chipset. This part number lacks an embedded C and trailing letters, but otherwise fits this description. If you're lucky, you'll only find a few possible strings in the driver files you examine.

Locating Drivers in the Linux Kernel

As a general rule, you want to look for a driver in the Linux kernel after you have identified a device's chipset. In some cases, you might want to search for a driver using the methods I'm about to describe when you've only identified potential chipset names or numbers. For instance, you might have two or three strings you've extracted from visual identification, the Windows System Properties dialog box, or examination of Windows device driver files. You can look for each potential name in turn.

Broad Classes of Driver Support

One method of locating a driver is to start a kernel configuration session and browse the available drivers. You can begin a configuration session with one of three methods, each of which requires that you use a shell prompt in the Linux kernel directory (usually /usr/src/linux):

• make config This method runs a configuration script that asks you about each configuration option in turn. This method is extremely tedious, especially if you want to search for a device driver.

• make menuconfig This procedure starts a text-based kernel configuration menu. You can use the cursor keys, the Enter key, the Tab key, and so on to move around in the menu structure to select configuration options. This method is generally easy to use, and is my preferred method of configuring a kernel from a text-mode login, Telnet session, and so on.

• make xconfig This method starts an X-based kernel configuration session, as shown in Figure A.5. make menuconfig and make xconfig are quite similar in their features, but the latter is usually more convenient if you're running X.

Note

In comparison to the 2.2.x kernel menu, shown in Figure A.5, the 2.3.x kernel menu consolidates some categories as subcategories of other options, thus reducing clutter on the main menu.

Appendix A

i Linux Kernel Configuration

= \A I

Code maturity level options

Token ring devices

Network File Systems

Processor type and features

Wan interfaces

F'artition Types

Loadable module support

Amateur Radio support

Native Language Support

General setup

IrDA subsystem support

Console drivers

Plug and Ray support

Infrared-port device drivers

Sound

Block devices

ISDN subsystem

Additional low level sound drivers

networking options

Old CD-ROM drivers (not SCSI, riot IDE)

Kernel hacking

QoS and/or fair queuelng

Character devices

SCSI support

Mice

SCSI low-level drivers

Watchdog Cards

Network device support

Video For Linux

Save and Exit

ARCnet devices

Joystick support

Quit Without Saving

Ethernet (10 or 100 Mbit)

Ftape, the floppy tape device driver

Load Configuration from File

Apple talk devices

Filesystems

Store Configuration to File

The Linux 2.2.x kernel configuration menu has many option categories.

Figure A.5

The Linux 2.2.x kernel configuration menu has many option categories.

When you select a specific category of hardware, such as Ethernet (10 or 100Mbit), you get a new menu that displays choices relevant to that class of hardware, as shown in Figure A.6. As a general rule, this menu names hardware based on the chipsets' most common names. These names can be numeric part numbers, such as dc21x4x, or "nicknames," such as Tulip or Rhine. Sometimes an option isn't available until you've selected another option. In most cases, you can click the Help button (or choose the Help item if you use make config or make menucon-fig) to read a description of what the driver or option does (see Figure A.7). This description sometimes includes additional information on the chipsets for which a driver can be used.

Searching for chipset support by browsing the Linux kernel is fairly inefficient, but it can be quite informative. By reading a variety of help items or even just browsing device names, you A

can familiarize yourself with Linux's capabilities and supported devices. If you subsequently do more research to find a driver, you might recognize a name from your previous kernel con- N

figuration option browsing, and therefore locate a driver. i x

E EE

Using grep to Find a Driver " E

Linux includes a tool that's very useful for finding a file that contains a particular string: grep. This tool is very powerful, but for the purposes of this discussion, its syntax is fairly simple:

grep [-r] searchstring files

Part VI

Ethernet (10 or 100Mbit) J

P^V

F7!

v n

EISA, VLB, PCI and on board controllers

Help

kv

♦ n J

AMD PCnet32 (VLB and PCI) support.

Help

v m|

♦ n I

Alteon Ace II IC/3 Com 3C985/NetGear GAG20 Gigabit support.

Help

I--' ml

Ansel Communications EISA 3200 support (EXPERIMENTAL)

Help

|vm|

♦ "I

Apricot Xen-ll on board Ethernet

Help

kv

|v m

♦ n J

CS89xO support

Help

|v. m|

♦ n

DM9102 PCI Fast Ethernet. Adapter support (EXPERIMENTAL)

Help

|v. m I

Generic DECchip & DIGITAL EtherWORKS PCI/EISA

Help

\±1

L=m

^nj

DECchip Tulip (dc21x4x) PCI support

Help

♦ n J

Digi Intl. RightSwItch SE-X support

Help

♦ n I

E ther Express Profl 00 support

Help

S

I"

Mylex EISA LNE390A/B support (EXPERIMENTAL)

Help

Exl

Novell/Eagle/Microdyne NE3Z10 EISA support (EXPERIMENTAL)

Help

E2

♦ n J

PCI NE2000 support.

Help

j,

Main Menu

Next Prev

51

|l ,

Each kernel configuration submenu includes a list of specific drivers or kernel options.

Figure A.7

Kernel configuration help often provides useful clues about what a driver or option does.

You should consult the grep man page for more information on additional grep options. The specific components of this command that I've highlighted here are

• -r The optional - r parameter tells grep to perform a recursive search. If you omit this parameter, grep doesn't search subdirectories. If you include this parameter, the program searches all subdirectories specified by the files parameter.

Appendix A

Note

The -r parameter is a recent addition to grep's repertoire. If you try this parameter and it doesn't work, you might need to update your version of grep.

• searchstring The string for which you're searching. For instance, if you want to find drivers for the InterWave chipset, you might use InterWave, Interwave, or interwave as a search string. You might need to try several variants, including strings with variant case, before you find a match. If you want to find a string that includes a space, enclose the entire search string in quotation marks.

• files The files and directories you want to search. From the /usr/src/linux directory, you might want to use drivers as the files parameter, at least if you use the -r parameter. You can use wildcards such as ? and * to search a group of files or directories.

I recommend you search the /usr/src/linux/drivers and /usr/src/linux/Documentation directories for any likely chipset names or numbers. In the case of numbers, you might want to omit leading and trailing letters, because these are often omitted in chipset documentation. As an example, suppose you have in your hands an Ethernet board that uses the MX98715 chipset I mentioned earlier. You might perform the following search:

$ grep -r 98715 drivers/

drivers/net/tulip.c: { "Macronix 98715 PMAC", drivers/net/tulip.c: { "Macronix 98715 PMAC", 256, 0x0001ebef,

(The search returns several additional hits in the drivers/net/tulip.c file.) You can check the tulip.c file for more details, but the gist is clear: The MX98715 is a clone of the DEC Tulip chipset, and is supported by the tulip.c driver file. You can then go into the Linux ker- A

nel configuration menus and enable support for the relevant driver, which is visible in Figure A.5. (The menu options usually bear some resemblance to the driver filename. If they don't, N

check the help option for all the drivers; there should be some clue there.) IX

E EE

Tracking Down Experimental and Third-Party " e

Drivers

If you've got a particularly new or unusual board, you might have little choice but to use an experimental or third-party driver. Some of these drivers come with the Linux kernel, but require you to select Y to the Code maturity level options, Prompt for development and Incomplete code/drivers. Other experimental drivers, though, do not come with the Linux kernel. You must track these drivers down in other ways, which can be a challenge. You must then either compile them separately or integrate the changes into your kernel and recompile the kernel.

Part VI

Web-Based Sources for Driver Information

Specific chapters of this book include information on popular clearinghouses for drivers for specific devices. There are a few general-purpose Web sites, as well as sites that are particularly important for specific types of devices. These include the following:

• The Linux kernel site http://www.kernel.org is the official site of the Linux kernel. You won't find non-kernel drivers on this site, but you will find the latest kernels, including development kernels. In Linux kernel development, kernels with even second numbers (such as 2.0.3 and 2.2.14) are considered stable. Kernels with odd second numbers (such as 2.1.7 and 2.3.48) are development kernels. Development kernels are at least potentially unstable, but they usually contain more drivers than stable kernels. You therefore might want to check a development kernel for new or updated drivers.

• The Linux Hardware Components site Check http://www.linux.org/hardware/components.html for a list of companies that make Linux drivers available, and a list of projects related to Linux hardware development. Some, but not all, of these links lead to new and experimental drivers that aren't present in the kernel.

• The ALSA Project site The Advanced Linux Sound Architecture (ALSA) project is dedicated to producing an alternative set of sound drivers for Linux. This project's Web site is located at http://www.alsa-project.org. The ALSA drivers are officially betatest and therefore experimental, but in practice they're quite stable, on the whole.

• The OSS site 4Front Technologies (http://www.4front-tech.com) offers a set of shareware sound card drivers for Linux. Most of these Open Sound System (OSS) drivers aren't really experimental, but they are alternatives to the usual Linux drivers.

• The Linux USB site http://www.linux-usb.org is the official home of USB development for Linux. In the 2.2.x kernels, USB support is minimal. The 2.3.x kernels include more in the way of USB support, and this site documents these developments. You can also obtain a port of the 2.3.x USB drivers to a 2.2.x kernel from this site. After 2.3.x stabilizes into 2.4.x (which is expected by the end of 2000), USB development will no doubt continue in the 2.5.x kernel series. Chances are the Linux USB site will then make 2.5.x USB drivers available for 2.4.x kernels.

• The LinModems site http://www.linmodems.org is the best site for information on, and drivers for, software modems.

• SuSE X servers SuSE develops XFree86 drivers, and usually offers these drivers from its Web site, at http://www.suse.de/en/support/xsuse/, before they're available from XFree86. As a general rule, the drivers SuSE makes available are quite stable.

Appendix A

• SANE drivers Linux scanner support comes from the Scanner Access Now Easy (SANE) project, which is hosted at http://www.mostang.com/sane/. Check here for pointers to experimental SANE drivers. The Linux USB site, mentioned earlier, also has links to SANE drivers for USB scanners.

• Ghostscript drivers Most Linux distributions ship with GNU Ghostscript, which is typically a few months behind the latest version of Aladdin Ghostscript. You can update from http://www.cs.wisc.edu/-ghost. You can also find information on this site about unofficial Ghostscript drivers. Another extremely useful site is

http://www.picante.com/-gtaylor/pht/printer_list.cgi, a site that contains a database of printers, including pointers to unusual Ghostscript drivers.

With any luck, one of the preceding links will take you to the information you need. If not, check the chapter on the relevant device. I've included many URLs for driver development projects throughout this book.

Caution

Experimental drivers can be extremely dangerous. A bug in a driver can crash your computer, corrupt data on your hard disk, or otherwise cause serious problems. Many of the drivers you'll find at the preceding sites are quite stable, but some aren't. Exercise caution when you use any experimental driver.

Checking with the Manufacturer

An increasing number of manufacturers support Linux, either directly by sponsoring driver development or indirectly by distributing Linux drivers written by others. Sometimes the manufacturer merely makes available drivers that already come with the Linux kernel, but other times the drivers are patched or are more recent versions than those that come with the kernel. i

If you're having trouble with a standard driver, it's worth trying the driver provided by the RR X

manufacturer. At the very least, it's worth checking to see if it's the same driver that comes E

30 m n with the kernel. If not, that might indicate a patch by the manufacturer to improve compatibil- s c ity or performance.

You should check with both the board manufacturer and the chipset manufacturer; one might provide drivers, but the other might not. Appendix B, "Hardware Manufacturers," provides contact information for many hardware manufacturers. The Web site http://www.linux.org/hardware/components.html also provides links to many hardware manufacturers that provide Linux drivers for their products.

Part VI

Using Experimental Drivers

Experimental and commercial drivers come in several basic forms:

• Independent source code Some drivers, such as the ALSA drivers, come as source code trees, independent of the main Linux kernel source code. To use these drivers, you extract their packages and compile the drivers as if they were a non-driver software package. When you type make install, however, the drivers install themselves in your kernel modules directory, /lib/modules/a.b.c, where a.b.c is your kernel version. You can then load the drivers as if they were normal kernel modules. This approach doesn't normally allow you to include the driver in the kernel file itself, however; you must use the driver as a module.

• Kernel source tree patch Some drivers come as a set of patches to the normal kernel tree. To use these drivers, you change to the Linux kernel directory and then issue a command such as patch -p0 < patch-filename. You then reconfigure and recompile your kernel. Depending upon the driver, you might be able to use it as a module, as part of the kernel proper, or both. Some simple driver replacements only require you to replace one or two files in the kernel source tree, rather than use a patch file.

• Binary-only distribution Some drivers, such as the shareware OSS drivers and Lucent's software modem driver, come only as binary code. These drivers normally come with an installation script and are used only as modules. They're more likely than source code drivers to break when you upgrade to a new kernel version.

• Non-kernel drivers Some devices don't use kernel drivers. For instance, XFree86 for video displays, Ghostscript for printers, and SANE for scanners all require drivers in the form of non-kernel programs. These drivers might need to be compiled directly into the relevant program, or they might work independently. Check the relevant documentation for details.

It's critically important that you read and follow the directions included with experimental or other non-standard drivers. The usual way to distribute Linux drivers is through the kernel, so separately distributed drivers are all non-standard by definition. As such, there is no standard way to apply patches. Each project is different.

Contributing to Driver Development

Linux is a community effort. When Linus Torvalds made the earliest versions of the Linux kernel available, other programmers looked upon the software as a living thing which could grow only through their participation. Without the contributions of these many other programmers, Linux today would not be very useful. Linus Torvalds, by himself, almost certainly could not have written the drivers for the dozens of SCSI cards, Ethernet cards, sound cards, and so on

Appendix A

that today comprise the kernel. One way to "pay" for the free Linux kernel is to give back currency in the form of your own programming efforts. Of course, if you're not a programmer, you might not be able to do this, but even in this case there are ways you can contribute, as described later in the section, "Non-Programming Contributions."

Resources for Kernel Developers

If you're interested in contributing to the development of one or more core drivers—for a filesystem, EIDE controller, Ethernet card, or other low-level hardware—you want to write for the Linux kernel. You might want to investigate any of several resources:

• Existing kernel source code Sooner or later, you'll need to dig into existing kernel source code. You might be able to use an existing device driver as a model for your own code. If you want to fix a bug, you'll have to work from the existing code. Even before you begin coding, you might want to check out the source code to get a feel for its style and structure. If you want a guided tour of the kernel code, Scott Maxwell's Linux Core Kernel Commentary (Coriolis, 1999) might help you.

• The linux-kernel mailing list Major Linux kernel developers subscribe to this mailing list. If you want to join, send email to [email protected]. The email should include the line subscribe linux-kernel [email protected]_ISP, where [email protected]_ISP is your email address.

Caution

The linux-kernel mailing list is very high-volume. It's been known to top 6MB of messages in a week.

Kernel Traffic Web site You can find summaries of discussions on the linux-kernel N

U c mailing list http://kt.linuxcare.com/kernel-traffic/index.epl. Unless you re I x

very serious about Linux kernel development, checking this site on a regular basis is RE

probably a wiser move than subscribing to linux-kernel. E

Kernel programming classes Many colleges and universities offer classes on OS kernel development. Enrolling in such a class can be a good way to learn about the issues involved in kernel development. Some of these classes rely on the Linux kernel as a model, but others don't.

Kernel programming books There are a few books on the market that cover Linux kernel programming, such as Linux Kernel Internals (Addison-Wesley, 1997) and The Linux Kernel Book (John Wiley & Sons, 1998). Other books that cover UNIX driver development or OS kernels in general can also be useful.

Part VI

Linux kernel development isn't a task you should undertake as your first programming project. If you already know how to program in C, though, it doesn't take much additional skill to delve into the Linux kernel. Doing the job well might take additional effort, but starting is easy. Developing or modifying a Linux kernel driver can be a great way to refine your programming skills.

Caution

The Linux kernel contains a great deal of code that's absolutely critical to the proper functioning of your computer. Developing a kernel driver can therefore be a potentially dangerous proposition. If you're serious about learning kernel programming, I recommend you do it on a spare system that contains no critical data. That way, if your driver damages the Linux installation, you won't lose any truly important files.

In addition to—or instead of—direct kernel programming, you might want to contribute to a related project. For instance, if you want to develop sound drivers, you can contact the ALSA Project developers. Aside from ALSA, most unofficial kernel-level drivers are small projects devoted to just one device or feature. Sooner or later, the main kernel tends to swallow smaller kernel-level projects.

Resources for Non-Kernel Projects

Various non-kernel projects exist, and most of these projects welcome donations of your programming talents. Examples include

• XFree86 If you want to fix, expand, or write a new video card driver, contact the XFree86 project (http://www.xfree86.org).

• Printer drivers You can develop a new driver for a printer, and contribute it to Ghostscript (http://www.cs.wisc.edu/-ghost/). Unlike most Linux driver development, Ghostscript development is fairly centralized. The way in which Ghostscript is released (first under a comparatively restrictive license and then under the GPL) means that you might need to sign away certain rights if you want your driver to be incorporated into the main Aladdin Ghostscript package.

• Scanner drivers Contact the SANE project (http://www.mostang.com/sane/) to contribute scanner drivers. A number of SANE drivers are available as add-ons to the main SANE package, so you can contribute scanner drivers without close coordination with the main project.

Appendix A

Because the drivers for most non-kernel devices don't have privileged access to the hardware, writing such device drivers presents less potential for serious crashes than writing kernel drivers does. For instance, if your new Ghostscript driver fails, you're likely to just print one or more sheets of gibberish, not crash your computer. X, however, has somewhat closer access to the hardware than do most non-kernel drivers. It's also possible to drive a monitor at too high of a refresh rate, thus damaging it.

Non-Programming Contributions

Even if you have no programming skills or no inclination to write drivers or other Linux programs, you can contribute to Linux development. There are several ways you can do this:

• Buy retail Linux distributions. Most Linux vendors contribute to Linux development. Therefore, when you buy a retail Linux distribution, some of the purchase price goes towards Linux development. To a lesser extent, you can help by purchasing hardware and software from companies that support Linux. For instance, suppose you're considering two Ethernet adapters, both of which have support in Linux. If one manufacturer has helped Linux development in some way and the other hasn't, buy the first product.

You can sometimes find acknowledgement of help from hardware manufacturers in a driver's source code or documentation files. XFree86 maintains a list of donors on its Web page, http://www.xfree86.org/sponsors.html.

Donate money. Some of the non-profit open source software organizations accept cash donations. You can give money to help XFree86, Inc. or the Free Software Foundation (FSF), for instance. Such donations buy hardware, pay for Internet connectivity, and L

sometimes even pay salaries for hired programmers. ^ |

Donate equipment. Instead of selling or throwing away old equipment, donate it to an m interested developer. Such a donation could be something as informal as giving a device S <

for which no Linux drivers exist to somebody who's expressed an interest in writing dri- E

vers. You can also donate equipment (supported or not) to organizations like XFree86, Inc. or the FSF. All driver developers need hard disks, RAM, monitors, and other hardware components.

Provide feedback. If you encounter a bug in a driver, write a polite email to whoever is responsible for that driver. (You can usually find the maintainer's email address in the relevant source code file.) Try to include relevant information, such as exact information on your hardware and details of how and when the problem occurs. If you can provide

Part VI

information that helps the developer fix a bug, you will help not only yourself, but anybody else who might encounter that bug. Likewise, if a new driver or feature makes your life easier, consider writing a thank you note to the developer. Such messages can help keep a programmer motivated.

Linux has grown substantially over the past few years, both in terms of the OS's user base and in terms of the size of the Linux kernel. The increased size of Linux, in both these senses, requires continued support from the Linux community. Therefore, if you want to see Linux continue to thrive, you should seriously consider contributing to the however you are able.

Summary

In many cases, Linux installs itself to a computer and works with the computer's hardware without any special effort on your part. In some cases, however, you must track down unusual drivers in order to get some component to work. Doing this can take some effort and perhaps even ingenuity, because many small driver projects lurk in out-of-the-way locations on the Web. The first step, however, is usually to identify the device's chipset. With that information, you can at least search for the driver in an intelligent way. Web sites, including search engines such as http://www.yahoo.com and http://www.deja.com/usenet/, can be powerful tools when you want to locate a driver. So can some commands included with Linux, used in conjunction with the Linux kernel source code.

IN THIS CHAPTER

Central Processing Units 626 Motherboards 626 Cases and Power Supplies 628 Hard Disks 629

Removable and Optical Disks 630

Tape Backup Drives 631

SCSI Host Adapters 632

Sound Cards 633

Audio Input/Output 635

Video Cards and Chipsets 636

Video Capture and AV Input Hardware 637

Monitors 638

Keyboards and Mice 640

Network Hardware 641

Modems 642

Scanners 644

Printers 645

Computer Manufacturers 646

Linux Hardware and Software Retailers 648

Part VI

This appendix lists many of the larger manufacturers of computer hardware components. Because the number of firms that sell hardware is quite large, this appendix's list is necessarily incomplete. I list both chipset and complete board manufacturers, where applicable.

The structure of this appendix roughly mirrors the structure of the book, progressing from CPUs through to complete systems. There are a few exceptions. For instance, I don't list memory suppliers, because many people consider memory to be a commodity, and, in fact, it's often sold generically, without a brand name attached. I've included a section on Linux retailers at the end of the appendix.

Central Processing Units

The CPU lies at the heart of every computer. AMD, Intel, and VIA produce x86 CPUs—the sort with which Linux was originally developed. Compaq produces the Alpha CPU, which was originally designed by DEC. Motorola produces the PowerPC CPU, which is used in Apple Macintosh computers, as well as a few others.

Advanced Micro Devices (AMD) One AMD Place P.O. Box 3453 Sunnyvale, CA 94088-3453 408-732-2400 http://www.amd.com

Compaq Computer Corporation P.O. Box 692000 Houston, TX 77269-2000 800-231-0900 http://www.compaq.com

Intel Corporation 2200 Mission College Blvd. Santa Clara, CA 95054-1537 408-765-8080 http://www.intel.com

Motherboards

Many manufacturers produce motherboards, so this section is necessarily incomplete. Some of the entries in this section are for motherboard manufacturers, but others are for motherboard chipset makers and BIOS distributors.

Motorola, Inc.

Microprocessor and Memory Technology Group

3501 Ed Bluestein Blvd. Austin, TX 78762 512-895-2000 http://www.mot.com

VIA Technologies 1045 Mission Court Fremont, CA 94539 http://www.via.com.tw

Appendix B

ABIT Computer Corporation 46808 Lakeview Blvd. Fremont, CA 94538 510-623-0500 http://www.abit-usa.com

Acer Laboratories, Inc. (ALi)

Pacific Technology Group

4701 Patrick Henry Drive, Suite 2101

Santa Clara, CA 95054

408-764-0644

http://www.ali.com.tw

American Megatrends, Inc. (AMI) 6145-F Northbelt Pkwy. Norcross, GA 30071 770-246-8600 http://www.ami.com

ASUS Computer International 721 Charcot Ave. San Jose, CA 95013 510-739-3777 http://www.asus.com

Award Software International 777 E. Middlefield Rd. Mountain View, CA 94043 650-237-6800 http://www.award.com

Diamond Flower, Inc. (DFI) 135 Main Ave. Sacramento, CA 95838 916-568-1234 http://www.dfiusa.com

Elitegroup Computer Systems 45401 Research Ave. Fremont, CA 94539 510-226-7333 http://www.ecsusa.com

EPoX Computer 531 East Jamie Ave. La Habra, CA 90631 714-680-0898 http://www.epox.com

First International Computer (FIC) 980-A Mission Court Fremont, CA 94539 510-252-7777 http://www.fica.com

Gigabyte Technology 18305 Valley Blvd., Suite A La Puente, CA 91744 626-854-9338

http://www.giga-byte.com

Intel Corporation

2200 Mission College Blvd.

Santa Clara, CA 95054-1537

408-765-8080

http://www.intel.com

Jaton Corporation 556 S. Milpitas Blvd. Milpitas, CA 95035 408-942-9888 http://www.jaton.com

OPTi, Inc.

3393 Octavius Drive Santa Clara, CA 95045 408-486-8000 http://www.opti.com

Phoenix Technologies, Ltd.

Refer to Award Software International

Silicon Integrated Systems (SiS) 240 N. Wolfe Rd. Sunnyvale, CA 94086 408-730-5600 http://www.sis.com.tw

F DD

Part VI

SOYO Tek, Inc.

Unicore Software, Inc.

41484 Christy St.

1538 Turnpike St.

Fremont, CA 94538

North Andover, MA 01845

510-226-7696

978-685-6468

http://www.soyo.com

http://www.mrbios.com

Supermicro Computer, Inc.

VIA Technologies

2051 Junction Ave.

1045 Mission Court

San Jose, CA 95131

Fremont, CA 94539

408-895-2000

http://www.via.com.tw

http://www.supermicro.com

VLSI Technology, Inc.

Tekram Technologies

(A division of Philips Semiconductor)

11500 Metric Blvd., Suite 190

1109 McKay Drive

Austin, TX 78758

San Jose, CA 95131

512-833-6550

408-434-3000

http://www.tekram.com

http://www-us.semiconductors.

Tyan Computer Corporation

philips.com/vlsi/

1753 S. Main St.

Milpitas, CA 95035

408-956-8000

http://www.tyan.com

Cases and Power Supplies

Cases and power supplies arecritically important for the reliability and future expandability of your computer, yet they're often treated as commodities. You can usually track down the manufacturer of these components, if you like.

American Power Conversion (APC) 132 Fairgrounds Rd. West Kingston, RI 02892 401-789-5735 http://www.apcc.com

Astec America, Inc. 5810 Van Allen Way Carlsbad, CA 92008 760-930-4600 http://www.astec.com

Best Power P.O. Box 280 Necedah, WI 54646 608-565-7200

http://www.bestpower.com

Elitegroup Computer Systems 45401 Research Ave. Fremont, CA 94539 510-226-7333 http://www.ecsusa.com

Appendix B

Enlight Corporation 15-16, Ting Hu Rd. Ta-Kang, Kwei-Shan Taoyuan, Taipei Taiwan, R.O.C.

http://www.enlightcorp.com

In-Win Development/Astra Data Inc.

891 S. Azusa Ave.

City of Industry, CA 91748

626-913-6822

http://www.in-win.com

NMB Technologies, Inc. 9730 Independence Ave. Chatsworth, CA 91311 818-341-3355 http://www.nmbtech.com

PC Power & Cooling 5995 Avenida Encinas Carlsbad, CA 92008 760-931-5700

http://www.pcpowercooling.com

Superpower Supply, Inc. 10675 East Rush St. South El Monte, CA 91733 626-455-0777 http://www.spower.com

Tripp Lite Manufacturing 1111 West 35th St. Chicago, IL 60609 773-329-1777

http://www.tripplite.com

Hard Disks

A handful of companies dominate the hard disk marketplace. These manufacturers occasionally shift, leave the business, or merge; but others often step in to take the place of the exiting firms. Some companies resell under their own names products from the major manufacturers. This practice is particularly common for external SCSI drives.

Fujitsu Computer Products of America 2904 Orchard Drive San Jose, CA 95134-2009 800-626-4686 http://www.fcpa.com

International Business Machines (IBM)

New Orchard Rd.

Armonk, NY 10504

914-499-1900

http://www.ibm.com

Maxtor Corporation 211 River Oaks Pkwy. San Jose, CA 95134 408-432-1700 http://www.maxtor.com

Quantum Corporation 500 McCarthy Blvd. Milpitas, CA 95035 408-894-4000 http://www.quantum.com

Seagate Technology

920 Disc Way

Scotts Valley, CA 95066

714-641-2500

http://www.seagate.com

Toshiba America, Inc. 9740 Irvine Blvd. Irvine, CA 92718 714-583-3926

http://www.computers.toshiba.com

F DD

Part VI

Western Digital Corporation 8105 Irvine Center Drive Irvine, CA 92618 714-932-5000

http://www.westerndigital.com

Removable and Optical Disks

This category includes a wide variety of devices, including floppy drives, CD-ROM drives, CD-R drives, and high-capacity removable-media drives. Most of the manufacturers in this section make at least two or three different types of removable-media drives. I've also included in this section several large manufacturers of removable-drive media.

Acer America Corp. 2641 Orchard Pkwy. San Jose, CA 95134 408-432-6200 http://www.acer.com

ASUS Computer International 721 Charcot Ave. San Jose, CA 95013 510-739-3777 http://www.asus.com

Castlewood Systems, Inc. 7133 Koll Center Pkwy., Suite 200 Pleasanton, CA 94566 925-461-5500

http://www.castlewood.com

Creative Labs

1901 McCarthy Blvd.

Milpitas, CA 95035

800-998-1000

http://www.creative.com

Fujitsu Computer Products of America 2904 Orchard Drive San Jose, CA 95134-2009 800-626-4686 http://www.fcpa.com

Hewlett-Packard Company 3000 Hanover St. Palo Alto, CA 94304-1185 650-857-1501 http://www.hp.com

Imation

1 Imation Place Oakdale, MN 55128 612-704-4000 http://www.imation.com

Iomega Corporation 1821 West Iomega Way Roy, UT 84067 801-778-1000 http://www.iomega.com

JVC Information Products 5665 Corporate Drive Cypress, CA 90630 714-816-6500 http://www.jvc.com

Maxell Corporation of America 22-08 Route 208 Fair Lawn, NJ 07410 800-533-2836 http://www.maxell.com

Appendix B

Maxoptix Corporation 3342 Gateway Blvd. Fremont, CA 94538 510-353-9700 http://www.maxoptix.com

Mitsumi Electronics Corporation 5808 W. Campus Circle Drive Irving, TX 75063 214-550-7300 http://www.mitsumi.com

NEC Technologies, Inc. 1414 Massachusetts Ave. Boxborough, MA 01719 978-264-8000 http://www.nec.com

Panasonic Communications & Systems 2 Panasonic Way Secaucus, NJ 07094 201-348-7000

http://www.panasonic.com

Philips Consumer Electronics P.O. Box 14810 One Philips Drive Knoxville, TN 37914 423-521-4316 http://www.magnavox.com

Plextor

4255 Burton Drive Santa Clara, CA 95054 408-980-1838 http://www.plextor.com

Tape Backup Drives

This section lists the major tape backup device manufacturers, as well as major tape media manufacturers.

Sony Corporation of America Sony Drive Park Ridge, NJ 07656 800-326-9551

http://www.ita.sel.sony.com

TDK Corporation of America 12 Harbor Park Drive Port Washington, NY 11050 516-625-0100 http://www.tdk.com

Teac America, Inc.

7733 Telegraph :contact informationRd. Montebello, CA 90640 213-726-0303 http://www.teac.com

Toshiba America, Inc. 9740 Irvine Blvd. Irvine, CA 92718 714-583-3926

http://www.computers.toshiba.com

Verbatim Corporation 1200 WT Harris Blvd. Charlotte, NC 28262 704-547-6500

http://www.verbatimcorp.com

F DD

Part VI

Exabyte Corporation

Seagate Technology

1685 38th St.

920 Disc Way

Boulder, CO 80301

Scotts Valley, CA 95066

303-442-4333

714-641-2500

http://www.exabyte.com

http://www.seagate.com

Fujitsu Computer Products of America

Sony Corporation of America

2904 Orchard Drive

Sony Drive

San Jose, CA 95134-2009

Park Ridge, NJ 07656

800-626-4686

800-326-9551

http://www.fcpa.com

http://www.ita.sel.sony.com

Hewlett-Packard Company

TDK Corporation of America

3000 Hanover St.

12 Harbor Park Drive

Palo Alto, CA 94304-1185

Port Washington, NY 11050

650-857-1501

516-625-0100

http://www.hp.com

http://www.tdk.com

Maxell Corporation of America

Teac America, Inc.

22-08 Route 208

7733 Telegraph Rd.

Fair Lawn, NJ 07410

Montebello, CA 90640

800-533-2836

213-726-0303

http://www.maxell.com

http://www.teac.com

OnStream

Tecmar Technologies, Inc.

1951 S. Fordham St.

1900 Pike Rd.

Longmont, CO 80503

Longmont, CO 80501

303-772-9000

303-682-3700

http://www.onstream.com

http://www.tecmar.com

Quantum Corporation

Verbatim Corporation

500 McCarthy Blvd.

1200 WT Harris Blvd.

Milpitas, CA 95035

Charlotte, NC28262

408-894-4000

704-547-6500

http://www.quantum.com

http://www.verbatimcorp.com

SCSI Host Adapters

Some of the companies listed here produce SCSI chipsets; others use chipsets to produce SCSI host adapters. Other companies produce both chipsets and complete products. Many of these companies produce EIDE controllers in addition to SCSI host adapters.

Appendix B

Adaptec

691 S. Milpitas Blvd. Milpitas, CA 95035 408-945-8600 http://www.adaptec.com

ASUS Computer International 721 Charcot Ave. San Jose, CA 95013 510-739-3777 http://www.asus.com

BusLogic

See Mylex Corporation

Initio Corporation

2205 Fortune Drive, Suite A

San Jose, CA 95131-1806

408-577-1919

http://www.initio.com

LSI Logic, Inc. (formerly Symbios) 1551 McCarthy Blvd. Milpitas, CA 95035 408-433-8000 http://www.lsilogic.com

Mylex Corporation (formerly BusLogic) 34551 Ardenwood Blvd. Fremont, CA 94555-3067 510-796-6100 http://www.mylex.com

Promise Technology 1460 Koll Circle, Suite A San Jose, CA 95112 408-452-0948 http://www.promise.com

QLogic Corporation 26650 Laguna Hills Drive Aliso Viejo, CA 92656 949-389-6000 http://www.qlogic.com

SIIG, Inc.

6078 Stewart Ave.

Fremont, CA 94538-3152

510-657-8688

http://www.siig.com

Tekram Technologies 11500 Metric Blvd., Suite 190 Austin, TX 78758 512-833-6550 http://www.tekram.com

Sound Cards

Many small companies produce sound cards based upon the chipsets of other firms. The most common chipsets include those made by Cirrus Logic/Crystal Semiconductor, ESS, and OPTi. Increasingly, sound functionality is being moved into the motherboard chipsets, although this practice is still far from universal.

F DD

Part VI

Acer America Corp. 2641 Orchard Pkwy. San Jose, CA 95134 408-432-6200 http://www.acer.com

Cirrus Logic, Inc./Crystal Semiconductor

3100 W. Warren Ave.

Fremont, CA 94538

510-623-8300

http://www.cirrus.com

Creative Labs

1901 McCarthy Blvd.

Milpitas, CA 95035

800-998-1000

http://www.creative.com

ESS Technology, Inc. 48401 Fremont Blvd. Fremont, CA 94538 510-492-1088 http://www.esstech.com

Intel Corporation

2200 Mission College Blvd.

Santa Clara, CA 95054-1537

408-765-8080

http://www.intel.com

International Business Machines (IBM) New Orchard Rd. Armonk, NY 10504 914-499-1900 http://www.ibm.com

Jaton Corporation 556 S. Milpitas Blvd. Milpitas, CA 95035 408-942-9888 http://www.jaton.com

OPTi, Inc.

3393 Octavius Drive Santa Clara, CA 95045 408-486-8000 http://www.opti.com

Roland Corporation, U.S.

5100 S. Eastern Ave.

Los Angeles, CA 90040-2938

323-890-3700

http://www.rolandus.com

Turtle Beach

See Voyetra-Turtle Beach, Inc.

VIA Technologies 1045 Mission Court Fremont, CA 94539 http://www.via.com.tw

Voyetra Turtle Beach, Inc. 5 Odell

Was this article helpful?

0 0
The Ultimate Computer Repair Guide

The Ultimate Computer Repair Guide

Read how to maintain and repair any desktop and laptop computer. This Ebook has articles with photos and videos that show detailed step by step pc repair and maintenance procedures. There are many links to online videos that explain how you can build, maintain, speed up, clean, and repair your computer yourself. Put the money that you were going to pay the PC Tech in your own pocket.

Get My Free Ebook


Post a comment