我正在开发一个设备驱动程序模块和相关的用户库来处理ioctl()
调用。该库获取相关信息并将其放入一个结构中,该结构被传递到驱动程序模块并在那里解包然后处理(我省略了很多步骤,但这是总体思路)。
ioctl()
通过isuint32_t
类型通过结构传递的一些数据。我发现该类型是在<stdint.h>
AND中定义的<linux/types.h>
。到目前为止,我一直在使用<linux/types.h>
它来定义该值,包括在用户库中。但是我知道<linux/*.h>
在用户空间中使用库是一种不好的形式,所以如果我删除它们并<stdint.h>
改用,那么当我的驱动程序模块包含结构定义时,它也必须包含在内<stdint.h>
。
在我看来,重点<linux/types.h>
是在内核文件中定义类型,所以我不确定这是否意味着<stdint.h>
在那里使用是个坏主意。我还发现,当尝试使用 编译我的驱动程序模块时<stdint.h>
,我会收到关于不会消失的重新定义的编译错误,即使我替换了<linux/types.h>
with的所有实例<stdint.h>
(并将其放在包含顺序的顶部)。
- 在用户空间代码中使用 linux/*.h 包含是一个坏主意吗?
<stdint.h>
在内核空间代码中使用是一个坏主意吗?- 如果这两个问题的答案都是肯定的,那么我该如何处理包含的结构
uint32_t
由用户库和驱动程序模块共享的情况?