ilansch
ilansch

Reputation: 4878

Compiling kernel module - what packages are required

Until now, When I compiled my kernel module, I installed: kernel-devel, kernel-headers.
Later on, I had to include kernel sources.
So now the packages I install in order to compile my kernel module are: kernel-devel, kernel-headers and kernel.src.rpm (kernel source).
Im in the process of creating a "build machine" that will check for Available latest kernel, download necessary packages and compile the kernel module for that kernel.
I dont want to install the package, just to download it, and copy the files to their location (download kernel.src.rpm, rpm2cpio, cpio, and copy to /lib/modules/kernel-X-Y/) I noticed that if kernel src is installed, there is not need for kernel-headers.

kernel-devel is needed ??, I am not sure it is, when trying to install without kernel-devel, I get the following exception:

make[2]: Entering directory `/usr/src/kernels/3.10.0-693.el7.x86_64'

  ERROR: Kernel configuration is invalid.
         include/generated/autoconf.h or include/config/auto.conf are missing.
         Run 'make oldconfig && make prepare' on kernel src to fix it.
  WARNING: Symbol version dump ./Module.symvers
           is missing; modules will have no dependencies and modversions.

What am I missing ? If i install kernel-devel, then i dont get this exception, I dont want to install kernel-devel.

Upvotes: 0

Views: 1578

Answers (1)

Ahmed Masud
Ahmed Masud

Reputation: 22372

Before you can run make to compile the kernel you need to run make oldconfig or copy a .config file over into the build tree. make oldconfig will then use the .config and update it to the newer kernel.

You also have other options:

a simple make help | grep -i config in the kernel source directory shows:

Configuration targets:
  config      - Update current config utilising a line-oriented program
  nconfig         - Update current config utilising a ncurses menu based
  menuconfig      - Update current config utilising a menu based program
  xconfig     - Update current config utilising a Qt based front-end
  gconfig     - Update current config utilising a GTK+ based front-end
  oldconfig   - Update current config utilising a provided .config as base
  localmodconfig  - Update current config disabling modules not loaded
  localyesconfig  - Update current config converting local mods to core
  silentoldconfig - Same as oldconfig, but quietly, additionally update deps
  defconfig   - New config with default from ARCH supplied defconfig
  savedefconfig   - Save current config as ./defconfig (minimal config)
  allnoconfig     - New config where all options are answered with no
  allyesconfig    - New config where all options are accepted with yes
  allmodconfig    - New config selecting modules when possible
  alldefconfig    - New config with all symbols set to default
  randconfig      - New config with random answer to all options
  listnewconfig   - List new options
  olddefconfig    - Same as silentoldconfig but sets new symbols to their
  kvmconfig   - Enable additional options for kvm guest kernel support
  xenconfig       - Enable additional options for xen dom0 and guest kernel support
  tinyconfig      - Configure the tiniest possible kernel
  kselftest-merge - Merge all the config dependencies of kselftest to existing
                    .config.
  configuration. This is e.g. useful to build with nit-picking config.
  i386_defconfig           - Build for i386
  x86_64_defconfig         - Build for x86_64
  make O=dir [targets] Locate all output files in "dir", including .config

Upvotes: 4

Related Questions