在写完内核模块代码后,用make进行编译,遇到如下错误:
[root@localhost cache]# make
rm -f /lib/modules/3.8.0/build/xx
ln -s /data/raid /lib/modules/3.8.0/build/xx
make -C /lib/modules/3.8.0/build SUBDIRS=`pwd` CROSS_COMPILE="" modules
make[1]: Entering directory `/usr/src/linux-3.8'
CC [M] /data/raid/src/cache/xx1.o
CC [M] /data/raid/src/cache/xx2.o
CC [M] /data/raid/src/cache/xx3.o
CC [M] /data/raid/src/cache/xx4.o
CC [M] /data/raid/src/cache/xx5.o
CC [M] /data/raid/src/cache/xx6.o
CC [M] /data/raid/src/cache/xx7.o
unrecognized ELF data encoding 0: /data/raid/src/cache/xx7.o
make[2]: *** [/data/xx7.o] Error 1
make[1]: *** [_module_/data/xx] Error 2
make[1]: Leaving directory `/usr/src/linux-3.8`
make: *** [all] Error 2
这里可以确定的几个事实:
- 模块代码在修改过后是没有错误的
- 换另一台相同配置的机器就能够编译通过
- 编译之前已经使用make clean
- 本模块代码全部删除,从其他机器拷过来编译也失败
最后找到解决办法:
>>ccache -C #可以使用"ccache"查看对应用法
>>make clean
>>make #编译成功!!!
但是很可惜,问题发生的具体原因未知,估计是在某次编译时发生了错误,导致ccache中一直存有记录,导致对应文件一直不被重新编译,当彻底清除缓存后就能够成功进行编译。
make还真是个神奇的工具,错误也是千奇百怪…