# Linux Kernel Module Cheat

#### 17.5.3. MODULE_INFO

Module metadata is stored on module files at compile time. Some of the fields can be retrieved through the `THIS_MODULE` `struct module`:

    insmod module_info.ko

Dmesg output:

    name = module_info
    version = 1.0

Source: kernel_modules/module_info.c

Some of those are also present on sysfs:

    cat /sys/module/module_info/version

Output:

    1.0

And we can also observe them with the `modinfo` command line utility:

    modinfo module_info.ko

sample output:

    filename:       module_info.ko
    license:        GPL
    version:        1.0
    srcversion:     AF3DE8A8CFCDEB6B00E35B6
    depends:
    vermagic:       4.17.0 SMP mod_unload modversions

Module information is stored in a special `.modinfo` section of the ELF file:

    ./run-toolchain readelf -- -SW "$(./getvar kernel_modules_build_subdir)/module_info.ko"

contains:

      [ 5] .modinfo          PROGBITS        0000000000000000 0000d8 000096 00   A  0   0  8

and:

    ./run-toolchain readelf -- -x .modinfo "$(./getvar kernel_modules_build_subdir)/module_info.ko"

gives:

      0x00000000 6c696365 6e73653d 47504c00 76657273 license=GPL.vers
      0x00000010 696f6e3d 312e3000 61736466 3d717765 ion=1.0.asdf=qwe
      0x00000020 72000000 00000000 73726376 65727369 r.......srcversi
      0x00000030 6f6e3d41 46334445 38413843 46434445 on=AF3DE8A8CFCDE
      0x00000040 42364230 30453335 42360000 00000000 B6B00E35B6......
      0x00000050 64657065 6e64733d 006e616d 653d6d6f depends=.name=mo
      0x00000060 64756c65 5f696e66 6f007665 726d6167 dule_info.vermag
      0x00000070 69633d34 2e31372e 3020534d 50206d6f ic=4.17.0 SMP mo
      0x00000080 645f756e 6c6f6164 206d6f64 76657273 d_unload modvers
      0x00000090 696f6e73 2000                       ions .

I think a dedicated section is used to allow the Linux kernel and command line tools to easily parse that information from the ELF file as we’ve done with `readelf`.

Bibliography:

- https://stackoverflow.com/questions/19467150/significance-of-this-module-in-linux-driver/49812248#49812248

- https://stackoverflow.com/questions/4839024/how-to-find-the-version-of-a-compiled-kernel-module/42556565#42556565

- https://unix.stackexchange.com/questions/238167/how-to-understand-the-modinfo-output