linux嵌入式驱动开发,makefile到问题
obj-m:=helloworld.oKERNELDIR?=/lib/modules/$(shelluname-r)/buildPWD=$(shellpwd)defaul...
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不一样啊。
展开
展开全部
首先说一下,你要编译驱动程序,不再是跟原本编译应用程序那样可以在当前目录下直接make就好。
因为编译内核驱动的时候,是要用到内核文件里的头文件,还有内核提供的接口函数,要借助于内核文件夹里的makefile来编译你写好的驱动源代码,如果按一般的操作,你就得把源代码放到内核文件夹指定的目录下,然后再在那个目录下得makefile里添加一些语句,比如obj
-m什么的(把相应的驱动代码编译成模块),然后到内核文件夹的顶层目录make,生成相应的模块文件,就有你问题3的那一大堆东西,其中.ko就是要用到的。
把一些驱动编译成模块,和编译进内核的区别,你可以去了解下。。编译成模块用的是-m。
而为了方便你可以在任何目录下直接用make来编译驱动代码;就有以下这指令:
$(MAKE)
-C
$(KERNELDIR)
M=$(PWD)
modules
-C
指定的就是内核文件夹所在的地方
M=当前路径
modules的,是和make
联合起来的..make
modules命令,这个命令你可以去查查。
.ko文件就是用insmod命令插入到内核中,在去添加相应的设备文件,就可以在内核里跑起来了。
因为编译内核驱动的时候,是要用到内核文件里的头文件,还有内核提供的接口函数,要借助于内核文件夹里的makefile来编译你写好的驱动源代码,如果按一般的操作,你就得把源代码放到内核文件夹指定的目录下,然后再在那个目录下得makefile里添加一些语句,比如obj
-m什么的(把相应的驱动代码编译成模块),然后到内核文件夹的顶层目录make,生成相应的模块文件,就有你问题3的那一大堆东西,其中.ko就是要用到的。
把一些驱动编译成模块,和编译进内核的区别,你可以去了解下。。编译成模块用的是-m。
而为了方便你可以在任何目录下直接用make来编译驱动代码;就有以下这指令:
$(MAKE)
-C
$(KERNELDIR)
M=$(PWD)
modules
-C
指定的就是内核文件夹所在的地方
M=当前路径
modules的,是和make
联合起来的..make
modules命令,这个命令你可以去查查。
.ko文件就是用insmod命令插入到内核中,在去添加相应的设备文件,就可以在内核里跑起来了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询