Linux kernel 在静态编译到内核的设备驱动程序中查找/编码版本号

Linux kernel 在静态编译到内核的设备驱动程序中查找/编码版本号,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我认为,如果驱动程序被静态编译到内核中,那么MODULE_版本就不能工作。在sysfs中找不到版本号。modinfo不工作,因为它不是加载的模块。 那么,获取这个驱动程序的MODULE_版本或在驱动程序中编码版本号的最佳方法是什么呢。有没有标准的方法来实现这一点,或者我应该简单地使用sysfs?首先,为树内模块提供模块版本没有多大意义。否则将保留名为\uu modver的特殊部分 $ objdump -h ~/prj/TMP/out/mfld/vmlinux -j __modver /home/

我认为,如果驱动程序被静态编译到内核中,那么MODULE_版本就不能工作。在sysfs中找不到版本号。modinfo不工作,因为它不是加载的模块。
那么,获取这个驱动程序的MODULE_版本或在驱动程序中编码版本号的最佳方法是什么呢。有没有标准的方法来实现这一点,或者我应该简单地使用sysfs?

首先,为树内模块提供模块版本没有多大意义。否则将保留名为
\uu modver
的特殊部分

$ objdump -h ~/prj/TMP/out/mfld/vmlinux -j __modver
/home/andy/prj/TMP/out/mfld/vmlinux:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
 12 __modver      00000c40  c1a003c0  01a003c0  00a013c0  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA

它包含指向宏
module\u VERSION
中的
include/linux/module.h
中定义的相应结构的指针。当您在不同OEM上开发和部署不同版本时,它是有意义的。我开发了超过4个版本的驱动程序,它们都在不同的设备中。我看不出哪个版本在哪个版本中运行。
uname-a
通常显示内核版本。如果更改了版本,则添加哈希。所以,你总是知道这个版本是什么。Linux版本4.0.0-rc3-next-20150313+#123 SMP-Fri Mar 13 15:54:01 EET 2015I是指驱动程序版本。不是内核版本。我想知道我的驱动程序版本,它在不是我自己构建的vmlinux中。你指的是第三方驱动程序,对吗?我们通常不关心他们。若他们提供版本,那个么没关系,否则,你们将不知道你们是否不是安装那个驱动程序的人。在树内驱动的情况下,你总是知道什么是版本。试着弄清楚,那个第三者就是我。我向原始设备制造商提供驱动程序,有时根据他们的要求进行更改。我需要某种方法来跟踪版本。我给供应商提供了新版本,但他们仍然设法使用旧版本。因此,我想知道我的驱动程序在已部署系统上的版本,因为我的驱动程序不是内核模块,而是vmlinux的一部分