当我在带有以下选项的Linux驱动程序上运行spare时,sparse抛出了以下警告: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;
}sparse报告的警告是: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。
不确定如何解决此问题。
我如何纠正所有这些问题?
发布于 2014-03-02 05:19:08
对于第一期
(le16_to_cpu(*(__le16 *)&addr[offset]) & 0x7000) >> 12;
对于第二期
__le16 val[20] = {cpu_to_le16(0xf0), cpu_to_le16(0xfb)..}
对于第三期
u16 seq = (le16_to_cpu(tmp_hdr->seq) >> 4);
有关更多详细信息,请阅读此link
https://stackoverflow.com/questions/22119935
复制相似问题