内核模块的编译:
如果内核是加载到主机上的Linux系统中,即使用主机上的内核编译,Makefile文件为:
ifneq ($(KERNELRELEASE),)
obj-m:=hello.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.symvers *.cmd *.cmd.o
endif
如果是需要将内核模块加载上开发板如S3C2440上面,则需要用移植到开发板上面的内核进行编译,Makefile文件为:
ifneq ($(KERNELRELEASE),)
obj-m := memdev.o
else
KDIR := /home/tanner/tools/linux-2.6.32.2 //Linux系统上内核的位置
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul*
endif
使用arm-linux-gcc交叉编译器进行编译,其中主机上Linux内核是经过内核配置编译后移植到开发板上的内核
收录比较详细的内核模块编译文件Makefile博客:
Linux 驱动开发之内核模块开发 (二)—— 内核模块编译 Makefile 入门
insmod hello.ko -1 Invalid module format最简单的解决办法
内核模块之模块参数博客: