“typedef __u16 __bitwise __le16;”是啥意思?在Linux内核中是啥意思?

Posted

技术标签:

【中文标题】“typedef __u16 __bitwise __le16;”是啥意思?在Linux内核中是啥意思?【英文标题】:what does "typedef __u16 __bitwise __le16;" mean in Linux kernel?“typedef __u16 __bitwise __le16;”是什么意思?在Linux内核中是什么意思? 【发布时间】:2022-01-13 05:09:17 【问题描述】:

typedef __u16 __bitwise __le16; 在 Linux 内核中是什么意思?

实际上,这里的“le”是什么意思? 我隐约可以看出这是一个无符号的 16 位整数?

感谢您的帮助。

【问题讨论】:

le 的意思是听到“小端序”,它表示内存中数据的字节顺序。 【参考方案1】:

我发现 (source) 和 that

类型标识符

以下类型标识符对应于 u16、u32 和 u64 类型,但它们是使用按位属性定义的,用于限制它们作为整数的使用。 sparse 实用程序使用按位属性来确保在对变量执行其他(不安全)操作之前将变量转换为本地处理器类型。

在包含 linux/kernel.h 头文件后,以下类型可用于字节序因变量。

__le16
__le32  
__le64


__be16
__be32
__be64

【讨论】:

链接到内核代码中的源代码elixir.bootlin.com/linux/latest/source/include/uapi/linux/…【参考方案2】:

简答:代表little endian

长答案:查看@Pben 的answer 中的链接

【讨论】:

【参考方案3】:

根据Documentation/sparse.txt:

使用 gcc,所有 __bitwise/__force 的东西都消失了,这一切 最终看起来就像 gcc 的整数。

所以我的理解是:

一个。它仅用于类型检查。

b.如果你有

typedef __u16 __bitwise __my_type1;
typedef __u16 __bitwise __my_type2;

如果将 __my_type1 分配给 __my_type2,Sparse 会发出警告。

c。 __bitwise 只表示顺序敏感,它不指定大端或小端。

我说的对吗?

【讨论】:

以上是关于“typedef __u16 __bitwise __le16;”是啥意思?在Linux内核中是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章