ELADCMSecondEditionChapterFivePartXVII

来自百问网嵌入式Linux wiki

__NOTITLE__

常见问题

安装驱动时version magic不匹配

要想彻底了解内核的LOCALVERSION信息,可以看这个贴子:
https://blog.csdn.net/gatieme/article/details/78510497
总结一下:
① 开发板所用的内核版本:
在开发板上执行“uname -r”命令,可以得到开发板所用内核的版本,比如:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionChapterFive 147.png
② 在服务器中给开发板编译内核时,这个内核也有一个版本:
进入该内核源码目录,执行“make kernelrelease”命令,可以得到它的版本,比如:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionChapterFive 148.png
③ 编译驱动时,会用到服务器中开发板的内核源码,会带有它的版本信息。
如果①②③的版本信息不匹配,很可能导致驱动程序无法加载,比如:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionChapterFive 149.png
有2个解决方法:
A. 在Ubuntu上重新编译内核,让开发板使用新的内核启动;重新编译驱动,加载新驱动:
这样,①②③三者的内核版本就都一致了。
但是,这种方法有时候不好用,比如开发板上的内核无法更改(出厂固化了),或者你没有开发板上所用内核的全部源码无法编译出内核,这时就可以使用下面的方法。
B. 在Ubuntu上修改版本号,改为开发板上“uname -r”的结果,然后重新编译内核和驱动:
开发板就可以继续使用原来的内核,并且可以加载编译出来的驱动了。
步骤如下:
b.1 修改Ubuntu上开发板内核源码顶层目录Makefile,如下图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionChapterFive 150.png
b.2 重新编译内核,这会生成一些头文件,供驱动使用
b.3 重新编译驱动