编译uboot时遇到问题:devextras.h:202:25: warning: right-hand operand of comma expression has no effect [-Wunused-value]
for (pos = (head)->next, prefetch(pos->next); pos != (head); \
就是prefetch(pos->next)没有作用
简单的解决办法就是把prefetch(pos->next)删掉就可以解决问题
找出源文件:find -name devextras.h,把prefetch(pos->next)删掉,重新编译后问题解决
~/test/u-boot-2012.04.01$ vim ./fs/yaffs2/devextras.h +202
#define list_for_each(pos, head) \
for (pos = (head)->next, prefetch(pos->next); pos != (head); \
pos = pos->next, prefetch(pos->next))
参考:内核中prefetch的问题,prefetch 指令将数据放入缓存以提高链表查询性能,但文章认为prefetch不仅不能优化性能反而有害,所以简单的删除prefetch是解决问题的好办法
保留prefetch的解决办法可以通过修改devextras.h实现:
1、将devextras.h中的#define prefetch(x) 1删除(这条定义就说明prefetch没用)
2、重新定义prefetch函数
#ifndef ARCH_HAS_PREFETCH
#define ARCH_HAS_PREFETCH
static inline void prefetch(const void *x) {;}
#endif
//#define prefetch(x) 1
重新编译后问题解决