So in order to compile a module for a precompiled version of the raspberry pi linux kernel, some quirks were necessary. The goal was to not build the kernel fully (which is also possible after these steps) but to rebuild a module for the currently running kernel after modifying its source.
If you have seen
Error: could not insert module drivers/w1/slaves/w1_therm.ko: Invalid module format
while trying to insmod and
[ 5697.914596] w1_therm: no symbol version for module_layout
in dmesg or
ERROR: could not insert 'w1_therm': Exec format error
after modprobe, then stick around.
My script with explanations is available over at
https://github.com/x29a/kernel/blob/master/rpi/prepare.sh
so hopefully all that needs to be done on the rpi is (as root, sudo -i)
# mkdir -p /root/kernel
# cd /root/kernel
# wget https://raw.githubusercontent.com/x29a/kernel/master/rpi/prepare.sh
then check if the defaults in the script are fine for you, like location for source and kernel branch, then execute
# bash prepare.sh
and follow the instructions. Each new message expects a keypress to continue.
Following is some additional info i found handy on my journey to a loadable module.
If you have used rpi-update by accident and got on an experimental kernel (remember, new kernels are now installed via apt-get!) you can revert to a stock kernel by forcing a reinstall via
apt-get install --reinstall raspberry-bootloader
When is Module.symvers generated.
How to get the right kernel version for a running setup without recompiling kernel.
Crosscompile a kernel module.
General information on building the rpi kernel and general kernel module building and contribution infos.
Tags: compile, kernel, module, raspberry pi