编写设备驱动程序

使用硬件寄存器的固定宽度类型

许多处理硬件设备的设备驱动程序使用 C 数据结构说明硬件的布局。在 LP64 数据模型中,使用 long 或 unsigned long 类型定义硬件寄存器的数据结构几乎肯定不正确,因为 long 类型现在是 64 位。首先包括 <sys/inttypes.h>,然后将此类数据结构更新为使用 int32_tuint32_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 */