Linux教程

Linux内核编译之“.version”文件说明

本文主要是介绍Linux内核编译之“.version”文件说明,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

        最近做一个项目在移植内核的时候,发现方案公司提供的Linux内核里边有一个文件“.version”文件和我这边基础版本的内核源码里边的“.version”文件不一致,打开发现这个文件里边是一个数字,方案公司源码里边该数字是“161”,我这边对应文件数字为“104”。

        看文件名字应该是和Linux内核版本有关,但是版本差异这么大,是方案公司提供的内核版本和我们要求的不一致吗?因为我们是要求方案公司在我们要求的内核版本上开发驱动的,如果内核版本差异较大,可能会存在相应隐患,故我继续往下查,想确认一下该文件具体作用是什么。但是问方案公司的开发人员,那边也没说上来这个文件是什么用处。

         那就百度一下吧,但是万能的百度这次不管用了,网上竟然查不到有关这个文件的说明。这就有点奇怪了。那这个文件具体是有什么用处呢?

        后来我通过dmesg命令查看方案公司内核和我移植的内核打印信息时,发现了该版本的踪迹,在Linux内核打印信息里边,有一个内核编译信息的展示打印,在这个打印里边发现了这个版本文件的踪迹,打印信息如下:

方案公司的内核打印信息:

Linux version 4.9.37 (qiao@qiao-PC) (gcc version 6.3.0 (HC&C V100R002C00B027_20181107) ) #161 SMP Thu Apr 8 09:05:12 CST 2021

我移植后的内核打印信息:

Linux version 4.9.37 (liu@ubuntu) (gcc version 6.3.0 (HC&C V100R002C00B027_20181107) ) #104 SMP Sat Sep 11 02:51:09 PDT 2021

        发现该“.version”文件内容是和内核编译有关的。再通过Linux内核官网下载对应版本的纯净版内核源码发现,刚下载的内核源码里边是没有这个“.version”的文件的。那这个文件推测应该是编译生成的过程文件。难道是编译计次文件?

        我把下载的源码编译了一次,发现果然生成了这个“.version”文件,打开一看,内容是“1”,看来这个真的是和编译次数有关系,编译过程中也有该文件的编译信息,信息如下:

MODPOST vmlinux.o
GEN     .version
CHK     include/generated/compile.h

那具体有什么关系呢?继续测试。

        重新再原来选择模块形式编译的“USB Serial Converter support”项的子项下边,又随便选择了一项以模块形式进行编译,编译后发现,该文件内容还是“1”,数值没变,那难道是需要涉及编译出来的内核改动的时候,这个版本才会变化吗?那继续测试,把“USB Serial Converter support”这个内核选项由原来的“模块”编译形式,直接编译为和内核一个整体的模式,这样的话,内核肯定会发生改变,重新编译查看,发现,果然显示的编译信息里边显示“GEN .version”内容了,“.version”版本文件变为“2”了。

        看来这个文件是用来记录内核编译中涉及对最终编译出的二进制内核有影响的版本用的。

        推测,该版本可能是针对内核“Forced module loading ”该选项使用的吧,当内核该选项没有打开的时候,模块加载必须是使用同一个“.version”版本的内核。如果加载内核的模块和内核不是同一个“.version”编译出来的,就拒绝加载该模块。如果使能该内核选项,则内核加载模块时,不再判断该版本。不过这个也只是我的推测,有兴趣的同学可以尝试一下。

这篇关于Linux内核编译之“.version”文件说明的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!