linux内核make 时间久,Linux内核makefile问题
--------------------------------------------- Make
file相关-------------------------------------------------
https://www.cnblogs.com/wang_yb/p/3990952.html
https://www.cnblogs.com/cecwxf/archive/2012/04/26/2470968.html
对于追加运算符“+
=”,如果变量先前被设置为简单变量(':='或':: ='),则右侧被视为立即数,否则被延迟。
一、Makefile 中:= 、?=、+=、:=的区别
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
1、“=”
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
x = foo
y = $(x) bar
x = xyz
在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
2、“:=”
“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
x := foo
y := $(x) bar
x := xyz
在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。
xxx-objs:
xxx-objs指定了编译对象需要的文件,一般只有在源文件是多个时才需要它。
obj-?:
obj-?指定编译什么,怎么编译?其中的“?”可能是“y”或“m”。“y”指定把对象编译进内核中,“m”指定把对象编译为模块。
二、Makefile 命令前缀
Makefile 中书写shell命令时可以加2种前缀 @ 和 -, 或者不用前缀.
3种格式的shell命令区别如下:
不用前缀 :: 输出执行的命令以及命令执行的结果, 出错的话停止执行
前缀 @ :: 只输出命令执行的结果, 出错的话停止执行
前缀 - :: 命令执行有错的话, 忽略错误, 继续执行
三、目标定义
$(obj-m)指明object文件作为可装载的内核模块被构建。一个模块可能从一个或者多个源文件被构建。
kbuild maefile只是简单的将源文件加到%(obj-m)。
目标定义就是用来定义哪些内容要做为模块编译,哪些要编译链接进内核。 obj-y += foo.o
表示要由foo.c或者foo.s文件编译得到foo.o并链接进内核,而obj-m则表示该文件要作为模块编译。
除了y,m以外的obj-x形式的目标都不会被编译。 而更常见的做法是根据.config文件的CONFIG_
变量来决定文件的编译方式。
例如: obj-$(CONFIG_ISDN) += isdn.o
obj-$(CONFIG_ISDN_PPP_BSDCOMP) +=
isdn_bsdcomp.o
除了obj-形式的目标以外,还有lib-y library库,hostprogs-y
主机程序等目标,但是基本都应用在特定的目录和场合下。
四、多文件模块的定义
如果一个内核模块从多个源文件构建,KBuild就必须要知道你想从哪些部分构建模块。
因此,你不得不设置$(-objs)变量来告诉KBuild。
最简单的kbuild
Makefile如上一节一句话的形式就够了,如果一个模块由多个文件组成,那么稍微复杂一些,
采用模块名加–objs后缀或者–y后缀的形式来定义模块的组成文件。
Kbuild使用后缀-objs,-y来识别混合的object文件。-objs代表多个源文件。
这允许Makefiles使用变量CONFIG_符号来决定一个object是否是混合object的的一部分。若CONFIG_符号=y,则一个object是混合object的的一部分。
例如: obj-$(CONFIG_EXT2_FS) += ext2.o
ext2-y := balloc.o bitmap.o
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
Kbuild 是使用後綴 -objs 及 -y 來識別哪些目的檔將作為合成目的檔。
這使 Makefile 能夠藉由 CONFIG_ 符號值,來判定某目的檔是否是合成目的檔的一部分。
在這項範例裡,若 $(CONFIG_EXT2_FS_XATTR) 為 'y',
xattr.o 才會成為合成目的檔 ext2.o 的一部分。
模块的名字为ext2,由balloc.o和bitmap.o两个目标文件最终链接生成ext2.o
直至ext2.ko文件,是否包括xattr.o取决于内核配置文件的配置情况(内核选项设置“make
menuconfig”时CONFIG_EXT2_FS_XATTR是否设置为y)。
注意,当你构造一个objects到内核中时,上面的语法当然也能够工作。
因此,如果你让CONFIG_EXT2=Y,KBuild将会为你构建一个独立的ext2.o文件,并且连接到built-in.o。
如果CONFIG_EXT2_FS的值是y也没有关系,在此过程中生成的ext2.o将被链接进built-in.o最终链接进内核。
这里需要注意的一点是,该kbuild
Makefile所在的目录中不应该再包含和模块名相同的源文件如ext2.c/ext2.s。
五、目录层次的迭代:
obj-$(CONFIG_EXT2_FS) += ext2/
如果CONFIG_EXT2_FS
的值为y或m,kbuild将会将ext2目录列入向下迭代的目标中,但是其作用也仅限于此,
具体ext2目录下的文件是要作为模块编译还是链入内核,还是有ext2目录下的Makefile文件的内容来决定的。
嵌套编译:
有时一个对象可能嵌入到另一个对象的目录下,那个如何编译子目录下的对象呢?其实很简单,只要指定obj_?的对象
为子目录的名字就可以了:
obj-? = $(sub_target)/
其中“?”可以是“y”或“m”,$(sub_target)是子目录名字。
linux内核make 时间久,Linux内核makefile问题相关推荐
- linux普通用户时间乱码,Linux root用户与普通用户时间不一致
造成这种原因有多种,可能是安装软件时选的时区不是本国时间等等. 今天检查了root用户和oracle及grid用户的时间不一样,幸好数据库还没有正式应用,不然可能会造成时间差影响. 现在将同步的方法步 ...
- linux锁定系统时间设置,Linux时间设置系统时间、硬件时间和时间服务
Linux有两个时间,一个是系统时间,一个是RTC时间(也叫硬件时间). Linux系统启动时,会自动获取硬件时间,设置为系统时间. 一.查询系统时间: 查询系统时间:date 查询/设置硬件时间: ...
- linux和window时间不一致,linux时间与Windows时间不一致的解决
转载至http://goodluck1982.blog.sohu.com/138950694.html 一.首先要弄清几个概念: 1. "系统时间"与"硬件时间" ...
- 查看linux重启机时间,【linux】查看Linux开机时间/重启时间/运行时间
[linux]查看Linux开机时间/重启时间/运行时间 6年前 (2015-07-14) 作者:Jiaozn 分类:Linux 阅读次数:4164 评论(0) 有时候需要查看Lin ...
- Linux内核tcp时间测量,linux内核 – 测试linux内核中函数的执行时间
我使用Linux安全模块挂钩来添加一些自定义功能到recv()系统调用.与原始的recv()相比,我想测量这个功能的开销.我写了一个简单的tcp服务器,我运行与没有我的模块.这个tcp服务器调用rec ...
- Linux服务器上线时间,查看linux服务器时间
你可以使用下面的工具来查看 Linux 或类 Unix 系统运行了多长时间: ◆uptime:告诉你服务器运行了多长的时间. ◆lastt:显示重启和关机时间. ◆tuptime:报告系统的运行时间历 ...
- linux 用户创建时间,在linux中如何能得知一个用户的创建时间?
在linux中如何能得知一个用户的创建时间? (2011-08-24 03:36:01) 标签: 杂谈 在linux中如何能得知一个用户的创建时间?如题.之前我试过id.passwd以及通过stat查 ...
- linux显示前一天时间,在linux显示昨天(前一天)的日期
day=`date -d '-7 day' +%Y-%m-%d` //声明一个day变量,得到的是日期七天前的日期. man date,可以看到date可以显示当前的时间,修改系统 ...
- linux日志按照时间切割,Linux下把tomcat日志按日期自动分割
Linux中tomcat日志分割需要用到cronolog 附上cronolog-1.6.2.tar.gz 1. 安装cronolog tar –zxvf cronolog-1.6.2.tar.gz . ...
- linux上点时间延时,Linux上时间和定时器
Linux下时间和定时器 http://blog.chinaunix.net/u1/35065/showart_1870601.html重点读了第三种方法.文章写得很好,加了一点点注释可参考http: ...
最新文章
- 看BAT技术面试官如何挑选Java程序员
- 数值分析 pdf_统计分析前,要做哪些数据准备工作?
- WordPress Terillion Reviews插件HTML注入漏洞
- kendo treeview 修改节点显示值_VBA学习笔记60-1: Treeview控件
- 【ES6(2015)】Class (类)
- Educational Codeforces Round 18
- node.js第十课(HTTPserver)
- LeetCode 300最长递增子序列
- 宿主程序Crash与Lua是动态库还是静态库有关?
- IBM Lotus Domino Designer 下载安装记录
- 华硕笔记本BIOS详细设置
- mycncart如何开启短信验证接口功能
- 使用redis list类型解决卡券类奖品发放问题
- php 画布插入图像,PHP图片处理之图片背景、画布操作
- linux中apache与tomcat如何使用
- [AGC001E]BBQ Hard
- linux u盘内容乱码,解决Linux下U盘乱码的方法
- 隐藏win32控制台程序的窗口
- CVE-2017-5689(智能Intel产品AMT本地及远程提权漏洞)
- java直板手机_新一代街机之选!诺基亚S40金属直板6300评测