最近在看宋宝华老师的<linux驱动开发详解> ,按照书写第一个字符设备驱动globalmem ~!
驱动源码参考书中,编译内核模块的关键问题就是Makefile 。运行在虚拟机的linux的Makefile 和 在开发板上的Makefile是不一样的。
通过查资料了解到其中的区别,在此写下笔记,方便自己复习,也方便他人。
Makefile如下:
ifneq ($(KERNELRELEASE),)
obj-m := globalmem.o
else
#KDIR :=/lib/modules/3.2.0-48-generic-pae/build // 这个是在虚拟机ubuntu上运行模块的KDIR,如果编译在虚拟机上的module ,把注释打开,下面的KDIR注释掉即可。
KDIR :=/home/mykernel/linux-3.0.1 // 开发板的KDIR (kernel directory),/home/mykernel/linux-3.0.1是开发板的内核源码在虚拟机ubuntu上的路径。
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux- //指定ARCH 和 CROSS_COMPILE 。如果Makefile里不指定在make时就必须指定
clean:
rm -f *.ko *.o *.mod