Chinaunix首页 | 论坛 | 博客
  • 博客访问: 215750
  • 博文数量: 37
  • 博客积分: 3082
  • 博客等级: 中校
  • 技术积分: 387
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-14 13:59
文章分类
文章存档

2013年(1)

2012年(1)

2011年(2)

2010年(7)

2009年(1)

2008年(13)

2007年(12)

我的朋友

分类: LINUX

2008-10-22 13:57:57

    学习内核的最好方法,个人觉得是对内核进行分析,理解作者的思想,进一步才思考如何改进。
    下面的文章只是我的读核笔记~如有错误的地方,请大家多多指教:)
 
 
一,为什么
一,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 -C M=`pwd`
其调用过程可以通过使用make -n来跟踪。
阅读(3955) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~