Device Driver Tutorial

Building a Driver

This section tells you how to compile and link a driver for different architectures.

Make sure you have installed the Oracle Solaris OS at the Developer level or above. Follow the instructions in the Oracle Solaris 11 Express Automated Installer Guide to install the OS. See also the Getting Started With Oracle Solaris 11 Express for an introduction to the Oracle Solaris 11 Express operating system.

A 64-bit kernel cannot use a 32-bit driver. A 64-bit kernel can use only 64-bit drivers. All parts of any particular program must use the same data model. A device driver is not a complete program. The kernel is a complete program. A driver is a part of the kernel program. If you want your device to work with the Oracle Solaris OS in 32-bit mode and in 64-bit mode, then you must provide both a 32-bit driver and a 64-bit driver.

By default, compilation on the operating system yields a 32-bit result on every architecture. To obtain a 64-bit result, use the compilation options specified in this section for 64-bit architectures.

Use the prtconf(1M) command with the -x option to determine whether the firmware on this system is 64-bit ready.

Compiling with Oracle Solaris Studio

Use the -D_KERNEL option to indicate that this code defines a kernel module.

Note –

Sun Studio 9 does not support 64-bit x86 architectures. Use Sun Studio 10, Sun Studio 11, or Sun Studio 12 to compile and debug drivers for 64-bit x86 architectures.

For more information on compile and link options, see the Sun Studio Man Pages and the Sun Studio 12: C User’s Guide. See the Sun Studio Information Center in the Sun Studio 12 Collection for Sun Studio books about dbx, dmake, Performance Analyzer, and other software development topics. To read technical articles about Sun Studio, see Sun Studio Technical Articles. To learn more about Oracle Solaris Studio, go to

Compiling with the GNU C Compiler

To get the GNU C Compiler, first install the Oracle Solaris 11 Express OS. The developer tools are available in a repository as packages. See the Oracle Solaris 11 Express Image Packaging System Guide and the Getting Started With Oracle Solaris 11 Express

Use the -D_KERNEL option to indicate that this code defines a kernel module. These examples show options that are required for correct functionality of the result.

For more information on these and other options, see the gcc(1) man page. See also the GCC web site at