编写设备驱动程序

SPARC 处理器问题

本节介绍了许多特定于 SPARC 处理器的主题,如数据对齐、字节排序、寄存器窗口以及浮点指令的可用性 。有关特定于 x86 处理器主题的信息,请参见x86 处理器问题


注 –

驱动程序决不能执行浮点操作,因为内核中不支持这些操作。


SPARC 数据对齐

所有数量均必须使用标准 C 数据类型与其自然边界对齐:

通常,编译器会处理所有对齐问题。但是,驱动程序编写者可能更关心对齐,因为只有使用正确的数据类型才能访问设备。由于设备寄存器通常是通过指针引用来访问的,因此驱动程序必须确保在访问设备时正确对齐指针。

SPARC 结构中的成员对齐

由于 SPARC 处理器强加的数据对齐限制,因此,C 结构也具有对齐要求。结构对齐要求是由最严格对齐的结构组件强加的。例如,仅包含字符的结构没有对齐限制,而对于包含 long long 成员的结构,则必须对其结构进行设置,保证此成员在 64 位边界上对齐。

SPARC 字节排序

SPARC 处理器使用大端字节序进行字节排序。整数的最高有效字节 (most significant byte, MSB) 存储在该整数的最低地址上。最低有效字节存储在此处理器中字的最高地址上。例如,字节 63 是 64 位处理器的最低有效字节。

图中显示如何在大端字节序体系结构中对字节进行排序,即字节 0 是最高有效字节。

SPARC 寄存器窗口

SPARC 处理器使用寄存器窗口。每个寄存器窗口包含八个输入寄存器、八个局部寄存器、八个输出寄存器以及八个全局寄存器。输出寄存器是下一个窗口的输入寄存器。寄存器窗口的数量范围从 2 到 32,具体取决于处理器实现。

由于驱动程序通常是使用 C 语言编写的,因此编译器通常不会指明使用了寄存器窗口。但是,当调试驱动程序时,可能必须使用寄存器窗口。

SPARC 乘法和除法指令

版本 7 SPARC 处理器没有乘法或除法指令。 乘法和除法指令是在软件中模拟实现的。由于驱动程序可能在版本 7、版本 8 或者版本 9 处理器中运行,因此请避免进行大量整数乘除。相反,请使用按位向左和向右移位来以 2 的幂进行相乘和相除。

SPARC Architecture Manual, Version 9》介绍了有关 SPARC CPU 的更具体信息。《SPARC Compliance Definition》(版本 2.4)介绍了 SPARC V9 的应用程序二进制接口 (application binary interface, ABI) 的详细信息。本手册介绍了 32 位 SPARC V8 ABI 和 64 位 SPARC V9 ABI。可以从 SPARC International 的网站 http://www.sparc.com 上获取本文档。