This section describes the Linux hardware support. This section contains the following topics:
A vast number of hardware components are supported in Linux. However, support for newer hardware is not usually provided for some time. Unless the hardware vendor has written a Linux driver for their hardware, someone with programming skills must actually obtain the hardware and write a driver for it. This process usually takes some time after the hardware is released. A few hardware vendors release Linux drivers with their hardware, and the list of vendors that do this is growing as Linux becomes more widely used.
Most versions of UNIX provide a mechanism to access hardware within the virtual file system structure. This access is normally achieved by creating device nodes on file systems that are linked to their corresponding drivers via major and minor numbers. Both Solaris and Linux employ this mechanism, but they have different approaches to it. Most Solaris device nodes are under a device path hierarchy in the /devices directory. These device nodes are then symbolically linked to the /dev directory so that somewhat meaningful names can be associated with them. Linux uses only a /dev directory and does not employ a device hierarchy. Most of the entries in /dev in Linux are actual device nodes. The symbolic links that do exist in /dev just point to real device nodes in /dev.
When you initially install Solaris, a package named SUNWcsd gets installed. This package contains the core Solaris device nodes in /devices and symbolic links in /dev required for the initial boot of Solaris after installation.
Beyond this, any device nodes and symbolic links that are required get created via devfsadm, which is run every time a boot -r is done. Device nodes in Solaris are created with the major number mapped to the appropriate driver in the file /etc/name_to_major. The driver is initially assigned its major number when add_drv is run for it. Redhat Linux has a package that contains device nodes (dev-3.3.1-2 on my Redhat 8.0 machine), but this package contains the device nodes for all the hardware supported in the latest version of the kernel. The device nodes and their associated major and minor numbers in Linux are maintained as a fixed list at http://www.lanana.org/docs/device-list/ and any updates to the list require registering them with the list's owner.
This fixed-list mechanism in Linux is in the process of being phased out. A new mechanism for maintaining the /dev directory in Linux uses a new virtual file system type called devfs. The use of devfs allows for hierarchical device trees and dynamically created device nodes, without the need to have a device node for every possible piece of hardware that might exist on a Linux machine. Also, it has the ability to dynamically assign major and minor numbers so that they don't have to be hard coded in the driver (or the list).
For Linux installations prior to kernel version 2.5, support for devfs must be compiled into the kernel and a user-space daemon must be downloaded and compiled to take advantage of it. Because this feature was integrated into the 2.5 development kernel, it will be integrated into the next stable kernel release, 2.6.