This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/OMAP-L138: Trouble building simple kernel module for Linux

Part Number: OMAP-L138

Tool/software: Linux

Hi,

I'm trying to build a custom kernel module for OMAP-L138, so to start from the basics, I've just tried compiling a simple "Hello World" module, but I'm getting the following long list of compilation errors, which seem to stem from Linux headers, but I'm not sure.

== Source code ==

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>

int __init test_init(void)
{
printk("Hello world! %s %s\n", __DATE__, __TIME__);
return 0;
}

void __exit test_exit(void)
{
printk("Bye !\n");
}

module_init(test_init);
module_exit(test_exit);

MODULE_AUTHOR("Okan CALIS");
MODULE_DESCRIPTION("Example");
MODULE_LICENSE("GPL");
MODULE_VERSION("1");

== Makefile ==

obj-m := ktest.o

KDIR := /home/okancalis/linux-davinci/
PWD := /home/okancalis/kmod_test/
ARCH := arm
CROSS_COMPILE := arm-angstrom-linux-gnueabi-

all:
make -C $(KDIR) SUBDIRS=$(PWD) modules

== Build Log ==

make -C /home/okancalis/linux-davinci/ SUBDIRS=/home/okancalis/kmod_test/ modules
make[1]: Entering directory '/home/okancalis/linux-davinci'
CC [M] /home/okancalis/kmod_test//ktest.o
In file included from /home/okancalis/linux-davinci/arch/x86/include/asm/bitops.h:16:0,
from include/linux/bitops.h:22,
from include/linux/kernel.h:17,
from /home/okancalis/kmod_test//ktest.c:1:
/home/okancalis/linux-davinci/arch/x86/include/asm/arch_hweight.h: In function ‘__arch_hweight64’:
/home/okancalis/linux-davinci/arch/x86/include/asm/arch_hweight.h:53:42: error: expected ‘:’ or ‘)’ before ‘POPCNT64’
asm (ALTERNATIVE("call __sw_hweight64", POPCNT64, X86_FEATURE_POPCNT)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/alternative.h:93:18: note: in definition of macro ‘ALTERNATIVE’
"663:\n\t" newinstr "\n664:\n" /* replacement */ \
^
In file included from include/linux/cache.h:5:0,
from include/linux/time.h:7,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/processor.h: At top level:
/home/okancalis/linux-davinci/arch/x86/include/asm/cache.h:7:25: error: ‘CONFIG_X86_L1_CACHE_SHIFT’ undeclared here (not in a function)
#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/cache.h:8:30: note: in expansion of macro ‘L1_CACHE_SHIFT’
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
^
include/linux/cache.h:12:25: note: in expansion of macro ‘L1_CACHE_BYTES’
#define SMP_CACHE_BYTES L1_CACHE_BYTES
^
/home/okancalis/linux-davinci/arch/x86/include/asm/processor.h:115:30: note: in expansion of macro ‘SMP_CACHE_BYTES’
} __attribute__((__aligned__(SMP_CACHE_BYTES)));
^
In file included from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:22:0,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/processor.h:157:0: warning: "cache_line_size" redefined
#define cache_line_size() (boot_cpu_data.x86_cache_alignment)
^
In file included from include/linux/time.h:7:0,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
include/linux/cache.h:64:0: note: this is the location of the previous definition
#define cache_line_size() L1_CACHE_BYTES
^
In file included from /home/okancalis/linux-davinci/arch/x86/include/asm/atomic.h:314:0,
from include/linux/atomic.h:4,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:19:40: error: unknown type name ‘atomic64_t’
static inline long atomic64_read(const atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h: In function ‘atomic64_read’:
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:21:32: error: request for member ‘counter’ in something not a structure or union
return (*(volatile long *)&(v)->counter);
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h: At top level:
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:31:33: error: unknown type name ‘atomic64_t’
static inline void atomic64_set(atomic64_t *v, long i)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:43:41: error: unknown type name ‘atomic64_t’
static inline void atomic64_add(long i, atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:57:41: error: unknown type name ‘atomic64_t’
static inline void atomic64_sub(long i, atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:73:49: error: unknown type name ‘atomic64_t’
static inline int atomic64_sub_and_test(long i, atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:89:33: error: unknown type name ‘atomic64_t’
static inline void atomic64_inc(atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:102:33: error: unknown type name ‘atomic64_t’
static inline void atomic64_dec(atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:117:41: error: unknown type name ‘atomic64_t’
static inline int atomic64_dec_and_test(atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:135:41: error: unknown type name ‘atomic64_t’
static inline int atomic64_inc_and_test(atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:154:49: error: unknown type name ‘atomic64_t’
static inline int atomic64_add_negative(long i, atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:171:48: error: unknown type name ‘atomic64_t’
static inline long atomic64_add_return(long i, atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:176:48: error: unknown type name ‘atomic64_t’
static inline long atomic64_sub_return(long i, atomic64_t *v)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:184:37: error: unknown type name ‘atomic64_t’
static inline long atomic64_cmpxchg(atomic64_t *v, long old, long new)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:189:34: error: unknown type name ‘atomic64_t’
static inline long atomic64_xchg(atomic64_t *v, long new)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:203:39: error: unknown type name ‘atomic64_t’
static inline int atomic64_add_unless(atomic64_t *v, long a, long u)
^
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:227:45: error: unknown type name ‘atomic64_t’
static inline long atomic64_dec_if_positive(atomic64_t *v)
^
In file included from include/linux/atomic.h:102:0,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
include/asm-generic/atomic64.h:21:18: error: conflicting types for ‘atomic64_read’
extern long long atomic64_read(const atomic64_t *v);
^
In file included from /home/okancalis/linux-davinci/arch/x86/include/asm/atomic.h:314:0,
from include/linux/atomic.h:4,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:19:20: note: previous definition of ‘atomic64_read’ was here
static inline long atomic64_read(const atomic64_t *v)
^
In file included from include/linux/atomic.h:102:0,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
include/asm-generic/atomic64.h:34:0: warning: "atomic64_inc_return" redefined
#define atomic64_inc_return(v) atomic64_add_return(1LL, (v))
^
In file included from /home/okancalis/linux-davinci/arch/x86/include/asm/atomic.h:314:0,
from include/linux/atomic.h:4,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:181:0: note: this is the location of the previous definition
#define atomic64_inc_return(v) (atomic64_add_return(1, (v)))
^
In file included from include/linux/atomic.h:102:0,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
include/asm-generic/atomic64.h:38:0: warning: "atomic64_dec_return" redefined
#define atomic64_dec_return(v) atomic64_sub_return(1LL, (v))
^
In file included from /home/okancalis/linux-davinci/arch/x86/include/asm/atomic.h:314:0,
from include/linux/atomic.h:4,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:182:0: note: this is the location of the previous definition
#define atomic64_dec_return(v) (atomic64_sub_return(1, (v)))
^
In file included from include/linux/atomic.h:102:0,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
include/asm-generic/atomic64.h:40:0: warning: "atomic64_inc_not_zero" redefined
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1LL, 0LL)
^
In file included from /home/okancalis/linux-davinci/arch/x86/include/asm/atomic.h:314:0,
from include/linux/atomic.h:4,
from /home/okancalis/linux-davinci/arch/x86/include/asm/thread_info.h:24,
from include/linux/thread_info.h:53,
from include/linux/preempt.h:9,
from include/linux/spinlock.h:50,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/atomic64_64.h:218:0: note: this is the location of the previous definition
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
^
In file included from include/linux/elf.h:7:0,
from include/linux/module.h:14,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/elf.h: In function ‘elf_common_init’:
/home/okancalis/linux-davinci/arch/x86/include/asm/elf.h:168:3: error: ‘struct thread_struct’ has no member named ‘fs’
t->fs = t->gs = 0;
^
In file included from include/linux/module.h:22:0,
from /home/okancalis/kmod_test//ktest.c:2:
/home/okancalis/linux-davinci/arch/x86/include/asm/module.h: At top level:
/home/okancalis/linux-davinci/arch/x86/include/asm/module.h:59:2: error: #error unknown processor family
#error unknown processor family
^
scripts/Makefile.build:311: recipe for target '/home/okancalis/kmod_test//ktest.o' failed
make[2]: *** [/home/okancalis/kmod_test//ktest.o] Error 1
Makefile:1359: recipe for target '_module_/home/okancalis/kmod_test/' failed
make[1]: *** [_module_/home/okancalis/kmod_test/] Error 2
make[1]: Leaving directory '/home/okancalis/linux-davinci'
Makefile:9: recipe for target 'all' failed
make: *** [all] Error 2

I managed to eliminate some errors (like "compiler-gcc5.h" error, because my kernel supports "gcc4"), but couldn't advance any further.

Can you help?

Silacko