标签

, , ,

前几天在调一个驱动的时候发现在设备上insmod不进去,提示格式不对,用dmesg可以看到版本不一致。
设备上的内核版本号为:2.6.38.8,而自己编的模块版本号为2.6.38.8+。
于是开始找原因
1.在内核目录树下make kernelrelease得到的确实为2.6.38.8+
2.cat include/config/kernel.release和
cat cat include/generated/utsrelease.h均为2.6.38.8+
3.从主Makefile看到:
kernelrelease: @echo “$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))”
再查看scripts/setlocalversion可以发现问题所在了,原因如下:
1.由于kernel.org上的代码早已由git管理,所以当当前目录下存在.git目录时且当前代码不是最新的tag时时打印出”+”
2.当当前目录下存在.svn时,用svn info查看“Last Changed Rev:”版本,然后也将打印出“+”

而我们的代码时由svn管理的,所以符合第二条;而且当主机环境不为英语的时候从svn info里grep不出“Last Changed Rev:”,所以也没“+”号。
知道了问题后,最简单的方法就是将当前环境改为中文咯:
export LANGUAGE=zh_CN.utf-8 (ubuntu)

Advertisements