I have a BBB with Linux installed. Here is output from uname -a:
Linux beaglebone 3.8.13 #1 SMP Wed Sep 4 09:09:32 CEST 2013 armv7l GNU/Linux
I am trying to make a Kernel Module, for example HelloWorld.ko for it. Where can I get the kernel source tree for it?
I cloned code from git:``//github.com/RobertCNelson/linux-dev.git and checkout ``origin/am33x-v3.``8. However the version is 3.8.13-bone53. After I built a module on it and tried to insmod it on my BBB, I got error message:
Error: could not insert module Hello.ko: Invalid module format
please let me know what is wrong here. Thanks!
You don't need the whole source to build modules, only the headers. They usually come in a package, like Linux-headers, or should be available to download from wherever you found your distribution.
I have make an HelloWorld kernel module like that :
# cd
# mkdir Modules && cd Modules
# nano ModHello.c
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include <linux/init.h> /* Needed for the macros */
static int __init hello_start**(void)**
{
printk**(KERN_INFO “Loading HelloWorld module…\n”);**
printk**(KERN_INFO "* Hello world \n");*
return 0**;**
}
static void __exit hello_end**(void)**
{
printk**(KERN_INFO “GoodbyeWorld…\n”);**
}
module_init**(hello_start);**
module_exit**(hello_end);**
# make ARCH=arm CROSS_COMPILE= gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux/bin/arm-linux-gnueabihf- -o ModHello ModHello.c
# scp ModHello.ko root@xxx.xxx.xxx.xxx:/root/modules
# cd /root/modules
# insmod ModHello.ko
# lsmod
Module Size Used by
ModHello 832 0
# dmesg | tail
[ 2599.602704] Loading HelloWorld module…
[ 2599.602749] *** Hello world ***
# rmmod
# dmesg | tail
[ 2757.354253] GoodbyeWorld…
Good Luck