【问题标题】:Find / encode version number into a device driver that is statically compiled into the kernel将版本号查找/编码到静态编译到内核中的设备驱动程序中
【发布时间】:2015-03-03 00:45:15
【问题描述】:

如果驱动程序被静态编译到内核中,我相信 MODULE_VERSION 不起作用。在 sysfs 中找不到版本号。 modinfo 不起作用,因为它不是加载的模块。 那么获取此驱动程序的 MODULE_VERSION 或在驱动程序中编码版本号的最佳方法是什么。有这样做的标准方法还是我应该简单地使用 sysfs?

【问题讨论】:

    标签: linux-kernel linux-device-driver


    【解决方案1】:

    首先,在树模块中拥有一个模块版本没有多大意义。否则,它会保留为称为__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_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 2015
    • 我的意思是驱动版本。不是内核版本。我想知道我的驱动程序版本,它位于不是我构建的 vmlinux 中。
    • 您的意思是第三方驱动程序,对吧?我们通常不关心他们。如果他们提供版本,那没关系,否则,您将不知道您是否不是安装该驱动程序的人。在树内驱动程序的情况下,您始终知道版本是什么。试着弄清楚。
    • 那个第三方就是我。我将驱动程序提供给原始设备制造商,有时会根据他们的要求进行更改。我需要某种方式来跟踪版本。我向供应商提供了新版本,他们仍然设法使用旧版本。因此,我想通过某种方式了解我的驱动程序在已部署系统上的驱动程序版本,其中我的驱动程序不是内核模块而是 vmlinux 的一部分
    猜你喜欢
    • 2018-05-23
    • 2015-12-16
    • 2013-11-12
    • 2015-06-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多