当我使用以下选项在Linux驱动程序上运行备用时,我有以下警告被稀疏抛出:
make C=2 CF=-D__CHECK_ENDIAN__
我的功能是:
static inline u8 rsi_get_register_addr(u8 *addr, u16 offset)
{
return (le16_to_cpu(*(u16 *)&addr[offset]) & 0x7000) >> 12;
}
稀疏报告的警告是:
warning: cast to restricted __le16
有人可以帮我理解这里出了什么问题吗?
我目前面临的另一个问题是以下几行:
__le16 values[20] = {0xf0, 0xfb, 0xf2, 0xf1};
Sparse给出以下警告:
warning: incorrect type in initializer (different base types) expected restricted __le16
got int
另一个问题是:
seq = cpu_to_le16(tmp_hdr->seq >> 4);
我得到的错误是:restricted __le16 degrades to integer
。
不确定如何解决此问题。
如何纠正所有这些问题?
答案 0 :(得分:2)
第一期
(le16_to_cpu(*(__le16 *)&addr[offset]) & 0x7000) >> 12;
第二期
__le16 val[20] = {cpu_to_le16(0xf0), cpu_to_le16(0xfb)..}
第3期
u16 seq = (le16_to_cpu(tmp_hdr->seq) >> 4);
有关详细信息,请阅读此link