Linux设备驱动程序:gnu make 扩展语法
2013-02-12 17:45
267 查看
/************************************************************************************
原文地址:http://www.cppblog.com/aaxron/archive/2012/03/16/168055.html
说明:这里的Makefile和应用程序中的稍有不一样,特转载过来。
************************************************************************************/
要点:
在用户空间驱动程序
insmod
modprobe
rmmod
一些宏:
LINUX_VERSION_CODE
整数宏
GNU make 扩展语法
obj-m +=hello.o
KERNELDIR := /usr/src/linux-headers-2.6.32-5-686
PWD :=$(shell pwd)
.PHONY: test clean all
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versionsm *.order *.symvers .tmp_versions
test:
insmod ./hello.ko
rmmod hello
dmesg -c
obj-m
由内核构造系统使用的makefilet符号,用来确定在当前目录中应构造哪些模块.
即m:指定把对象编译为模块
obj-y
指定把对象编译进内核中
如果我们要构造的模块为module.ko,并由file1.c和file2.c则正确的makefile可如下编写:
obj-m :=module.o
module-objs :=file1.o file2.o
为了让上面的makefile可以工作,必须在大的内核构造系统环境中调用它们,所以上述命令首先要改变-C指定的目录,即:
$(MAKE) -C $(KERNELDIR)
然后指定M变量目录,即让makefile在构造modules目标之前返回到模块源代码的目录,既当前目录 M=$(PWD),最后modules目标指向obj-m变量中设定的模块.
M不是一个编译选项,而是一个变量,从顶层makefile文件里可以找到它的定义
文件在
/usr/src/linux-headers-2.6.32-5-common/Makefile
69 ifeq ("$(origin M)", "command line")
70 KBUILD_EXTMOD := $(M)
71 endif
-C 用于指定内核源代码的目录
-M 用于module所在的目录
如果一个模块包括了多个.c文件(如 file1.c , file2.c),则应该以如下方式编写Makefile
obj-m := modulename.o
module-objs := file1.o file2.o
原文地址:http://www.cppblog.com/aaxron/archive/2012/03/16/168055.html
说明:这里的Makefile和应用程序中的稍有不一样,特转载过来。
************************************************************************************/
要点:
在用户空间驱动程序
insmod
modprobe
rmmod
一些宏:
LINUX_VERSION_CODE
整数宏
GNU make 扩展语法
obj-m +=hello.o
KERNELDIR := /usr/src/linux-headers-2.6.32-5-686
PWD :=$(shell pwd)
.PHONY: test clean all
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versionsm *.order *.symvers .tmp_versions
test:
insmod ./hello.ko
rmmod hello
dmesg -c
obj-m
由内核构造系统使用的makefilet符号,用来确定在当前目录中应构造哪些模块.
即m:指定把对象编译为模块
obj-y
指定把对象编译进内核中
如果我们要构造的模块为module.ko,并由file1.c和file2.c则正确的makefile可如下编写:
obj-m :=module.o
module-objs :=file1.o file2.o
为了让上面的makefile可以工作,必须在大的内核构造系统环境中调用它们,所以上述命令首先要改变-C指定的目录,即:
$(MAKE) -C $(KERNELDIR)
然后指定M变量目录,即让makefile在构造modules目标之前返回到模块源代码的目录,既当前目录 M=$(PWD),最后modules目标指向obj-m变量中设定的模块.
M不是一个编译选项,而是一个变量,从顶层makefile文件里可以找到它的定义
文件在
/usr/src/linux-headers-2.6.32-5-common/Makefile
69 ifeq ("$(origin M)", "command line")
70 KBUILD_EXTMOD := $(M)
71 endif
-C 用于指定内核源代码的目录
-M 用于module所在的目录
如果一个模块包括了多个.c文件(如 file1.c , file2.c),则应该以如下方式编写Makefile
obj-m := modulename.o
module-objs := file1.o file2.o
相关文章推荐
- GNU C 9条扩展语法【linux 设备驱动开发详解】
- Linux 线程信号量,进程信号量和内核驱动程序信号量(线程同步信号量,进程同步信号量和设备驱动同步信号量)
- 《Linux Device Drivers》第十六章 块设备驱动程序——note
- Linux设备驱动程序学习(3)-字符设备驱动程序
- Linux设备驱动程序学习(2)-调试技术
- Linux下PCI设备驱动程序开发[转]
- 如何编写Linux的设备驱动程序
- 嵌入式Linux系统下I2C设备驱动程序的开发
- Linux 网络栈剖析 -- 从 socket 到设备驱动程序
- Linux设备驱动程序编写
- 如何编写Linux设备驱动程序
- ubuntu 下编译 linux设备驱动程序
- 12-基于OMAPL138的Linux设备驱动程序开发入门
- Linux下PCI设备驱动程序开发
- arm驱动程序——手动设备节点 (韦东山的视频总结及针对linux-2.6.30.4)
- Linux设备驱动程序第三版学习(2)-字符设备驱动程序源码分析(续)
- 如何编写Linux设备驱动程序
- 如何编写Linux设备驱动程序
- linux字符设备驱动程序源文件
- linux设备驱动程序 源码 2.6 内核编译错误总结