许多处理硬件设备的设备驱动程序使用 C 数据结构说明硬件的布局。在 LP64 数据模型中,使用 long
或 unsigned long 类型定义硬件寄存器的数据结构几乎肯定不正确,因为 long
类型现在是 64 位。首先包括 <sys/inttypes.h>,然后将此类数据结构更新为使用 int32_t
或 uint32_t
,而不是 32 位设备数据的 long
。
此方法可保留 32 位数据结构的二进制布局。例如,将以下代码:
struct device_regs { ulong_t addr; uint_t count; }; /* Only works for ILP32 compilation */
更改为:
struct device_regs { uint32_t addr; uint32_t count; }; /* Works for any data model */