Makefile

# if not defined KERNELRELEASE, command is running from command line,need invoke kbuild system.

ifeq ($(KERNELRELEASE),)

KERNELDIR ?= /linux-2.6.30.4 # the directory of kernel source file

PWD := $(shell pwd) # the directory of module source file

modules:

  $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:

  $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:

  rm -rf *.o *~core.depend.*.cmd *.ko *.mod.c.tmp_versions

.PHONY: modules modules_install clean # if defined KERNELRELEASE, kbuild running

else

obj-m:= hello.o # the source file of module endif

#################################################################

该Makefile 在模块构造过程中一般将被调用两次。使用make 时,第一次 KERNELRELEASE 尚未定义。KERNELDIR 将被定义为内核源码路径,PWD 将被赋值为模块源码文件所在路径。然后通过 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules进入内核源码目录调用顶层Makefile 。顶层Makefile 会通过 M=$(PWD) 获得指定的模块源码所在路径,并调用其下的 Makefile。即该Makefile 将被调用第二次,此时将会执行else 后的语句,通过内核顶层Makefile 构建出模块。

编译模块的Makefile解析的更多相关文章

  1. 编译驱动的Makefile解析

    一个典型的编译驱动模块的Makefile文件如下所示: KERN_DIR = /root/driver/kernel obj-m += module_test.o all: make -C $(KER ...

  2. Linux课程实践二:编译模块实现内核数据操控

    一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态 ...

  3. 编译驱动Makefile解析

    #ubuntu的内核源码树,如果要编译在ubuntu中安装的模块就打开这2个 #KERN_VER = $(shell uname -r) #KERN_DIR = /lib/modules/$(KERN ...

  4. linux 实践2.2 编译模块

    1.  理解模块原理 linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率很高,但可扩展性和可维 ...

  5. Maven--多模块依赖实例解析(五)

    <Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)> <Maven—生命周期和插件(四)&g ...

  6. 20135218 Linux 实践二 编译模块

    20135218 姬梦馨 1.编写模块代码 模块构造函数:执行insmod或modprobe指令加载内核模块时会调用的初始化函数.函数原型必须是module_init(),括号内是函数指针 模块析构函 ...

  7. Linux 内核 编译模块

    背景: 由于调试内核或者由于分区大小限制,有时候内核组件不一定完全需要编进内核中. 所以,在开发中经常将内核组件编译成为模块,等到在恰当的时机加载. 概览: Linux内核模块的编译方法有两种: 1. ...

  8. java编译后字节码解析

    java编译后字节码解析 参考网摘: https://my.oschina.net/indestiny/blog/194260

  9. android源码环境下用mmm/mm编译模块,输出编译log到文件的方法

    android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...

随机推荐

  1. Struts2学习:HelloWorld

    项目结构: 1.用IDEA新建一个SpringBoot+Maven的项目 2.新建的项目是没有webapp.WEB-INF.与web.xml文件的,需要在下图中添加: 3.在pom.xml引入stru ...

  2. jieba gensim 用法

    简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能 ...

  3. SQL server约束

    约束的概念:确保在列中输入有效的值并维护表之间的关系. Primary key约束 功能:primary key(主键约束),一个表中只能有一个,不能有空值,不能有重复值. 创建表时定义约束:字段名 ...

  4. this绑定丢失的问题

    在之前的一篇文章<this绑定>中已经说过this绑定的四种情况,也谈到了this绑定丢失的问题,但是没有解释为什么会出现this绑定的丢失,最近在多次阅读关于this绑定方面的文章之后, ...

  5. ios判断当前设备类型

    代码如下: + (NSString*) deviceString { // 需要#import "sys/utsname.h" struct utsname systemInfo; ...

  6. C++ Sleep() sleep()

    简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 在VC中使用带上头文件 #include <windows ...

  7. 1.js简介

    1.JavaScript 诞生于1995年,起初主要用于处理网页中的前端验证. 2.前端验证:指检查用户输入的内容是否符合一定规则. 3.JavaScript 由网景公司发明. 4.JS 的标准命名为 ...

  8. 复习 HTML

    1.<b></b>:加粗 <i></b>:斜体 <u></u>:文字下划线 <s></s>:文字删除线 ...

  9. golang 字符串截取

    java中有SubString,那golang怎么截取字符串? str := "hello world" fmt.Print(str[:]) 以上代码输出 hello 数组,sli ...

  10. VUE 前端项目优化方法

    前端项目通过webpack打包会生成app.js和vendor.js,如果第三方组件依赖过多,会造成打包后的vendor.js过大,页面首次加载的时候会出现白屏时间过长,影响用户体验.对此,我们需要通 ...