学习内核的最好方法,个人觉得是对内核进行分析,理解作者的思想,进一步才思考如何改进。
下面的文章只是我的读核笔记~如有错误的地方,请大家多多指教:)
一,为什么
一,obj-y与obj-m
根据/Document/kbuild/makefiles.txt的说明,Built-in object goals - obj-y,Loadable module goals - obj-m;如果是obj-y,那这部分代码就会编译成内核的一部分,如果是obj-m,那么就会编译成一个单独的驱动模块;这就是配置内核是会有[*](相当于[Y])[M][N]的原因了。
编译成内核的一部分,会增加内核的大小。
如果编译成单独的子模块,可以实现按需进行加裁。
二,一个简单的Makefile文件:
一个简单的Makefile文件如下:
ifneq ($(KERNELRELEASE),)
obj-m:=test.o
else
KERNELDIR ?= /usr/src/linux #指向内核源码的路径
PWM := $(shell pwd) #当前驱动目录的路径
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules #调用内核的方法编译驱动
endif
其中obj-m变量里保存要编译的驱动模块,其规则如下:
如果驱动是由单个.c文件构成的,则:
obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
如果驱动是由多个.c文件构成的,则:
obj-$(CONFIG_ISDN) += isdn.o
isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
编译外部模块
在/Document/kbuild/modules.txt中,可以看到编译外部模块的方法:
其调用过程可以通过使用make -n来跟踪。
阅读(403) | 评论(0) | 转发(0) |