linux嵌入式驱动开发,makefile到问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux嵌入式驱动开发,makefile到问题相关的知识,希望对你有一定的参考价值。
obj-m := helloworld.o KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD = $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean: $(RM) *.o *.ko *.mod.c Module.symvers Module.markers Module.symvers module.order 问题1.obj-m := helloworld.o 有什么用 问题2:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules 这个没看懂特别是为什么有个=号,还有个modules? 问题3:$(RM) *.o *.ko *.mod.c Module.symvers Module.markers Module.symvers module.order 后面那么多东西干什么到啊!! 最重要到问题,我要完全看懂需要什么知识点。和我以前写到makefile不一样啊。
参考技术A 首先说一下,你要编译驱动程序,不再是跟原本编译应用程序那样可以在当前目录下直接make就好。因为编译内核驱动的时候,是要用到内核文件里的头文件,还有内核提供的接口函数,要借助于内核文件夹里的makefile来编译你写好的驱动源代码,如果按一般的操作,你就得把源代码放到内核文件夹指定的目录下,然后再在那个目录下得makefile里添加一些语句,比如obj
-m什么的(把相应的驱动代码编译成模块),然后到内核文件夹的顶层目录make,生成相应的模块文件,就有你问题3的那一大堆东西,其中.ko就是要用到的。
把一些驱动编译成模块,和编译进内核的区别,你可以去了解下。。编译成模块用的是-m。
而为了方便你可以在任何目录下直接用make来编译驱动代码;就有以下这指令:
$(MAKE)
-C
$(KERNELDIR)
M=$(PWD)
modules
-C
指定的就是内核文件夹所在的地方
M=当前路径
modules的,是和make
联合起来的..make
modules命令,这个命令你可以去查查。
.ko文件就是用insmod命令插入到内核中,在去添加相应的设备文件,就可以在内核里跑起来了。
以上是关于linux嵌入式驱动开发,makefile到问题的主要内容,如果未能解决你的问题,请参考以下文章
Linux驱动开发笔记:helloworld驱动源码编写makefile编写以及驱动编译基本流程
嵌入式Linux第二部分 - 裸机开发/系统移植/驱动开发/内核开发