编写设备驱动程序

编译和链接驱动程序

您需要编译每个驱动程序源文件,并将生成的对象文件链接到驱动程序模块中。Solaris OS 既与 Sun Studio C 编译器兼容,又与 Free Software Foundation, Inc. 提供的 GNU C 编译器兼容。除非另有说明,否则本节中的示例均使用 Sun Studio C 编译器。有关 Sun Studio C 编译器的信息,请参见《Sun Studio 12:C 用户指南》以及 Sun Developer Network Web 站点上的 Sun Studio Documentation(Sun Studio 文档)。有关编译和链接选项的更多信息,请参见《Sun Studio Man Pages》/usr/sfw 目录中提供了GNU C 编译器。有关 GNU C 编译器的信息,请参见 http://gcc.gnu.org/,或者查看 /usr/sfw/man 中的手册页。

以下示例显示一个名为 xx 的驱动程序,该驱动程序包含两个 C 源文件。生成的驱动程序模块名为 xx。本示例中创建的驱动程序适用于 32 位内核。您必须使用 ld -r,即使您的驱动程序只有一个对象模块也是如此。


% cc -D_KERNEL -c xx1.c
% cc -D_KERNEL -c xx2.c
% ld -r -o xx xx1.o xx2.o

必须定义 _KERNEL 符号以指示此代码定义了一个内核模块。除了驱动程序专用符号以外,不应定义任何其他符号。可以定义 DEBUG 符号,以启用任何对 ASSERT(9F) 的调用。

如果使用 Sun Studio 9、Sun Studio 10 或 Sun Studio 11 编译 64 位 SPARC 体系结构,请使用 -xarch=v9 选项:


% cc -D_KERNEL -xarch=v9 -c xx.c

如果使用 Sun Studio 12 编译 64 位 SPARC 体系结构,请使用 -m64 选项:


% cc -D_KERNEL -m64 -c xx.c

如果使用 Sun Studio 10 或 Sun Studio 11 编译 64 位 x86 体系结构,请同时使用 -xarch=amd64 选项和 -xmodel=kernel 选项:


% cc -D_KERNEL -xarch=amd64 -xmodel=kernel -c xx.c

如果使用 Sun Studio 12 编译 64 位 x86 体系结构,请使用 -m64 选项、-xarch=sse2a 选项和 -xmodel=kernel 选项:


% cc -D_KERNEL -m64 -xarch=sse2a -xmodel=kernel -c xx.c

注 –

Sun Studio 9 不支持 64 位 x86 体系结构。请使用 Sun Studio 10、Sun Studio 11 或 Sun Studio 12 编译和调试 64 位 x86 体系结构的驱动程序。


驱动程序稳定后,您可能需要添加优化标志来生成符合生产质量要求的驱动程序。有关 Sun Studio C 编译器优化的具体信息,请参见《Sun Studio Man Pages》中的 cc(1) 手册页。

在设备驱动程序中,应该将全局变量视为 volatilevolatile 标记将在将变量声明为可变变量中详细介绍。标志的使用取决于平台。请参见手册页。