도와주세요!!
아래의 logo는 제가 모듈프로그램을 한 번 해보려고 했더니..아래와 같이 에러가 발생했습니다.
우선 제가 준비한 것은 OS 및 toolchain 사양은 아래와 같습니다.
Host : 커널 2.6.32-37-generic
Target : 커널 2.6.30
arm tool chain : gcc version 4.3.3 (GCC)
제가 짠 아주 단순한 모듈 프로그램의 소스를 짜고 make를 했는데...이런 에러가 나왔습니다.
어떻게 해결 할 수 있는 것인가요??
혹시나 해서 제 소스와 makefile을 올립니다.
//////////////// hello.c /////////////////////////////////
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int hello_init(void)
{
printk("Hello World\n");
return 0;
}
static void hello_exit(void)
{
printk("Goodbyte\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
//////////////////////////////////////////////////////////////////////////////
////////////////// Makefile //////////////////////////////////////
CC = /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc
obj-m :=hello.o
KDIR := /usr/src/linux/
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules ARCH=arm
clean:
rm -rf *.ko
rm -rf *.mod.*
rm -rf .*.cmd
rm -rf *.o
///////////////////////////////////////////////////////////////
////////// make 순서 및 Error logo ///////////////////////////////////////
root@devpc-laptop:/home/nfsroot# make
make -C /usr/src/linux/ SUBDIRS=/home/nfsroot modules ARCH=arm
make[1]: Entering directory `/usr/src/linux-2.6.30'
WARNING: Symbol version dump /usr/src/linux-2.6.30/Module.symvers
is missing; modules will have no dependencies and modversions.
CC [M] /home/nfsroot/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/nfsroot/hello.mod.o
LD [M] /home/nfsroot/hello.ko
ld: /home/nfsroot/hello.o: Relocations in generic ELF (EM: 40)
ld: /home/nfsroot/hello.o: Relocations in generic ELF (EM: 40)
/home/nfsroot/hello.o: could not read symbols: File in wrong format
make[2]: *** [/home/nfsroot/hello.ko] Error 1
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.30'
make: *** [default] Error 2
root@devpc-laptop:/home/nfsroot#
컴파일러는 arm이지만, 커널 소스가 arm이 아닌것으로 보이네요.
저정도 모듈을 학습하시는 것이라면, 컴파일러를 그냥 x86용 gcc로 하시는게 나을듯 합니다.
그게 아니라면, 해당 툴체인으로 컴파일된 커널 소스를 참조하셔야 합니다.