分类: LINUX
2010-03-28 22:36:45
2.6内核中编译外部模块的Makefile模板很多,但找到的几乎都是PC上的
记录一下方便以后再找
obj-m+=modulename.o
KDIR := /lib/modules/2.6.29.4-FriendlyARM/build/
PWD:= $(shell pwd)
CROSS_ARCH := ARCH=arm CROSS_COMPILE=arm-linux-
ARCH =arm
CROSS_COMPILE =arm-linux-
default:
$(MAKE) $(CROSS_ARCH) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -rf *.cmd *.o *.mod.c
第一行
虽然要编译的是.ko,但是这里还是要写obj-m+=modulename.o ,不然就报什么Makefile.build xxx目标不匹配什么的
这里仅仅编译了一个文件modulename.c
要有多个文件,再加
module-objs:=test1.o test2.o
第二行
KDIR ,指的是目标板上的源码目录
因为要烧到目标板上,所以编译内核时几乎所有的模块都是直接编译进去的,不是以外部模块形式存在的
不然一堆零件散在外面累死人
这样的话,一个make就够了
但是为了方便写Makefile,还是顺手make modules;make modules_install;一下,这样顺手就在
/lib/modulse/下生成了对应的moudules和头文件,如这个Makefile的KDIR不是直接的源码目录,而是
make modules;make modules_install;后生成的
即使这样,modulename.c里include 的头文件还不是KDIR里的,
我Makefile学的烂,不知道怎么改好,只有写成绝对路径了
改了一上午,终于把一个驱动满屏的错误改到两行了,
干这行真得需要一个有力的心脏,不然会抓狂致死