内核编译makefile详解

内核模块的编译方法

内核源码树:指导是内核源代码tar包解压缩后形成的目录(包含其下级所有目录和文件)。

 

已编译内核源码树:指的是已经成功生成过内核的源码树(已经成功执行过make  Uimage的内核源码树)

 

 

注:驱动大多都编译模块2.6内核中想要编译成模块,必须存在已编译内核源码树,且该源码树编译出来的内核就是该模块即将要运行在其上的内核。

 

 

编译方法一

步骤1 、编写Makefile

obj-m := hello.o

步骤2、编译命令(在终端中输入):

        make –C  内核源码树目录   M=`pwd`  modules

eg. 

Compute$make –C  /work/sysbuild/linux-2.6.22.6/  M=`pwd` modules

对于该make命令的解释:

由于目前不处于内核源码树的顶层目录,并且当前目录下的Makefile也没有modules目标,应此使用-C参数来告知make程序需要在执行之前切换到/work/sysbuild/linux-2.6.22.6/  目录。

此外,由于模块的源代码在当前目录中,不在内核源码中,应此需要使用M变量该变量是内核构造系统的变量)告知内核构造系统,编译模具爱所需要的源代码以及Makefile在当前目录(/work/sysbuild/linux-2.6.22.6/)中来找,而且最终生成模块.ko文件也要放在当前目录中。

 

编译方法二

 

步骤1、编写makefile如下:

If ( $ (KERNELREASE), )

       KERNELDIR  ?=  /work/sysbuild/linux-2.6.22.6

PWD := $( shell  pwd )

Modules :

       $MAKE -C KERNELDIRM = PWDmodules

else

       obj-m  :=  hello.o

end if

 

步骤2、编译命令make

对该makefile的解释

make时,由于变量KERNELRELEASE尚未赋值,所以if的判断为真,于是变脸KERNELDIR被赋值为内核源码树的目录,

PWD被赋值为当前目录,

执行找到的第一个目标modules

执行目标编译命令,当该命令执行调用内核构造系统系统的时候,内核构造系统会为变量KERNELREASE赋值,从而它不再为空,从而当前目录下的makefile就变成了只有一行 obj-m := hello.o

最后将得到编译好的模块hello.ko

 

老师的参考makefile

Ifneq $KERNELRELEASE,

Obj-m := hello.o

Else

KDIR := /mini2440/linux-2.6.32.2

PWD := $(shell pwd)

all:

       make  –C  $(KDIR)  M= $(PWD) modules  ARCH=arm  CROSS_COMPILE = arm-linux-

.PKONY:clean

Clean:

       @rm  –rf   ****

endif

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值