All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bruce Ashfield <bruce.ashfield@windriver.com>
To: Jens Rapp <rapp.jens@googlemail.com>, <yocto@yoctoproject.org>
Subject: Re: cannot compile kernel module - headers missing
Date: Mon, 23 Feb 2015 10:08:35 -0500	[thread overview]
Message-ID: <54EB4273.2030106@windriver.com> (raw)
In-Reply-To: <54EB40FC.1040301@gmail.com>

On 2015-02-23 10:02 AM, Jens Rapp wrote:
> hi,
>
> i have a simple hello world kernel module and i cannot compile it. linux
> headers are missing
> i tried to set -I $(OECORE_TARGET_SYSROOT)usr/src/kernel/include/
> but there seems to be much more missing..

What release are you using ? The kernel sources recently changed
in master (for the 1.8 release), so that could be catching you
in transition.

>
> is there any way to do this easier?

We have an example in meta-skeleton for a hello world module.
(meta-skeleton/recipes-kernel/hello-mod/). Have a look there and
it may answer most (if not all) questions.

Bruce

>
> here's what i have:
>
> module.c
> -------------
> #include <linux/module.h>
> #include <linux/spi.h>
> #include <linux/gpio.h>
> #include <linux/interrupt.h>
>
> #include <linux/kernel.h>
>
> /**
>   * initialisiert das Kernel - Modul
>   */
> int init_module(void) {
>      printk(KERN_DEBUG "Hallo Kernel!\n");
>      return 0;
> }
>
> void cleanup_module (void) {
>      printk (KERN_DEBUG "Ciao!\n");
> }
>
>
> and my Makefile
> ----------------------
> # file      Makefile
> # copyright Copyright (c) 2012 Toradex AG
> #           [Software License Agreement]
> # author    $Author$
> # version   $Rev$
> # date      $Date$
> # brief     a simple makefile to (cross) compile.
> #           uses the openembedded provided sysroot and toolchain
> # target    linux on Colibri T20 / Colibri T30
> # caveats   -
>
> ##############################################################################
>
> # Setup your project settings
> ##############################################################################
>
>
> # Set the input source files, the binary name and used libraries to link
> SRCS = module.c
> PROG := module
> LIBS =
> CONF_LIBS =
> C_FLAGS = -D__KERNEL__ -D__SMP__ -DMODULE -DMODVERSIONS
> # Set flags to the compiler and linker
> CFLAGS += -O2 -g -Wall `$(PKG-CONFIG) --cflags $(CONF_LIBS)`
> $(ARCH_CFLAGS) $(C_FLAGS)
> LDFLAGS += `$(PKG-CONFIG) --libs $(CONF_LIBS)`
>
> ##############################################################################
>
> # Setup your build environment
> ##############################################################################
>
>
> # Set the path to the oe built sysroot and
> # Set the prefix for the cross compiler
> OECORE_NATIVE_SYSROOT ?=
> $(HOME)/oe-core/build/out-eglibc/sysroots/x86_64-linux/
> OECORE_TARGET_SYSROOT ?=
> $(HOME)/oe-core/build/out-eglibc/sysroots/apalis-imx6/
> CROSS_COMPILE ?=
> $(OECORE_NATIVE_SYSROOT)usr/bin/armv7at2hf-vfp-neon-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-
>
>
> ##############################################################################
>
> # The rest of the Makefile usually needs no change
> ##############################################################################
>
>
> # Set differencies between native and cross compilation
> ifneq ($(strip $(CROSS_COMPILE)),)
>    LDFLAGS += -L$(OECORE_TARGET_SYSROOT)usr/lib
> -Wl,-rpath-link,$(OECORE_TARGET_SYSROOT)usr/lib
> -L$(OECORE_TARGET_SYSROOT)lib -Wl,-rpath-link,$(OECORE_TARGET_SYSROOT)lib
>    ARCH_CFLAGS = -march=armv7-a -fno-tree-vectorize -mthumb-interwork
> -mfloat-abi=hard -mtune=cortex-a9
>    BIN_POSTFIX =
>    PKG-CONFIG = export PKG_CONFIG_SYSROOT_DIR=$(OECORE_TARGET_SYSROOT); \
>                 export
> PKG_CONFIG_PATH=$(OECORE_TARGET_SYSROOT)/usr/lib/pkgconfig/; \
>                 $(OECORE_NATIVE_SYSROOT)usr/bin/pkg-config
> else
> # Native compile
>    PKG-CONFIG = pkg-config
>    ARCH_CFLAGS =
> # Append .x86 to the object files and binaries, so that native and cross
> builds can live side by side
>    BIN_POSTFIX = .x86
> endif
>
> # Toolchain binaries
> CC = $(CROSS_COMPILE)gcc
> LD = $(CROSS_COMPILE)gcc
> STRIP = $(CROSS_COMPILE)strip
> RM = rm -f
>
> # Sets the output filename and object files
> PROG := $(PROG)$(BIN_POSTFIX)
> OBJS = $(SRCS:.c=$(BIN_POSTFIX).o)
> DEPS = $(OBJS:.o=.o.d)
>
> # pull in dependency info for *existing* .o files
> -include $(DEPS)
>
> all: $(PROG)
>
> $(PROG): $(OBJS) Makefile
>      $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) $(LDFLAGS)
>      #$(STRIP) $@
>
> %$(BIN_POSTFIX).o: %.c
>      $(CC) -c $(CFLAGS) -o $@ $<
>      $(CC) -MM $(CFLAGS) $< > $@.d
>
> clean:
>      $(RM) $(OBJS) $(PROG) $(DEPS)
>
> .PHONY: all clean
>



      reply	other threads:[~2015-02-23 15:08 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-23 15:02 cannot compile kernel module - headers missing Jens Rapp
2015-02-23 15:08 ` Bruce Ashfield [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54EB4273.2030106@windriver.com \
    --to=bruce.ashfield@windriver.com \
    --cc=rapp.jens@googlemail.com \
    --cc=yocto@yoctoproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.